久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2819|回復(fù): 2
收起左側(cè)

具有校正功能的時(shí)鐘1302

[復(fù)制鏈接]
ID:111634 發(fā)表于 2016-5-4 22:16 | 顯示全部樓層 |閱讀模式

實(shí)例91 具有校正功能的時(shí)鐘1302LCD1602顯示)

上例時(shí)鐘電路是開機(jī)顯示PC機(jī)時(shí)間,無時(shí)鐘校正功能,本例具有時(shí)鐘校正功能。

電路設(shè)計(jì)

在上例時(shí)鐘電路的基礎(chǔ)上,加入3個(gè)時(shí)鐘修正按鍵:K0(修正)、K1(移位)和K2(加1),分別與80C51P2.7P2.5P2.3連接,如圖7-6所示


  
    



圖7-6.jpg



程序設(shè)計(jì)

7-6電路,要求開機(jī)顯示20121113時(shí)4758秒,星期日(7),且要求K0K1K2具有時(shí)鐘校正功能,其控制過程為:按下K0(帶鎖),進(jìn)入時(shí)鐘修正;首先年數(shù)據(jù)(12)快速閃爍,表示可被修正;按一次K1(不帶鎖),被修正位(快速閃爍)按年、周、月、日、時(shí)、分、秒次序循環(huán)往復(fù);按一次K2(不帶鎖),被修正位加1(最大值不超過時(shí)鐘規(guī)定值,超過復(fù)0);時(shí)鐘修正期間,計(jì)時(shí)繼續(xù)運(yùn)行;釋放K0,退出時(shí)鐘修正。

#include <reg51.h>                      //包含訪問sfr庫函數(shù)reg51.h

sbit  RST=P1^0;                        //定義RSTP1.01302復(fù)位/片選端)

sbit  SCLK=P1^1;                     //定義SCLKP1.11302時(shí)鐘端)

sbit IO=P1^2;                         //定義IOP1.21302數(shù)據(jù)端)

sbit E=P1^3;                          //定義EP1.31602使能片選端)

sbit  RW=P1^4;                        //定義RWP1.41602/寫控制端)

sbit RS=P1^5;                        //定義RSP1.51602寄存器選擇端)

sbit K0=P2^7;                         //定義K0P2.7(時(shí)鐘修正標(biāo)志鍵)

sbit K1=P2^5;                         //定義K1P2.5(時(shí)鐘修正移位鍵)

sbit K2=P2^3;                         //定義K2P2.3(時(shí)鐘修正加1鍵)

sbit  ACC7=ACC^7;                     //定義ACC7為累加器A7ACC.7

bit  f=0;                               //定義0.15s標(biāo)志f

unsigned char  m=0;                     //定義50ms計(jì)數(shù)器m,并賦初值0

unsigned char  n=6;                     //定義修正位序號(hào)nn賦初值6(年序號(hào))

unsigned char  b[8];          //定義時(shí)鐘數(shù)據(jù)數(shù)組b,內(nèi)存秒分時(shí)日月周年即時(shí)讀出值(BCD碼)

unsigned char  y[]="2000-00-00-Week0";        //定義1602第一行年月日數(shù)組y20××-××-××-Week×

unsigned char  h[]="00:00:00--------";            //定義1602第二行時(shí)分秒數(shù)組h××:××:××--------

void  Wr8b (unsigned char  d);           //13028位數(shù)據(jù)子函數(shù)(寫入數(shù)據(jù)d)。略,見實(shí)例90

unsigned char  Rd8b ();                  //13028位數(shù)據(jù)子函數(shù)。略,見實(shí)例90

void  Cmd_Wr(unsigned char  c,d);        //1302命令寫一字節(jié)子函數(shù)。略,見實(shí)例90

void  Bst_Rd (unsigned char  t[]);          //1302突發(fā)讀時(shí)鐘子函數(shù)。形參t[]。略,見實(shí)例90

