|
數(shù)碼管顯示時鐘,用矩陣鍵盤來設(shè)置時間,斷電時的時間會存儲在EEPROM中,來電時恢復(fù)斷電時刻的時間
單片機源程序如下:
- /*實驗效果每加一秒鐘顯示會跳動,并在8位數(shù)碼管上以時間的形式顯示*/
- /*使用矩陣鍵盤的S1、S2、S3按鍵分別對秒、分、時進(jìn)行設(shè)置加1操作。*/
- /*設(shè)備斷電時EEPROM記憶斷電時刻的時間,重新上電時設(shè)備顯示斷電時刻的時間開始走時*/
- /********注意事項:往EEPROM 24c2寫入數(shù)據(jù)時與下一次寫數(shù)據(jù)時適當(dāng)延時2ms左右*****/
- /****************不然寫入數(shù)據(jù)的速度跟不上程序執(zhí)行時間以至于數(shù)據(jù)寫不進(jìn)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保存的數(shù)據(jù)賦于小時中
- minit=At24c02Read(0x01); //讀出24c02地址1保存的數(shù)據(jù)賦于分中
- second=At24c02Read(0x00); //讀出24c02地址2保存的數(shù)據(jù)賦于秒中
- Timer1configuration();
- Timer0configuration();
-
- Int0Configuration();
-
- while(1)
- {
- keyvalue=readkey();
- if(TR0==0)
- {
- if(KeyState==1) //按鍵狀態(tài)為1時代表有按鍵按下
- {
- if(keyvalue==1) // 按鍵1按下時
- {
-
- second++; //秒加1
- write=1; //向24c02寫數(shù)據(jù)允許
- if(second==60)
- second=0;
- }
- else if(keyvalue==2)// 按鍵2按下時
- {
- minit++; // 分加1
- write=1;//向24c02寫數(shù)據(jù)允許
- if(minit==60)
- minit=0;
- }
-
- if(keyvalue==3) // 按鍵3按下時
- {
- hour++; // 小時加1
- write=1;//向24c02寫數(shù)據(jù)允許
- if(hour==24)
- hour=0;
- }
- KeyState=0; //清除按鍵按下狀態(tài)標(biāo)志
- }
-
- }
- 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) //當(dāng)write為1時向24c02寫入數(shù)據(jù)
- {
- write=0;//清除寫保護(hù)標(biāo)記
- At24c02Write(0x02,hour); //在24c02的地址0中寫入數(shù)據(jù)"小時"
- Delay1ms(2);/*作適當(dāng)?shù)难訒r,程序運行太快以至于數(shù)據(jù)還沒有寫入24c02就開始執(zhí)行下一條語句*/
- At24c02Write(0x01,minit); //在24c02的地址1中寫入數(shù)據(jù)"分"
- Delay1ms(2);/*作適當(dāng)?shù)难訒r,程序運行太快以至于數(shù)據(jù)還沒有寫入24c02就開始執(zhí)行下一條語句*/
- At24c02Write(0x00,second); //在24c02的地址2中寫入數(shù)據(jù)"秒"
-
- }
-
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
時鐘斷電記憶 矩陣鍵盤設(shè)置時間.zip
(57.47 KB, 下載次數(shù): 72)
2018-11-13 21:56 上傳
點擊文件名下載附件
黑 下載積分: 黑幣 -5
|
|