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