void  Bst_Wr(unsigned char  t[]);         //1302突發(fā)寫時(shí)鐘子函數(shù)。略,見實(shí)例90

void  out (unsigned char x);              //1602并行數(shù)據(jù)輸出子函數(shù)。略,見實(shí)例61

void  init1602 ( );                      //1602初始化設(shè)置子函數(shù)。略,見實(shí)例61

void  wr1602(unsigned char d[],a);          //1602函數(shù)。略,見實(shí)例61

void  chag (unsigned char y[],unsigned char h[],unsigned char b[]);      //時(shí)鐘數(shù)據(jù)轉(zhuǎn)換顯示數(shù)子函數(shù)

//形參:1602第一行顯示數(shù)組y[]、第二行顯示數(shù)組h[]、時(shí)鐘數(shù)據(jù)數(shù)組b[]。略,見實(shí)例90

時(shí)鐘修正鍵.jpg


主函數(shù).jpg


T0中斷函數(shù).jpg

Keil調(diào)試

本題Keil調(diào)試同上例。因涉及外圍元件DS1302LCD1602,在Keil軟件調(diào)試中無法得到外圍元件的有效信號(hào)。因此,僅在Keil中,按實(shí)例1所述步驟,編譯鏈接,語法糾錯(cuò),自動(dòng)生成Hex文件,并在變量觀察窗口Watch頁中設(shè)置(設(shè)置方法參閱8-30)全局變量b(時(shí)鐘數(shù)據(jù)數(shù)組)、y(第一行年月日數(shù)組)和h(第二行時(shí)分秒數(shù)組),獲得數(shù)組b[]y[]h[]的首地址(分別為0x210x3c0x29,用于在Proteus仿真中觀測)。

需要注意的是,引用前述實(shí)例中的9個(gè)子函數(shù)必須插入,否則Keil調(diào)試將顯示出錯(cuò)。


Proteus仿真

實(shí)例23所述Proteus仿真步驟,打開Proteus ISIS軟件,按7-4選擇和放置元器件,并連接線路,畫出Proteus仿真電路如7-7所示。

表7-4.jpg



圖7-7.jpg


鼠標(biāo)左鍵雙擊Proteus ISIS仿真電路中AT89C51,裝入Keil調(diào)試后自動(dòng)生成的Hex文件。

全速運(yùn)行后,1602顯示實(shí)時(shí)時(shí)鐘,初始值為程序中設(shè)置的20121113時(shí)4758秒,周7(日),并隨后不斷更新實(shí)時(shí)數(shù)值

按下K0(鎖定),進(jìn)入時(shí)鐘修正。

需要說明的是,本例選用的BUTTON按鍵有兩種運(yùn)行功能:有鎖運(yùn)行和無鎖運(yùn)行。作有鎖運(yùn)行時(shí),鼠標(biāo)左鍵單擊按鍵圖形中小紅圓點(diǎn),單擊第一次閉鎖,第二次開鎖。作無鎖運(yùn)行時(shí),鼠標(biāo)左鍵單擊按鍵圖形中鍵蓋帽“   ”,單擊一次,鍵閉合后彈開一次,不閉鎖。

首先年數(shù)據(jù)快速閃爍,表示年數(shù)據(jù)允許修正。此時(shí)每按一次K2(鼠標(biāo)左鍵單擊鍵圖形中鍵蓋帽“    ”,單擊一次,鍵閉合后彈開一次,不閉鎖),年數(shù)據(jù)顯示數(shù)加1,但不超過年最大值2099,超過時(shí)復(fù)位2000

若再按一次K1(不閉鎖,方法同K2),被修正位(快速閃爍,表示該位允許修正)移至周數(shù)據(jù),每按一次K2,周數(shù)據(jù)顯示數(shù)加1,但不超過周最大值7,超過時(shí)復(fù)位1

再按一次K1,被修正位(快速閃爍)移至月數(shù)據(jù),每按一次K2,月數(shù)據(jù)顯示數(shù)加1,但不超過月最大值12,超過時(shí)復(fù)位1

