|
本帖最后由 陳潤(rùn)源home 于 2019-5-20 19:42 編輯
說(shuō)明:開(kāi)機(jī)顯示當(dāng)前計(jì)算機(jī)時(shí)間(若下載到開(kāi)發(fā)板上請(qǐng)手動(dòng)調(diào)節(jié)時(shí)間)
第1次按下MODE鍵,如果此時(shí)按下 S+ /S-,則秒的值 +1/ -1,按下yes保存設(shè)定值
第2次按下MODE鍵,如果此時(shí)按下 S+ /S-,則分的值 +1/ -1,按下yes保存設(shè)定值
第3次按下MODE鍵,如果此時(shí)按下 S+ /S-,則時(shí)的值 +1/ -1,按下yes保存設(shè)定值
第4次按下MODE鍵,如果此時(shí)按下 S+ /S-,則天的值 +1/ -1,按下yes保存設(shè)定值
第5次按下MODE鍵,如果此時(shí)按下 S+ /S-,則月的值 +1/ -1,按下yes保存設(shè)定值
第6次按下MODE鍵,如果此時(shí)按下 S+ /S-,則周的值 +1/ -1,按下yes保存設(shè)定值
第7次按下MODE鍵,如果此時(shí)按下 S+ /S-,則年的值 +1/ -1,按下yes保存設(shè)定值
第8次按下MODE鍵,開(kāi)始正常計(jì)時(shí)。
本程序已通過(guò)“清翔電子”開(kāi)發(fā)板完美驗(yàn)證,請(qǐng)壇友放心下載。用其他開(kāi)發(fā)板的童鞋請(qǐng)自行修改端口。
附件還內(nèi)附DS1302資料+標(biāo)準(zhǔn)程序,需要的小伙伴請(qǐng)下載
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機(jī)源程序如下:
- //說(shuō)明:開(kāi)機(jī)顯示當(dāng)前PC時(shí)間
- // 第1次按下MODE鍵,如果此時(shí)按下 S+ /S-,則秒的值 +1/ -1,按下yes保存設(shè)定值
- // 第2次按下MODE鍵,如果此時(shí)按下 S+ /S-,則分的值 +1/ -1,按下yes保存設(shè)定值
- // 第3次按下MODE鍵,如果此時(shí)按下 S+ /S-,則時(shí)的值 +1/ -1,按下yes保存設(shè)定值
- // 第4次按下MODE鍵,如果此時(shí)按下 S+ /S-,則天的值 +1/ -1,按下yes保存設(shè)定值
- // 第5次按下MODE鍵,如果此時(shí)按下 S+ /S-,則月的值 +1/ -1,按下yes保存設(shè)定值
- // 第6次按下MODE鍵,如果此時(shí)按下 S+ /S-,則周的值 +1/ -1,按下yes保存設(shè)定值
- // 第7次按下MODE鍵,如果此時(shí)按下 S+ /S-,則年的值 +1/ -1,按下yes保存設(shè)定值
- // 第8次按下MODE鍵,開(kāi)始正常計(jì)時(shí)。
- //
- //------------------------------------------------------------------------
- #include <reg51.h> //調(diào)用含有51專(zhuān)用寄存器的頭文件
- #define uchar unsigned char //用uchar代替unsigned char
- #define uint unsigned int //用uint代替unsigned int
- #define yh 0x80 //LCD第一行的初始位置,因?yàn)長(zhǎng)CD1602字符地址首位D7恒定為1(100000000=80)
- #define er 0x80+0x40 //LCD第二行初始位置(因?yàn)榈诙械谝粋(gè)字符位置地址是0x40)
- char a,sec,min,hour,day,mouth,week,year,temp,n; //定義變量
- sbit rw=P3^6; //液晶讀寫(xiě)端
- sbit rs=P3^5; //液晶指令/數(shù)據(jù)輸入控制
- sbit en=P3^4; //液晶使能端
- sbit sda=P1^1; //數(shù)據(jù)線
- sbit clk=P1^0; //時(shí)鐘線
- sbit rst=P1^2; //使能
- sbit mode=P3^0; //設(shè)置鍵
- sbit s1 =P3^1; //加鍵
- sbit s2 =P3^2; //減鍵
- sbit yes =P3^3; //調(diào)整確認(rèn)鍵
- sbit ACC0=ACC^0; //累加器A低位
- sbit ACC7=ACC^7; //累加器A高位
- uchar code tab1[]={"20 - - "}; //年顯示的固定字符
- uchar code tab2[]={" : : "}; //時(shí)間顯示的固定字符
- /***********************延時(shí)子程序********************/
- void delay(uint xms)
- {
- uint x,y;
- for(x=xms;x>0;x--)
- for(y=110;y>0;y--);
- }
- /****************液晶寫(xiě)入指令函數(shù)*******************/
- void write_1602com(uchar com)
- {
- rs=0; //數(shù)據(jù)/指令選擇置為指令
- rw=0; //讀寫(xiě)選擇置為寫(xiě)
- P0=com; //送入數(shù)據(jù)
- delay(1);
- en=1; //拉高使能端,為制造有效的下降沿做準(zhǔn)備
- delay(1);
- en=0; //en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令
- }
- /********************液晶寫(xiě)入數(shù)據(jù)函數(shù)***************/
- void write_1602dat(uchar dat)
- {
- rs=1; //數(shù)據(jù)/指令選擇置為數(shù)據(jù)
- rw=0; //讀寫(xiě)選擇置為寫(xiě)
- P0=dat; //送入數(shù)據(jù)
- delay(1);
- en=1; //en置高電平,為制造下降沿做準(zhǔn)備
- delay(1);
- en=0; //en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令
- }
- /**************液晶初始化函數(shù)**********************/
- void lcd_init()
- {
- write_1602com(0x38); //設(shè)置液晶工作模式,
- write_1602com(0x0c); //開(kāi)顯示不顯示光標(biāo)
- write_1602com(0x06); //整屏不移動(dòng),光標(biāo)自動(dòng)右移
- write_1602com(0x01); //清顯示
- write_1602com(yh+1); //日歷顯示固定符號(hào)從第一行第1個(gè)位置之后開(kāi)始顯示
- for(a=0;a<14;a++)
- {
- write_1602dat(tab1[a]); //向液晶屏寫(xiě)日歷顯示的固定符號(hào)部分
- }
- write_1602com(er+2); //時(shí)間顯示固定符號(hào)寫(xiě)入位置,從第2個(gè)位置后開(kāi)始顯示
- for(a=0;a<8;a++)
- {
- write_1602dat(tab2[a]); //寫(xiě)顯示時(shí)間固定符號(hào),兩個(gè)冒號(hào)
- }
- }
- /***************寫(xiě)數(shù)據(jù)********************/
- void write_byte(uchar dat)
- {
- ACC=dat;
- rst=1;
- for(a=8;a>0;a--)
- {
- sda=ACC0;
- clk=0;
- clk=1;
- ACC=ACC>>1;
- }
- }
- /******************讀數(shù)據(jù)********************/
- uchar read_byte()
- {
- rst=1;
- for(a=8;a>0;a--)
- {
- ACC7=sda;
- clk=1;
- clk=0;
- ACC=ACC>>1;
- }
- return (ACC);
- }
- /*********向1302芯片寫(xiě)函數(shù),指定寫(xiě)入地址,數(shù)據(jù)*********/
- void write_1302(uchar add,uchar dat)
- {
- rst=0;
- clk=0;
- rst=1;
- write_byte(add);
- write_byte(dat);
- clk=1;
- rst=0;
- }
- /*********從1302讀數(shù)據(jù)函數(shù),指定讀取數(shù)據(jù)來(lái)源地址*******/
- uchar read_1302(uchar add)
- {
- uchar temp;
- rst=0;
- clk=0;
- rst=1;
- write_byte(add);
- temp=read_byte();
- clk=1;
- rst=0;
- return(temp);
- }
- /****************BCD碼轉(zhuǎn)十進(jìn)制函數(shù),輸入BCD,返回十進(jìn)制*******/
- uchar BCD(uchar m)
- {
- uchar x;
- x=m>>4;
- return(x=x*10+(m&=0x0f));
- }
- /********1302芯片初始化子函********/
- void ds1302_init()
- {
- rst=0;
- clk=0;
- write_1302(0x8e,0x00); //允許寫(xiě),禁止寫(xiě)保護(hù)
- delay(50);
復(fù)制代碼
所有資料51hei提供下載:
DS1302 1602液晶.rar
(600.95 KB, 下載次數(shù): 706)
2019-5-20 16:15 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|