或者怎么把下面代碼改動(dòng)增加實(shí)時(shí)時(shí)鐘模塊+DS1302模塊
簡(jiǎn)單的來(lái)說(shuō),我需要靜態(tài)數(shù)碼鐘,。不需要那種動(dòng)態(tài)掃描的數(shù)碼鐘
- #include <reg51.h> //包含訪問(wèn)sfr庫(kù)函數(shù)reg51.h
- sbit K0=P1^2; //定義K0為P1.2(時(shí)鐘修正標(biāo)志鍵)
- sbit K1=P1^1; //定義K1為P1.1(修正移位鍵)
- sbit K2=P1^0; //定義K2為P1.0(修正加1鍵)
- sbit OEs=P1^3; //定義OEs為P1.3(秒輸出控制端,0有效)
- sbit OEm=P1^4; //定義OEm為P1.4(分輸出控制端,0有效)
- sbit OEh=P1^5; //定義OEh為P1.5(時(shí)輸出控制端,0有效)
- sbit RCK=P1^6; //定義RCK為P1.6(輸出鎖存控制端,上升沿有效)
- sbit LED=P1^7; //定義LED為P1.7(秒閃爍控制端,0有效)
- unsigned int ms05=0; //定義0.5ms計(jì)數(shù)器ms05,并清0
- unsigned char h=0, m=0, s=0; //定義時(shí)分秒計(jì)數(shù)器h、m、s,并清0
- unsigned char n=0; //定義修正位序號(hào)n
- unsigned char code c[10]={ //定義共陽(yáng)逆序字段碼數(shù)組,并賦值
- 0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};
- void disp6 ( ){ //6位顯示子函數(shù)
- unsigned char i; //定義序號(hào)變量i
- unsigned char a[6]; //定義時(shí)分秒數(shù)組a[6]
- a[5]=c[h/10]; a[4]=c[h%10]; //取出時(shí)顯示字段碼
- a[3]=c[m/10]; a[2]=c[m%10]; //取出分顯示字段碼
- a[1]=c[s/10]; a[0]=c[s%10]; //取出秒顯示字段碼
- for (i=0; i<6; i++){ //6位顯示字段碼依次串行輸出
- SBUF=a[i]; //串行發(fā)送一幀數(shù)據(jù)
- while (TI==0); TI=0;} //等待一幀數(shù)據(jù)串行發(fā)送完畢,完畢后TI清0
- RCK=0; RCK=1;} //595 RCK端輸入觸發(fā)正脈沖
- void key ( ){ //時(shí)鐘修正鍵處理子函數(shù)
- TR1=1; //時(shí)鐘修正鍵按下,T1運(yùn)行(用于修正位閃爍)
- if (K1==0){ //若移位鍵按下,則
- while (K1==0); //等待移位鍵釋放
- n++; //移位鍵釋放后,修正位序號(hào)加1
- if (n==3) n=0;} //若序號(hào)超限,復(fù)0
- if (K2==0){ //若加1鍵按下,則
- while (K2==0); //等待加1鍵釋放
- switch (n){ //switch散轉(zhuǎn),根據(jù)修正位序號(hào)修正時(shí)分秒
- case 0: {h++; //時(shí)計(jì)數(shù)器加1
- if (h==24) h=0; break;} //若時(shí)計(jì)數(shù)器超限,復(fù)0,跳出加1循環(huán)
- case 1: {m++; //分計(jì)數(shù)器加1
- if (m==60) m=0; break;} //若分計(jì)數(shù)器超限,復(fù)0,跳出加1循環(huán)
- case 2: {s++; //秒計(jì)數(shù)器加1
- if (s==60) s=0; break;}} //若秒計(jì)數(shù)器超限,復(fù)0,跳出加1循環(huán)
- disp6 ();}} //刷新顯示
- void main ( ){ //主函數(shù)
- TMOD=0x12; //置T0定時(shí)器方式2,T1定時(shí)器方式1(定時(shí)131ms)
- SCON=0; //置串口方式0
- TH0=TL0=0x06; //置T0定時(shí)0.5ms初值(fosc=6MHz)
- IP=0x02; //置T0高優(yōu)先級(jí)
- TR0=1; //T0運(yùn)行
- IE=0x8a; //T0、T1開(kāi)中,串行禁中
- P1=0xc7; //秒閃爍暗
- disp6 (); //595允許輸出,初始顯示0
- while (1) { //無(wú)限循環(huán)
- while (K0==1); //等待時(shí)鐘修正鍵按下
- if (K0==0) key ();}} //修正鍵按下,調(diào)用時(shí)鐘修正鍵處理子函數(shù)
- void t0( ) interrupt 1{ //T0中斷函數(shù)(0.5ms中斷)
- ms05++; //0.5ms計(jì)數(shù)器加1
- if (K0==1) {TR1=0; //若時(shí)鐘修正鍵已釋放,T1停運(yùn)行
- OEh=0; OEm=0; OEs=0;} //時(shí)分秒顯示停閃爍
- if (ms05==1000) LED=!LED; //0.5s到,秒閃爍亮
- if (ms05==2000) {LED=!LED; //1s到,秒閃爍暗
- ms05=0; //0.5ms計(jì)數(shù)器清0
- if (++s==60) {s=0; //秒計(jì)數(shù)器加1,滿60s,秒計(jì)數(shù)器清0
- if (++m==60) {m=0; //分計(jì)數(shù)器加1,滿60m,分計(jì)數(shù)器清0
- if (++h==24) h=0;}} //時(shí)計(jì)數(shù)器加1,滿24h,時(shí)計(jì)數(shù)器清0
- disp6 ();}} //滿1s,刷新顯示
- void t1( ) interrupt 3{ //T1中斷函數(shù)(修正位閃爍中斷)
- switch (n) { //switch散轉(zhuǎn),根據(jù)修正位序號(hào)閃爍
- case 0: {OEh=!OEh; OEm=0; OEs=0; break;} //時(shí)顯示閃爍
- case 1: {OEm=!OEm; OEh=0; OEs=0; break;} //分顯示閃爍
- case 2: {OEs=!OEs; OEh=0; OEm=0; break;}}} //秒顯示閃爍
復(fù)制代碼
|