再按一次K1,被修正位(快速閃爍)移至日數(shù)據(jù),每按一次K2,日數(shù)據(jù)顯示數(shù)加1,但不超過規(guī)定的最大值(閏年2月,日數(shù)≤29;非閏年2月,日數(shù)≤2846911月,日數(shù)≤30;其余月份,日數(shù)≤31),超過時(shí)復(fù)位1

再按一次K1,被修正位(快速閃爍)移至?xí)r數(shù)據(jù),每按一次K2,時(shí)數(shù)據(jù)顯示數(shù)加1,但不超過最大值23,超過時(shí)復(fù)位0

再按一次K1,被修正位(快速閃爍)移至分?jǐn)?shù)據(jù),每按一次K2,分?jǐn)?shù)據(jù)顯示數(shù)加1,但不超過最大值59,超過時(shí)復(fù)位0

再按一次K1,被修正位(快速閃爍)移至秒數(shù)據(jù),每按一次K2,秒數(shù)據(jù)顯示數(shù)加1,但不超過最大值59,超過時(shí)復(fù)位0

再按一次K1,被修正位(快速閃爍)重新移至年數(shù)據(jù)。這樣,按年周月日時(shí)分秒次序循環(huán)往復(fù);按一次K2(不帶鎖),被修正位加1(最大值不超過時(shí)鐘規(guī)定值);釋放K0,退出時(shí)鐘修正。

再按一次K0K0釋放,退出時(shí)鐘修正。

按暫停按鈕,打開80C51片內(nèi)RAM(主菜單Debug80C51 CPUInternalIDATAMemory -U1),可看到21H28H29H38H3CH4BH中,已經(jīng)依次存放了時(shí)鐘數(shù)據(jù)數(shù)組b[]、第二行時(shí)分秒數(shù)組h[]和第一行年月日數(shù)組y[]的即時(shí)數(shù)據(jù)。

終止程序運(yùn)行,可按停止按鈕。

思考與練習(xí)

秒、分、時(shí)、日、月、周、年數(shù)據(jù)上限值各不相同,加一超限時(shí)如何判別修正?

實(shí)例91 帶校正時(shí)鐘1302(LCD1602顯示).rar (52.74 KB, 下載次數(shù): 19)












回復(fù)

使用道具 舉報(bào)

ID:73030 發(fā)表于 2016-5-4 22:40 來自觸屏版 | 顯示全部樓層
這個(gè)不錯(cuò),謝謝樓主分享。
回復(fù)

使用道具 舉報(bào)

ID:194936 發(fā)表于 2017-5-2 20:00 | 顯示全部樓層
謝謝樓主分享!
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人免费视频一区二区 | 日韩欧美综合在线视频 | 国产1区2区| 国产特黄一级 | 国产成人在线观看免费 | 999久久久| 国产高清精品一区二区三区 | 亚洲欧美精品 | 日本黄视频在线观看 | 黄色一级大片在线免费看产 | 国产伦精品一区二区三区高清 | 99久热在线精品视频观看 | 日本中文字幕在线视频 | 国产日韩精品一区二区 | 一级在线观看 | 亚洲精品中文字幕在线观看 | 中文字幕在线观看av | 日韩在线观看 | 日韩精品在线观看网站 | 免费看黄色小视频 | 国产在线小视频 | 超碰操| 国产精品视频一二三区 | 久久99精品久久久久久国产越南 | 日韩精品视频中文字幕 | 国产欧美精品一区二区 | 福利片在线看 | 男女在线免费观看 | 国产这里只有精品 | 欧美日韩国产一区二区 | 在线观看中文字幕一区二区 | 日韩av成人 | 三级视频久久 | 亚洲成人免费在线观看 | 91久久精品日日躁夜夜躁国产 | 久久一区二区三区四区 | 欧美日韩在线播放 | 国产一区二区 | 日日夜夜91| 欧美久久久网站 | 久热中文字幕 |