數碼管顯示時鐘,用矩陣鍵盤來設置時間,斷電時的時間會存儲在EEPROM中,來電時恢復斷電時刻的時間
單片機源程序如下:
- /*實驗效果每加一秒鐘顯示會跳動,并在8位數碼管上以時間的形式顯示*/
- /*使用矩陣鍵盤的S1、S2、S3按鍵分別對秒、分、時進行設置加1操作。*/
- /*設備斷電時EEPROM記憶斷電時刻的時間,重新上電時設備顯示斷電時刻的時間開始走時*/
- /********注意事項:往EEPROM 24c2寫入數據時與下一次寫數據時適當延時2ms左右*****/
- /****************不然寫入數據的速度跟不上程序執行時間以至于數據寫不進24c02中**/
- #include<reg51.h>
- #include"init.h"
- #include"key.h"
- #include"i2c.h"
- #include"delay.h"
- //sbit K1=P3^0;
- //sbit K2=P3^1;
- unsigned char code DIG_CODE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- unsigned char disp[8]={0x3f,0x3f,0x40,0x3f,0x3f,0x40,0x3f,0x3f};
- unsigned char hour=12,minit=0,second=0, Time=0;
- bit write=0,KeyState;
- main()
- {
- unsigned char keyvalue;
- hour=At24c02Read(0x02); //讀出24c02地址0保存的數據賦于小時中
- minit=At24c02Read(0x01); //讀出24c02地址1保存的數據賦于分中
- second=At24c02Read(0x00); //讀出24c02地址2保存的數據賦于秒中
- Timer1configuration();
- Timer0configuration();
-
- Int0Configuration();
-
- while(1)
- {
- keyvalue=readkey();
- if(TR0==0)
- {
- if(KeyState==1) //按鍵狀態為1時代表有按鍵按下
- {
- if(keyvalue==1) // 按鍵1按下時
- {
-
- second++; //秒加1
- write=1; //向24c02寫數據允許
- if(second==60)
- second=0;
- }
- else if(keyvalue==2)// 按鍵2按下時
- {
- minit++; // 分加1
- write=1;//向24c02寫數據允許
- if(minit==60)
- minit=0;
- }
-
- if(keyvalue==3) // 按鍵3按下時
- {
- hour++; // 小時加1
- write=1;//向24c02寫數據允許
- if(hour==24)
- hour=0;
- }
- KeyState=0; //清除按鍵按下狀態標志
- }
-
- }
- disp[7]=DIG_CODE[hour/10];
- disp[6]=DIG_CODE[hour%10];
- disp[4]=DIG_CODE[minit/10];
- disp[3]=DIG_CODE[minit%10];
- disp[1]=DIG_CODE[second/10];
- disp[0]=DIG_CODE[second%10];
- if(write==1) //當write為1時向24c02寫入數據
- {
- write=0;//清除寫保護標記
- At24c02Write(0x02,hour); //在24c02的地址0中寫入數據"小時"
- Delay1ms(2);/*作適當的延時,程序運行太快以至于數據還沒有寫入24c02就開始執行下一條語句*/
- At24c02Write(0x01,minit); //在24c02的地址1中寫入數據"分"
- Delay1ms(2);/*作適當的延時,程序運行太快以至于數據還沒有寫入24c02就開始執行下一條語句*/
- At24c02Write(0x00,second); //在24c02的地址2中寫入數據"秒"
-
- }
-
- }
- }
復制代碼
所有資料51hei提供下載:
時鐘斷電記憶 矩陣鍵盤設置時間.zip
(57.47 KB, 下載次數: 72)
2018-11-13 21:56 上傳
點擊文件名下載附件
黑
|