|
手頭有個(gè)DS1302時(shí)鐘芯片,正好學(xué)習(xí)一下。這個(gè)蕊片具有掉電時(shí)鐘繼續(xù)走時(shí)的特點(diǎn)(要有電池或超級(jí)電容)。還是KEIL編程序,PROTEUS做仿真,然后加實(shí)物,用的lcd240×64液晶屏,驅(qū)動(dòng)芯片是t6963c,做了一個(gè)簡(jiǎn)單的開(kāi)心萬(wàn)年歷.







關(guān)于此屏幕的Proteus仿真文件下載請(qǐng)到:http://www.zg4o1577.cn/bbs/dpj-42069-1.html
LCD240*64液晶的51單片機(jī)驅(qū)動(dòng)程序:
- #include<reg52.h> // 52頭文件
- #include<intrins.h> // 包含_onp_
- #define uchar unsigned char //宏定義uchar 為unsigned char
- #define uint unsigned int //宏定義uint 為unsiened int
- #define nop() _nop_() //宏定義延時(shí)
- #define wds1302_sec 0x80 //秒數(shù)據(jù)地址
- #define wds1302_min 0x82 //分?jǐn)?shù)據(jù)地址
- #define wds1302_hr 0x84 //時(shí)數(shù)據(jù)地址
- #define wds1302_date 0x86 //日數(shù)據(jù)地址
- #define wds1302_month 0x88 //月數(shù)據(jù)地址
- #define wds1302_day 0x8a //星期數(shù)據(jù)地址
- #define wds1302_year 0x8c //年數(shù)據(jù)地址
- #define ds1302_control 0x8e //控制數(shù)據(jù)地址
- #define ds1302_charger 0x90 //涓流
- #define ds1302_clkburst 0xbe
- #define rds1302_sec 0x81 //秒數(shù)據(jù)地址
- #define rds1302_min 0x83 //分?jǐn)?shù)據(jù)地址
- #define rds1302_hr 0x85 //時(shí)數(shù)據(jù)地址
- #define rds1302_date 0x87 //日數(shù)據(jù)地址
- #define rds1302_month 0x89 //月數(shù)據(jù)地址
- #define rds1302_day 0x8b //星期數(shù)據(jù)地址
- #define rds1302_year 0x8d //年數(shù)據(jù)地址
- sbit ce=P1^0; //片選
- sbit cd=P1^3; //命令或數(shù)據(jù)
- sbit rd=P1^4; //讀
- sbit wr=P1^5; //寫(xiě)
- sbit rst=P1^6; //復(fù)位
- sbit rest=P3^5; //1302復(fù)位
- sbit sclk=P3^6; //1302時(shí)鐘
- sbit io=P3^7; //1302輸入輸出口
- void read1302display();
- //sbit sta0=P2^0; //測(cè)執(zhí)行命令忙
- //sbit sta1=P2^1; //測(cè)讀寫(xiě)數(shù)據(jù)忙
- //sbit sta2=P2^3; //測(cè)連續(xù)寫(xiě)忙
- uchar time_buf1[8]={0x15,0x12,0x04,0x16,0x25,0x00};//年月日時(shí)分秒周
- uchar buf[8] ;//空年月日時(shí)分秒周
- //uchar buf1[8]; //存修改完成的時(shí)間數(shù)據(jù)
- uint text_size,graphic_size; //定義文本區(qū)和圖形區(qū)寬度
- uint text_startaddr,graphic_startaddr; //文本和圖形土起始位
- uint text_startaddr_l,text_startaddr_h; //定義文本區(qū)起始高位低位置
- uint graphic_startaddr_l,graphic_startaddr_h; //定義圖形區(qū)首地址
- uint *p; //圖片數(shù)據(jù)指針
- uint t,t1,key; //中斷計(jì)數(shù)變量
- uchar bcd[2]; //從DS1302讀出數(shù)據(jù)轉(zhuǎn)BCD碼
- uchar flag=0,next; //進(jìn)入調(diào)節(jié)標(biāo)志位
- uchar yx=0; //鍵盤(pán)返回有效的值
- uchar code cgtab[]={
- //--黑點(diǎn) --
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- //-- 年 --
- 0x08,0x08,0x1F,0x11,0x21,0x41,0x1F,0x11,
- 0x11,0x11,0xFF,0x01,0x01,0x01,0x01,0x01,
- 0x00,0x08,0xFC,0x00,0x00,0x10,0xF8,0x00,
- 0x00,0x04,0xFE,0x00,0x00,0x00,0x00,0x00,
- //-- 月 --
- 0x00,0x0F,0x08,0x08,0x08,0x0F,0x08,0x08,
- 0x08,0x0F,0x08,0x08,0x10,0x10,0x20,0x40,
- 0x10,0xF8,0x10,0x10,0x10,0xF0,0x10,0x10,
- 0x10,0xF0,0x10,0x10,0x10,0x10,0x50,0x20,
- //-- 日 --
- 0x00,0x1F,0x10,0x10,0x10,0x10,0x10,0x1F,
- 0x10,0x10,0x10,0x10,0x10,0x1F,0x10,0x00,
- 0x10,0xF8,0x10,0x10,0x10,0x10,0x10,0xF0,
- 0x10,0x10,0x10,0x10,0x10,0xF0,0x10,0x00,
- //-- 時(shí) --
- 0x00,0x04,0x7E,0x44,0x47,0x44,0x44,0x7C,
- 0x44,0x44,0x44,0x44,0x7C,0x44,0x00,0x00,
- 0x08,0x08,0x08,0x08,0xFE,0x08,0x08,0x88,
- 0x48,0x48,0x08,0x08,0x08,0x48,0x28,0x10,
- //-- 分 --
- 0x00,0x04,0x04,0x08,0x08,0x10,0x20,0x4F,
- 0x84,0x04,0x04,0x04,0x04,0x08,0x11,0x20,
- 0x80,0x80,0x40,0x40,0x20,0x10,0x08,0xEE,
- 0x24,0x20,0x20,0x20,0x20,0x20,0x40,0x80,
- //-- 秒 --
- 0x04,0x0E,0x78,0x08,0x08,0xFE,0x08,0x1D,
- 0x1A,0x28,0x28,0x48,0x88,0x08,0x08,0x0B,
- 0x20,0x20,0x20,0x20,0xA8,0xA6,0xA2,0x20,
- 0x24,0x24,0x28,0x10,0x20,0x40,0x80,0x00,
- //-- 周 --
- 0x00,0x3F,0x21,0x21,0x2F,0x21,0x21,0x3F,
- 0x20,0x27,0x24,0x24,0x24,0x47,0x84,0x00,
- 0x08,0xFC,0x08,0x48,0xE8,0x08,0x28,0xF8,
- 0x48,0xE8,0x48,0x48,0x48,0xC8,0x28,0x10,
- //-- 鬧 --
- 0x40,0x37,0x10,0x42,0x41,0x5F,0x41,0x41,
- 0x4F,0x49,0x49,0x49,0x49,0x41,0x41,0x40,
- 0x04,0xFE,0x04,0x04,0x24,0xF4,0x04,0x24,
- 0xF4,0x24,0x24,0x24,0x64,0x04,0x14,0x08,
- //-- 鐘 --
- 0x10,0x10,0x10,0x1C,0x21,0x21,0x7D,0x91,
- 0x11,0xFD,0x11,0x10,0x14,0x18,0x10,0x00,
- 0x20,0x20,0x20,0x24,0xFE,0x24,0x24,0x24,
- 0x24,0xFC,0x24,0x20,0x20,0x20,0x20,0x20,
- //-- 0 --
- 0x00,0x00,0x03,0x06,0x0C,0x0C,0x0C,0x0C,
- 0x0C,0x0C,0x0C,0x0C,0x06,0x03,0x00,0x00,
- 0x00,0x00,0xE0,0x30,0x18,0x18,0x18,0x18,
- 0x18,0x18,0x18,0x18,0x30,0xE0,0x00,0x00,
- //-- 1 --
- 0x00,0x00,0x00,0x03,0x01,0x01,0x01,0x01,
- 0x01,0x01,0x01,0x01,0x01,0x03,0x00,0x00,
- 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,
- 0x80,0x80,0x80,0x80,0x80,0xC0,0x00,0x00,
- //-- 2 --
- 0x00,0x00,0x03,0x06,0x0C,0x0C,0x00,0x00,
- 0x00,0x00,0x01,0x03,0x06,0x0F,0x00,0x00,
- 0x00,0x00,0xC0,0x60,0x30,0x30,0x30,0x30,
- 0x60,0xC0,0x80,0x10,0x10,0xF0,0x00,0x00,
- //-- 3 --
- 0x00,0x00,0x03,0x06,0x0C,0x00,0x00,0x01,
- 0x00,0x00,0x00,0x0C,0x06,0x03,0x00,0x00,
- 0x00,0x00,0xC0,0x60,0x30,0x30,0x60,0xC0,
- 0x60,0x30,0x30,0x30,0x60,0xC0,0x00,0x00,
- //-- 4 --
- 0x00,0x00,0x00,0x01,0x03,0x02,0x06,0x0C,
- 0x0C,0x18,0x1F,0x00,0x00,0x01,0x00,0x00,
- 0x00,0x40,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,
- 0xC0,0xC0,0xF0,0xC0,0xC0,0xE0,0x00,0x00,
- //-- 5 --
- 0x00,0x00,0x0F,0x0C,0x0C,0x0C,0x0F,0x0E,
- 0x00,0x00,0x00,0x0C,0x06,0x03,0x00,0x00,
- 0x00,0x00,0xF0,0x00,0x00,0x00,0xC0,0x60,
- 0x30,0x30,0x30,0x30,0x60,0xC0,0x00,0x00,
- //-- 6 --
- 0x00,0x00,0x03,0x06,0x0C,0x0C,0x0D,0x0E,
- 0x0C,0x0C,0x0C,0x0C,0x06,0x03,0x00,0x00,
- 0x00,0x00,0xC0,0x60,0x30,0x00,0xC0,0x60,
- 0x30,0x30,0x30,0x30,0x60,0xC0,0x00,0x00,
- //-- 7 --
- 0x00,0x00,0x0F,0x0F,0x08,0x00,0x00,0x00,
- 0x01,0x01,0x03,0x03,0x03,0x03,0x00,0x00,
- 0x00,0x00,0xF0,0xF0,0x30,0x60,0xC0,0xC0,
- 0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
- //-- 8 --
- 0x00,0x00,0x03,0x06,0x0C,0x0C,0x06,0x03,
- 0x06,0x0C,0x0C,0x0C,0x06,0x03,0x00,0x00,
- 0x00,0x00,0xC0,0x60,0x30,0x30,0x60,0xC0,
- 0x60,0x30,0x30,0x30,0x60,0xC0,0x00,0x00,
- //-- 9 --
- 0x00,0x00,0x03,0x06,0x0C,0x0C,0x0C,0x0C,
- 0x06,0x03,0x00,0x0C,0x06,0x03,0x00,0x00,
- 0x00,0x00,0xC0,0x60,0x30,0x30,0x30,0x30,
- 0x70,0xF0,0x30,0x30,0x60,0xC0,0x00,0x00,
- //-- : --
- 0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x0F,
- 0x0F,0x06,0x00,0x06,0x0F,0x0F,0x06,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- //-- 祝 --
- 0x20,0x13,0x12,0x02,0xFE,0x0A,0x12,0x3B,
- 0x56,0x90,0x10,0x11,0x11,0x12,0x14,0x18,
- 0x08,0xFC,0x08,0x08,0x08,0x08,0x08,0xF8,
- 0xA8,0xA0,0xA0,0x20,0x22,0x22,0x1E,0x00,
- //-- 您 --
- 0x09,0x09,0x13,0x12,0x34,0x59,0x91,0x12,
- 0x14,0x11,0x10,0x02,0x51,0x50,0x90,0x0F,
- 0x00,0x00,0xFC,0x04,0x48,0x40,0x50,0x4C,
- 0x44,0x40,0x80,0x00,0x84,0x92,0x12,0xF0,
- //-- 刻 --
- 0x08,0x04,0x04,0xFF,0x04,0x08,0x10,0x7F,
- 0x02,0x04,0x09,0x72,0x06,0x19,0xE0,0x00,
- 0x04,0x04,0x84,0xC4,0x04,0xA4,0xA4,0x24,
- 0x24,0xA4,0x24,0x24,0x04,0x84,0x94,0x08,
- //-- 都 --
- 0x10,0x12,0x7F,0x12,0x14,0xFF,0x08,0x12,
- 0x3F,0x62,0xA2,0x3E,0x22,0x22,0x3E,0x22,
- 0x00,0x7C,0x44,0x44,0x48,0x48,0x50,0x48,
- 0x44,0x42,0x42,0x62,0x54,0x48,0x40,0x40,
- //-- 開(kāi) --
- 0x00,0x7F,0x08,0x08,0x08,0x08,0x08,0xFF,
- 0x08,0x08,0x08,0x08,0x10,0x10,0x20,0x40,
- 0x08,0xFC,0x20,0x20,0x20,0x20,0x24,0xFE,
- 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
- //-- 心 --
- 0x02,0x01,0x00,0x00,0x08,0x08,0x28,0x28,
- 0x28,0x48,0x88,0x08,0x08,0x08,0x07,0x00,
- 0x00,0x00,0x80,0xC0,0x80,0x00,0x08,0x04,
- 0x02,0x02,0x02,0x00,0x10,0x10,0xF0,0x00,
- //-- 間 --
- 0x20,0x1B,0x08,0x40,0x4F,0x48,0x48,0x48,
- 0x4F,0x48,0x48,0x48,0x4F,0x48,0x40,0x40,
- 0x04,0xFE,0x04,0x24,0xF4,0x24,0x24,0x24,
- 0xE4,0x24,0x24,0x24,0xE4,0x24,0x14,0x08
- };
- /*********************延時(shí)函數(shù)************************************/
- void delay(uint a)
- {
- uchar b;
- for( ;a>0;a--)
- for(b=110;b>0;b--);
- }
- /***********************鍵盤(pán)掃描************************************/
- char key_scan()
- {
- uchar temp; //定義變量
- P0=0xef; //把高位一條拉低電平 11101111 給P0
- temp=P0; //把P0口電平讀回給臨時(shí)變量
- if((temp&0x0f)!=0x0f) //檢測(cè)有無(wú)按鍵按下
- {
- delay(10); //延時(shí)10毫秒
-
- temp=P0; //把P0口數(shù)值讀給變量
- P0=0xef; //重新給P0口賦值
- if((temp&0x0f)!=0x0f) //檢測(cè)有無(wú)按鍵按下
- {
- temp=P0; //把P0口數(shù)值讀給變量
- switch(temp) //分支選擇數(shù)值
- {
- case 0xee: //11101110 按鍵1按下
- key=1; //按鍵值為1
-
- break; //返回退出
- case 0xed: //11101101 按鍵4按下
- key=4; //按鍵值為4
- break; //返回退出
- case 0xeb: //11101011 按鍵7按下
- key=7; //按鍵值為7
- break; //返回退出
- case 0xe7: //11100111 按鍵*按下
- key='*'; //按鍵值為*
- break; //返回退出
- }
- while(temp!=0x0f) //等待按鍵抬起
- {
- temp=P0; // 把P0數(shù)值給變量
- temp=temp&0x0f; // 檢測(cè)按鍵是否抬起
- }
- yx=1; //鍵盤(pán)輸入值有效
- }
- }
- P0=0xdf; //把高位拉低一條 11011111 值給P0
- temp=P0; //把P0口電平讀回給臨時(shí)變量
- if((temp&0x0f)!=0x0f) //檢測(cè)有無(wú)按鍵按下
- {
- delay(10); //延時(shí)10毫秒
- P0=0xdf; //再把數(shù)值給P0
- temp=P0; //P0數(shù)值讀給變量
- if((temp&0x0f)!=0x0f) //再次檢測(cè)有無(wú)鍵按下
- {
- temp=P0; //把P0口數(shù)值賦給變量
- switch(temp) //分支選擇
- {
- case 0xde: //11011110 按鍵2按下
- key=2; //按鍵值為2
- break; //返回退出
- case 0xdd: //11011101 按鍵5按下
- key=5; //按鍵值為5
- break; //返回退出
- case 0xdb: //11011011 按鍵8按下
- key=8; //按鍵值為8
- break; //退出返回
- case 0xd7: //11010111 按鍵0按下
- key=0; //返回值為0
- break; //返回退出
- }
- while(temp!=0x0f) //等待按鍵抬起
- {
- temp=P0; // 把P0數(shù)值給變量
- temp=temp&0x0f; // 檢測(cè)按鍵是否抬起
- }
- yx=1; //鍵盤(pán)輸入值有效
- }
- }
- P0=0xbf; //把高位拉低一條,10111111 把值給P0口
- temp=P0; //把P0口電平讀回給臨時(shí)變量
- if((temp&0x0f)!=0x0f) //檢測(cè)有無(wú)按鍵按下
- {
- delay(10); //延時(shí)10毫秒
- P0=0xbf; //把值再給P0口
- temp=P0; //讀回P0口實(shí)際值
- if((temp&0x0f)!=0x0f) //再檢測(cè)有無(wú)按鍵按下
- {
- temp=P0; //重新讀回P0口值
- switch(temp) //分支選擇
- {
- case 0xbe: //10111110 按鍵3按下
- key=3; //按鍵值為3
- yx=1; //鍵盤(pán)輸入值有效
- break; //返回退出
- case 0xbd: //10111101 安鍵6按下
- key=6; //按鍵值為6
- yx=1; //鍵盤(pán)輸入值有效
- break; //返回退出
- case 0xbb: //10111011 按鍵9按下
- key=9; //按鍵值為9
- yx=1; //鍵盤(pán)輸入值有效
- break; //返回退出
- case 0xb7: //10110111 按鍵#按下
- // key='#'; //按鍵值為#
- flag=1;
- break; //返回退出
- }
- while(temp!=0x0f) //等待按鍵抬起
- {
- temp=P0; // 把P0數(shù)值給變量
- temp=temp&0x0f; // 檢測(cè)按鍵是否抬起
- }
-
- }
- }
-
- return key; //函數(shù)結(jié)束返回按鍵數(shù)值
- }
- /****************************ds1302寫(xiě)數(shù)據(jù)******************************/
- void write_date(uchar date)
- {
- uchar i,k; //定義變量
- k=date; //數(shù)據(jù)賦給變量
- rest=0; //置復(fù)位為0
- sclk=0;
- rest=1; //選中蕊片
- // k=k>>1;
- for(i=0;i<8;i++) //循環(huán)8位數(shù)據(jù)
- {
-
- if(k&0x01)io=1; //取出K低位給IO口
- sclk=0; //拉低時(shí)鐘
- sclk=1; //拉高時(shí)鐘數(shù)據(jù)給DS1302
-
- k=k>>1; //變量右移一位
- }
- rest=0;
- sclk=0;
- }
-
- /**************************ds1302地址寫(xiě)入數(shù)據(jù)****************************/
- void write_ad_dat(uint addr,uchar date)
- {
- uchar i; // 定義變量
- rest=0; // 復(fù)位片選
- sclk=0; // 拉低時(shí)鐘
- rest=1; // 置位片選
- for(i=0;i<8;i++) // 8次循環(huán)
- {
- io=addr&0x01; // 把地址中低位給IO口
- sclk=1; // 拉高時(shí)鐘使數(shù)據(jù)有效
- sclk=0; // 拉低時(shí)鐘給下個(gè)高電平做準(zhǔn)備
- addr>>=1; // 地址數(shù)據(jù)右移一位
- }
- for(i=0;i<8;i++) // 8次循環(huán)
- {
- io=date&0x01; // 把數(shù)據(jù)低位給IO口
- sclk=1; // 拉高時(shí)鐘,使數(shù)據(jù)有效
- sclk=0; // 拉低時(shí)鐘
- date>>=1; // 數(shù)據(jù)右移一位
- }
- rest=0; // 復(fù)位片選
- }
- /***************************讀1302數(shù)據(jù)***********************************/
- uchar read_date()
- {
- uchar i,k; //定義變量
- rest=1; //片選為置位
- sclk=1; //拉高1302時(shí)鐘
- for(i=0;i<8;i++) //8位數(shù)據(jù)循環(huán)
- {
-
- if(io) //讀IO口狀態(tài)給變量K
- {
- k=k|0x80; //如果IO口為1,變量賦值為1
- }
- sclk=1; //拉高時(shí)鐘
- delay(1);
- sclk=0; //拉低時(shí)鐘寫(xiě)入數(shù)據(jù)
- k=k>>1; //變量數(shù)據(jù)右移一位
- }
- rest=0; //關(guān)片選
- return k; //8位數(shù)據(jù)結(jié)束返回變量數(shù)值
- }
- /********************************讀地址數(shù)據(jù)********************************/
- uchar read_add_dat(uint addr)
- {
- uchar i,j; //定義變量
- rest=0; //復(fù)位片選
- sclk=0; // 拉低時(shí)鐘電平
- rest=1; // 置位片選
- for(i=0;i<8;i++) // 8位循環(huán)
- {
- sclk=0; // 拉低時(shí)鐘
- io=addr&0x01; // 地址數(shù)據(jù)低位給IO口
- sclk=1; // 拉高時(shí)鐘,使數(shù)據(jù)有效
- addr>>=1; // 地址數(shù)據(jù)右移一位
- }
- for(i=0;i<8;i++) // 8次循環(huán)
- {
- j>>=1; // 變量右移一位
- sclk=0; // 拉低時(shí)鐘
- if(io) j|=0x80; // 如果IO口讀出高電平,給變量高位置1
- sclk=1; // 拉高電平給下次讀數(shù)據(jù)做準(zhǔn)備
- }
- rest=0; // 復(fù)位片選
- return j; // 返回讀出的變量值
- }
- /*******************寫(xiě)命令*****************************************/
- void wrcomm(uchar comm)
- {
- ce=0; //選中芯 片
- rd=1; //讀高電平無(wú)效
- cd=1; //操作命令
- wr=0; //寫(xiě)使能
- P2=comm; //把命令送給總線
- nop(); //延時(shí)
- wr=1; //拉高寫(xiě)
- }
- /*******************寫(xiě)數(shù)據(jù)******************************************/
- void wrdate(uchar date)
- {
- ce=0; //使能片選
- rd=1; //讀無(wú)效
- cd=0; //操作命令
- wr=0; //使能寫(xiě)
- P2=date; //數(shù)據(jù)送給總線
- nop(); //延時(shí)
- wr=1; //拉高寫(xiě)
- }
- /*******************測(cè)讀寫(xiě)命令忙***********************************/
- void check_sta01()
- {
- uchar a; //定義變量
- ce=0; //使能片選
- wr=1; //禁寫(xiě)
- cd=1; //命令有效
- while(1) //循環(huán)
- {
- P2=0xff; //P2口為已知的高電平
- rd=0; //使能讀
- a=P2; //讀總線狀態(tài)
- nop(); //延時(shí)
- rd=1; //拉高讀
- if((a&0x03)==0x03) //測(cè)試等于0000 0011
- return; //測(cè)試如果讀寫(xiě)數(shù)據(jù)為不忙跳出循環(huán)
- }
- }
- /*******************測(cè)試連續(xù)寫(xiě)忙************************************/
- void check_sta03()
- {
- uchar a; //定義變量
- ce=0; //全能片選
- wr=1; //禁寫(xiě)
- cd=1; //命令有效
- while(1)
- {
- P2=0xff; //使P2為已知的高電平
- rd=0; //使能讀
- a=P2; //讀總線狀態(tài)
- nop(); //延時(shí)
- rd=1; //拉高讀
- if((a&0x08)==0x08) //測(cè)試等于00001000
- return; //測(cè)試如果連續(xù)讀為不忙跳出循環(huán)
- }
- }
- /************************寫(xiě)無(wú)參數(shù)命令************************************/
- void no_parameter(uchar comm)
- {
- check_sta01(); //測(cè)忙
- wrcomm(comm); //寫(xiě)命令
- }
- /************************寫(xiě)雙字節(jié)參數(shù)命令*********************************/
- void double_parameter(uint a,uint b,uchar c)
- {
- check_sta01(); //測(cè)忙
- wrdate(a); //寫(xiě)第一字節(jié)參數(shù)
- check_sta01(); //測(cè)忙
- wrdate(b); //寫(xiě)第二節(jié)節(jié)參數(shù)
- check_sta01(); //測(cè)忙
- wrcomm(c); //寫(xiě)命令
- }
- /************************清屏全亮或全滅***********************************/
- void all_display(uchar state,uchar vlue)
- {
- uint i,k; //定義變量
- if(state==0) //判斷state是否為0為文本區(qū)
- {
- double_parameter(text_startaddr_l,text_startaddr_h,0x24); //文本區(qū)低位和高位起始地址
- no_parameter(0xb0); //連續(xù)寫(xiě)命令
- for(i=1;i<9;i++)
- {
- for(k=0;k<30;k++) //每行為30字符(240*64 )
- {
- check_sta03(); //測(cè)忙
- wrdate(vlue);
- } //寫(xiě)入vlue值,0或1
- }
- check_sta03(); //測(cè)忙
- wrcomm(0xb2); //關(guān)連續(xù)寫(xiě)
- }
- if(state==1) //判斷state是否為1
- {
- double_parameter(graphic_startaddr_l,graphic_startaddr_h,0x24); //圖開(kāi)形區(qū)起始低,高位
- no_parameter(0xb0); //連續(xù)寫(xiě)命令
- for(i=30*64;i>0;i--) //循環(huán)
- {
- check_sta03(); //測(cè)連續(xù)寫(xiě)忙
- wrdate(vlue); //寫(xiě)入vlue值
- }
- check_sta03(); //測(cè)忙
- wrcomm(0xb2); // 關(guān)閉連續(xù)寫(xiě)
- }
- }
- /****************************文本方式下寫(xiě)8*8字符******************************************/
- void text_ascii(uchar *addr,uchar hang,uchar lie)
- {
- uchar temp; //定義變量
- uchar low; //定義變量
- uchar high; //定義變量
- temp=30*(hang-1)+(lie-1); //每行30字符乘行加列,計(jì)算寫(xiě)入起始位置
- low=temp&0x00ff; //把結(jié)果低位賦給低變量
- high=(temp>>8)&0x00ff; //把結(jié)果高位給高變量
- double_parameter(low,high,0x24); //寫(xiě)入文本起始位置
- no_parameter(0xb0); //連續(xù)寫(xiě)命令
- check_sta03(); //測(cè)忙
- wrdate(*addr); //寫(xiě)入字符地址指針
- check_sta03(); //測(cè)連續(xù)寫(xiě)忙
- wrcomm(0xb2); //關(guān)閉連續(xù)寫(xiě)
- }
- /**************************graphic下顯示圖片*********************************************/
- void display(uchar *p,uchar hang,uchar lie)
- {
- uchar m,n; //定義變量
- uint temp; //定義變量
- temp=(hang-1)*30+lie; //計(jì)算圖形寫(xiě)入地址
- graphic_startaddr_l=temp&0x00ff; //取出低位數(shù)據(jù)
- graphic_startaddr_h=(temp>>8)&0x00ff;
- double_parameter(graphic_startaddr_l,graphic_startaddr_h,0x24);//寫(xiě)入圖形首地址
- no_parameter(0xb0); //連續(xù)寫(xiě)命令
- for(m=240;m>0;m--) //循環(huán)行數(shù)
- {
- for(n=30;n<0;n--) //每字節(jié)8位,列數(shù)/8
- {
- check_sta03(); //測(cè)忙
- wrdate(* p++); //寫(xiě)入圖形指針,然后加1地址
- }
- }
- check_sta03(); //測(cè)忙
- wrcomm(0xb2); //關(guān)閉連續(xù)寫(xiě)
- }
- /************************text下顯示16*16漢字**********************************************
- ***************text模式下是8*8字符,每個(gè)漢字要4個(gè)字符組成*********************************/
- void hz_display(uchar addr,uchar hang,uchar lie)
- {
- uint temp; //定義變量
- uchar low,high; //定義變量
- temp=30*2*(hang-1)+(lie-1)*2; //把字的坐標(biāo)地址賦給變量
- low=temp&0x00ff; //取出坐標(biāo)低位數(shù)值
- high=(temp>>8)&0x00ff; //右移8位取出坐標(biāo)高位數(shù)值
- double_parameter(low,high,0x24); //寫(xiě)入漢字坐標(biāo)
- no_parameter(0xb0); //開(kāi)連續(xù)寫(xiě)
- check_sta03(); //測(cè)忙
- wrdate(addr); //寫(xiě)入漢字左上4分之1
- check_sta03(); //測(cè)試忙
- wrdate(addr+2); //寫(xiě)入漢字右上4分之1
- check_sta03(); //測(cè)忙
- wrcomm(0xb2); //關(guān)閉連續(xù)寫(xiě)
- delay(1);
- temp=30*2*(hang-1)+30+(lie-1)*2; //重新計(jì)算漢字坐標(biāo)也就是寫(xiě)下部份,地址加一行(8*8)
- low=temp&0x00ff; //取出低位數(shù)值給變量
- high=(temp>>8)&0x00ff; //右移8位取出高位給變量
- double_parameter(low,high,0x24); //寫(xiě)入新起始地址(寫(xiě)漢字下部份)
- no_parameter(0xb0); //連續(xù)寫(xiě)命令
- check_sta03(); //測(cè)忙
- wrdate(addr+1); //寫(xiě)入漢字左下4分之1
- check_sta03(); //測(cè)忙
- wrdate(addr+3); //寫(xiě)入漢字右下4分之1
- check_sta03(); //測(cè)忙
- wrcomm(0xb2); //關(guān)閉連續(xù)寫(xiě)
- }
- /******************************自定義漢字寫(xiě)入CGRAM***************************************/
- void cgram()
- {
- uint m=0; //定義變量
- double_parameter(0x07,0x00,0x22); //設(shè)定最高的1K為CGRAM 寄存器偏移設(shè)定
- double_parameter(0x00,0x3c,0x24); //
- no_parameter(0xb0); //開(kāi)連續(xù)寫(xiě)
- for(m=0;m<896+32;m++) //循環(huán)
- {
- check_sta03(); //測(cè)忙
- wrdate(cgtab[m]); //寫(xiě)入數(shù)據(jù)
- }
- check_sta03(); //測(cè)忙
- wrcomm(0xb2); //關(guān)閉連續(xù)寫(xiě)
- }
- /*****************************定時(shí)器初始化*************************************************/
- void time()
- {
- TMOD=0x01; //開(kāi)定時(shí)器0
- TH0=(65536-5000)/256; //賦值高
- TL0=(65536-5000)%256; //賦值低
- EA=1; //開(kāi)總中斷
- ET0=1; //開(kāi)定時(shí)器0中斷
- TR0=1; //啟動(dòng)定時(shí)器0
- }
- /****************************中斷函數(shù)*********************************/
- void t0time()interrupt 1
- {
- TH0=(65536-5000)/256; //重新賦值高位
- TL0=(65536-5000)%256; //重新賦值低位
- t++; //變量加
- if(t==1000) //變量計(jì)數(shù)到
- {
- t=0; //t重0開(kāi)始
- t1=!t1; //t1取反給t1
- }
- }
- /**************************顯示漢字基本畫(huà)面*************************************/
- void display1()
- {
- hz_display(0x80+(26-1)*4,1,6); //開(kāi)
- hz_display(0x80+(27-1)*4,1,7); //心
- hz_display(0x80+(5-1)*4,1,8); //時(shí)
- hz_display(0x80+(10-1)*4,1,9); //鐘
- hz_display(0x80+(13-1)*4,2,3); //2
- hz_display(0x80+(11-1)*4,2,4); //0
- // hz_display(0x80+(12-1)*4,2,5); //1
- // hz_display(0x80+(16-1)*4,2,6); //5
- hz_display(0x80+(2-1)*4,2,7); //年
- // hz_display(0x80+(12-1)*4,2,8); //1
- // hz_display(0x80+(13-1)*4,2,9); //2
- hz_display(0x80+(3-1)*4,2,10); //月
- // hz_display(0x80+(15-1)*4,2,12); //4
- hz_display(0x80+(4-1)*4,2,13); //日
- hz_display(0x80+(5-1)*4,3,3); //時(shí)
- hz_display(0x80+(28-1)*4,3,4); //間
- // hz_display(0x80+(12-1)*4,3,6); //1
- // hz_display(0x80+(17-1)*4,3,7); //6
- hz_display(0x80+(21-1)*4,3,8); //:
- // hz_display(0x80+(13-1)*4,3,9); //2
- // hz_display(0x80+(16-1)*4,3,10); //5
- hz_display(0x80+(6-1)*4,3,11); //分
- hz_display(0x80+(7-1)*4,3,14); //秒
- hz_display(0x80+(22-1)*4,4,2); //祝
- hz_display(0x80+(23-1)*4,4,3); //您
- hz_display(0x80+(5-1)*4,4,4); //時(shí)
- hz_display(0x80+(5-1)*4,4,5); //時(shí)
- hz_display(0x80+(24-1)*4,4,6); //刻
- hz_display(0x80+(24-1)*4,4,7); //刻
- hz_display(0x80+(6-1)*4,4,8); //分
- hz_display(0x80+(6-1)*4,4,9); //分
- hz_display(0x80+(7-1)*4,4,10); //秒
- hz_display(0x80+(7-1)*4,4,11); //秒
- hz_display(0x80+(25-1)*4,4,12); //都
- hz_display(0x80+(26-1)*4,4,13); //開(kāi)
- hz_display(0x80+(27-1)*4,4,14); //心
- }
- /**************************INIT************************************************/
- void init()
- {
-
- time();
- rst=0; //拉低液晶屏復(fù)位腳
- nop(); //延時(shí)
- nop(); //延時(shí)
- nop(); //延時(shí)
- rst=1; //拉高電平置位
- text_size=graphic_size=30*64; //文本和圖形區(qū)寬度
- text_startaddr=0x0000; //文本區(qū)首地址
- text_startaddr_l=text_startaddr; //文本首地址低位
- text_startaddr_h=text_startaddr>>8; //文本首地址高位
- graphic_startaddr=text_startaddr+text_size; //圖形區(qū)首地址
- graphic_startaddr_l=graphic_startaddr; //圖形區(qū)首地址低位
- graphic_startaddr_h=graphic_startaddr>>8; //圖形區(qū)首地址高位
- double_parameter(text_startaddr_l,text_startaddr_h,0x40); //寫(xiě)入文本首地址
- double_parameter(30,0x00,0x41); //寫(xiě)入文本區(qū)長(zhǎng)度(一行幾個(gè)字節(jié))
- double_parameter(graphic_startaddr_l,graphic_startaddr_h,0x42); //寫(xiě)入圖形區(qū)首地址
- double_parameter(30,0x00,0x43); //寫(xiě)入圖形區(qū)長(zhǎng)度(一行幾個(gè)字節(jié))
-
- no_parameter(0x80); //文本 或 圖形
- no_parameter(0x98); //圖形開(kāi)文本關(guān)
- all_display(1,0xff); //表屏全亮
- delay(5000); //延時(shí)
- no_parameter(0xa7); //顯示8行光標(biāo)
- no_parameter(0x94); //文本開(kāi)圖形關(guān)
- cgram(); //把字模寫(xiě)入顯示屏自定義的CGRAM里
- all_display(0,0x00); //把文本區(qū)全顯示白
-
- }
- /***********123123************寫(xiě)入DS1302年,月,日,時(shí)分?jǐn)?shù)據(jù)****************************/
- void write1302()
- {
-
- write_ad_dat(0x8e,0x00); //關(guān)閉寫(xiě)保護(hù)
- write_ad_dat(wds1302_sec,0x80); //暫停
- write_ad_dat(wds1302_year,buf[0]); //寫(xiě)年
- write_ad_dat(wds1302_month,buf[1]); //寫(xiě)月
- write_ad_dat(wds1302_date,buf[2]); //寫(xiě)天
- write_ad_dat(wds1302_hr,buf[3]); //寫(xiě)讀小時(shí)
- write_ad_dat(wds1302_min,buf[4]); //寫(xiě)分
- write_ad_dat(wds1302_sec,buf[5]); //寫(xiě)秒
- write_ad_dat(ds1302_control,0x80); //開(kāi)寫(xiě)保護(hù)
- }
- /****************************時(shí)間調(diào)節(jié)程序***********************************************/
- void time_tz()
- {
- uint z; // 定義變量
- uchar s,g; // 變量十位,個(gè)位,高位,低位
- while(flag) //如果#按下表示要調(diào)節(jié)
-
- {
- if(next==0) //調(diào)節(jié)年十位標(biāo)志
- {
- write_ad_dat(0x8e,0x00); //關(guān)閉寫(xiě)保護(hù)
- write_ad_dat(wds1302_sec,0x80); //暫停1302
- buf[0]&=0x0f; //清空年十位,變成0000
- buf[0]|=key_scan()<<4; //鍵盤(pán)返回值左移4位變高位或上數(shù)組高位
- if(yx)next=1;
- write_ad_dat(wds1302_year,buf[0]); //寫(xiě)年數(shù)據(jù)
- read1302display(); //讀出1302中數(shù)據(jù)
- hz_display(0x80+0*4,2,5); //年十位黑點(diǎn)
- delay(200); //延時(shí)
- hz_display(0x80+(11-1+(buf[0]>>4))*4,2,5); //年十位
- yx=0; //標(biāo)志位有效(就是有按鍵按下)
- } //清除按鍵有效標(biāo)志位
- if(next==1) //調(diào)節(jié)年個(gè)位標(biāo)志
- {
- buf[0]&=0xf0; //清空年個(gè)位,變成0000
- buf[0]|=key_scan(); //鍵盤(pán)返回值或上數(shù)組
- if(yx)next=2; //如果如果按鍵標(biāo)志位為有效,使調(diào)標(biāo)志到下一調(diào)節(jié)位
- write_ad_dat(wds1302_year,buf[0]); //寫(xiě)年數(shù)據(jù)
- read1302display(); //讀1302中數(shù)據(jù)供顯示
- hz_display(0x80+0*4,2,6); //年個(gè)位黑點(diǎn)
- delay(200); //延時(shí)
- hz_display(0x80+(11-1+(buf[0]))*4,2,6); //個(gè)十位
- yx=0; //清除鍵盤(pán)有效標(biāo)志位
- }
- if(next==2) //月十位調(diào)節(jié)標(biāo)志
- {
- buf[1]&=0x0f; //清空月十位,變成0000
- if((1>=key_scan())&yx) //測(cè)試鍵盤(pán)輸入數(shù)小于等于1和輸入有效都為1
- {
- buf[1]|=key<<4; //鍵盤(pán)返回值左移4位變高位或上數(shù)組高位
- next=3; //使調(diào)節(jié)標(biāo)志位到月個(gè)位有效
- }
- write_ad_dat(wds1302_month,buf[1]); //寫(xiě)月
- read1302display(); //讀出1302中數(shù)據(jù)供顯示
- hz_display(0x80+0*4,2,8); //月十位黑點(diǎn)
- delay(200); //延時(shí)
- hz_display(0x80+(11-1+(buf[1]>>4))*4,2,8); //月十位
- yx=0; //清除鍵盤(pán)輸入數(shù)值有效位
- }
- if(next==3) //月個(gè)位調(diào)節(jié)標(biāo)志
- {
- buf[1]&=0xf0; //清空月個(gè)位,變成0000
- if((2>=key_scan())&yx) //測(cè)試輸入值小于等于2和輸入有效
- {
- buf[1]|=key; //鍵盤(pán)返回值或上數(shù)組(給數(shù)組賦值)
- next=4; //使調(diào)節(jié)標(biāo)志位到小時(shí)調(diào)節(jié)
- }
- write_ad_dat(wds1302_month,buf[1]); //寫(xiě)月
- read1302display(); //讀1302數(shù)據(jù)
- hz_display(0x80+0*4,2,9); //月個(gè)位黑點(diǎn)
- delay(200); //延時(shí)
- hz_display(0x80+(11-1+(buf[1]&0x0f))*4,2,9); //月個(gè)位
- yx=0; //清除鍵盤(pán)輸入有效位
- }
-
- if(next==4) //日十位調(diào)節(jié)標(biāo)志
- {
- buf[2]&=0x0f; //清空日十位,變成0000
- if((3>=key_scan())&yx) //如果輸入值小于等于3和鍵盤(pán)輸入地為1
- {
- buf[2]|=key<<4; //鍵盤(pán)返回值左移4位變高位或上數(shù)組高位
- next=5; //使調(diào)節(jié)標(biāo)志位到日個(gè)位
- }
- write_ad_dat(wds1302_date,buf[2]); //寫(xiě)日數(shù)據(jù)
- read1302display(); //讀出1302數(shù)據(jù)
- hz_display(0x80+0*4,2,11); //日十位黑點(diǎn)
- delay(200); //延時(shí)
- hz_display(0x80+(11-1+(buf[2]>>4))*4,2,11); //日十位
- yx=0; //清除鍵盤(pán)輸入有效
- }
-
- if(next==5) //日個(gè)位調(diào)節(jié)標(biāo)志
- {
- buf[2]&=0xf0; //清空日個(gè)位,變成0000
- if((9>=key_scan())&yx) //如果輸入值小于等于9和輸入有效都為1
- {
- buf[2]|=key; //鍵盤(pán)返回值或上數(shù)組
- next=6; //使調(diào)節(jié)標(biāo)志為時(shí)十位有效
- if(buf[2]>0x31)next=4; //如果輸入的日數(shù)據(jù)大于31天,回到日十位重新輸入
- }
- write_ad_dat(wds1302_date,buf[2]); //寫(xiě)日數(shù)據(jù)
- read1302display(); //讀出1302中數(shù)據(jù)
- hz_display(0x80+0*4,2,12); //日個(gè)位黑點(diǎn)
- delay(200); //延時(shí)
- hz_display(0x80+(11-1+(buf[2]&0x0f))*4,2,12); //日個(gè)位
- yx=0; //清除鍵盤(pán)輸入有效標(biāo)志
- }
- if(next==6) //小時(shí)調(diào)節(jié)標(biāo)志
- {
- buf[3]&=0x0f; //清空時(shí)十位,變成0000
- if((2>=key_scan())&yx) //如果輸入的值小于等于2,和鍵盤(pán)輸入有效
- {
- buf[3]|=key<<4; //鍵盤(pán)返回值左移4位變高位或上數(shù)組高位
- next=7; //使調(diào)節(jié)標(biāo)志位以小時(shí)的個(gè)位
- }
- write_ad_dat(wds1302_hr,buf[3]); //寫(xiě)小時(shí)數(shù)據(jù)
- read1302display(); //讀1302數(shù)據(jù)
- hz_display(0x80+0*4,3,6); //時(shí)十位黑點(diǎn)
- delay(200); //延時(shí)
- hz_display(0x80+(11-1+(buf[3]>>4))*4,3,6); //時(shí)十位
- yx=0;
- }
-
- if(next==7) //小時(shí)個(gè)位調(diào)節(jié)標(biāo)志
- {
- buf[3]&=0xf0; //清空時(shí)個(gè)位,變成0000
- if((9>=key_scan())&yx) //輸入值和輸入有效都為1
- {
- buf[3]|=key; //鍵盤(pán)返回值或上數(shù)組
- next=8; //調(diào)節(jié)標(biāo)志位到分十位
- if(buf[3]>=0x24)next=6; //如果輸入的數(shù)值大于24,返回時(shí)十位重新輸入
- }
- write_ad_dat(wds1302_hr,buf[3]); //寫(xiě)時(shí)數(shù)據(jù)
- read1302display(); //讀1302中數(shù)據(jù)
- hz_display(0x80+0*4,3,7); //時(shí)個(gè)位黑點(diǎn)
- delay(200); //延時(shí)
- hz_display(0x80+(11-1+(buf[3]&0x0f))*4,3,7); //時(shí)個(gè)位
- yx=0; //清除鍵盤(pán)輸入有效標(biāo)志位
- }
- if(next==8) //分十位調(diào)節(jié)標(biāo)志
- {
- buf[4]&=0x0f; //清空分十位,變成0000
- if((5>=key_scan())&yx) //輸入值小于等于5和鍵盤(pán)輸入都有效
- {
- buf[4]|=key<<4; //鍵盤(pán)返回值左移4位變高位或上數(shù)組高位
- next=9; //調(diào)節(jié)標(biāo)志位到分個(gè)位
- }
- write_ad_dat(wds1302_min,buf[4]); //寫(xiě)分?jǐn)?shù)據(jù)
- read1302display(); //讀1302中數(shù)據(jù)
- hz_display(0x80+0*4,3,9); //分十位黑點(diǎn)
- delay(200); //延時(shí)
- hz_display(0x80+(11-1+(buf[4]>>4))*4,3,9); //分十位
- yx=0; //清除鍵盤(pán)輸入有效標(biāo)志位
- }
- if(next==9) //分個(gè)位調(diào)節(jié)標(biāo)志
- {
- buf[4]&=0xf0; //清空分個(gè)位,變成0000
- if((9>=key_scan())&yx) //輸入值小于等于9和輸入標(biāo)志都有效
- {
- buf[4]|=key; //鍵盤(pán)返回值或上數(shù)組
- next=10; //調(diào)節(jié)標(biāo)志位到秒十位
- }
- write_ad_dat(wds1302_min,buf[4]); //寫(xiě)分?jǐn)?shù)據(jù)
- read1302display(); //讀1302中數(shù)據(jù)
- hz_display(0x80+0*4,3,10); //分個(gè)位黑點(diǎn)
- delay(200); //延時(shí)
- hz_display(0x80+(11-1+(buf[4]&0x0f))*4,3,10); //分個(gè)位
- yx=0; //清除鍵盤(pán)輸入有效標(biāo)志位
- }
- if(next==10) //秒十位調(diào)節(jié)標(biāo)志
- {
- buf[5]&=0x0f; //清空秒十位,變成0000
- if((5>=key_scan())&yx) //輸入值小于等于5和輸入有效都為1
- {
- buf[5]|=key<<4; //鍵盤(pán)返回值左移4位變高位或上數(shù)組高位
- next=11; //調(diào)節(jié)標(biāo)志位到秒個(gè)位
- }
- write_ad_dat(wds1302_sec,buf[5]); //寫(xiě)秒數(shù)據(jù)
- read1302display(); //讀1302中數(shù)據(jù)
- hz_display(0x80+0*4,3,12); //秒十位黑點(diǎn)
- delay(200); //延時(shí)
- hz_display(0x80+(11-1+(buf[5]>>4))*4,3,12); //秒十位
- yx=0; //清除鍵盤(pán)輸入有效標(biāo)志位
- }
- if(next==11) //秒個(gè)位調(diào)節(jié)標(biāo)志
- {
- buf[5]&=0xf0; //清空秒個(gè)位,變成0000
- if((9>=key_scan())&yx) //輸入值小于等于9和輸入有效都為1
- {
- buf[5]|=key; //鍵盤(pán)返回值或上數(shù)組
- next=0; //使調(diào)節(jié)標(biāo)志位到年十位,為下一次調(diào)節(jié)做準(zhǔn)備
- flag=0; //清除調(diào)節(jié)模式,回到正常顯示狀態(tài)
- write_ad_dat(ds1302_control,0x80); //開(kāi)1302寫(xiě)保護(hù)
- }
- write_ad_dat(wds1302_sec,buf[5]); //寫(xiě)分?jǐn)?shù)據(jù)
- read1302display(); //讀出1302中數(shù)據(jù)
- hz_display(0x80+0*4,3,13); //分個(gè)位黑點(diǎn)
- delay(200); //延時(shí)
- hz_display(0x80+(11-1+(buf[5]&0x0f))*4,3,13); //分個(gè)位
- yx=0; //清除鍵盤(pán)輸入有效標(biāo)志
- }
- }
- }
- /****************123123****讀出1302數(shù)據(jù)并顯示**************************************/
- void read1302display()
- { uchar h; //定義變量
- write_ad_dat(0x8e,0x00); //開(kāi)1302寫(xiě)保護(hù)
- buf[0]=read_add_dat(rds1302_year); //讀年
- buf[1]=read_add_dat(rds1302_month); //讀月
- buf[2]=read_add_dat(rds1302_date); //讀日
- buf[3]=read_add_dat(rds1302_hr); //讀小時(shí)
- buf[4]=read_add_dat(rds1302_min); //讀分鐘
- buf[5]=read_add_dat(rds1302_sec); //讀秒
- hz_display(0x80+(11-1+(buf[0]>>4))*4,2,5); //年十位
- hz_display(0x80+(11-1+(buf[0]&0x0f))*4,2,6); //年個(gè)位
- hz_display(0x80+(11-1+(buf[1]>>4))*4,2,8); //月十位
- hz_display(0x80+(11-1+(buf[1]&0x0f))*4,2,9); //月個(gè)位
- hz_display(0x80+(11-1+(buf[2]>>4))*4,2,11); //日十位
- hz_display(0x80+(11-1+(buf[2]&0x0f))*4,2,12); //日個(gè)位
- hz_display(0x80+(11-1+(buf[3]>>4))*4,3,6); //小時(shí)十位
- hz_display(0x80+(11-1+(buf[3]&0x0f))*4,3,7); //小時(shí)個(gè)位
- hz_display(0x80+(21-1)*4,3,8); //:
- hz_display(0x80+(11-1+(buf[4]>>4))*4,3,9); //分十位
- hz_display(0x80+(11-1+(buf[4]&0x0f))*4,3,10); //分個(gè)位
- hz_display(0x80+(11-1+(buf[5]>>4))*4,3,12); //秒十位
- hz_display(0x80+(11-1+(buf[5]&0x0f))*4,3,13); //秒個(gè)位
- }
- /***************************主程序*******************************************************/
- void main()
- {
- uchar i; //定義變量
- init(); //初屏顯示
- display1(); //顯示漢字畫(huà)面
- for(i=0;i<8;i++) //把原始數(shù)據(jù)給顯示數(shù)組
- {
- buf[i]=time_buf1[i]; //常量數(shù)組數(shù)據(jù)賦給變量數(shù)組
- }
- write1302(); //寫(xiě)入年,月日時(shí),時(shí)間數(shù)據(jù)
- while(1)
- {
- key_scan(); // 鍵盤(pán)掃描
- time_tz(); // 時(shí)間調(diào)整
- read1302display(); //讀1302數(shù)據(jù)并顯示
- }
- }
復(fù)制代碼
|
|