用的是89c51單片機。如圖:
按下k1切換時間日期Removeformat
按下k2對時間進行調節,每按一下,調節一位
按下k3 +1
按下k4 -1最后再附上此單片機開發板原理圖
-13fb2b66d1a0756f.jpg (404.79 KB, 下載次數: 37)
下載附件
2019-1-9 01:59 上傳
電路圖:http://www.zg4o1577.cn/bbs/dpj-42448-1.html
單片機源碼:
- #include<reg52.h>
- #include<temp.h>
- typedef unsigned int uint;
- typedef unsigned char uchar;
- sbit k1=P3^1;
- sbit k2=P3^0;
- sbit k3=P3^2;
- sbit k4=P3^3;
- sbit beep=P1^5;
- int t,num1=9,num2=5,num3=2,num4=5,num6=2,num5=3,s2num=0,b=0,flag=1,san=0;
- uchar numday1=1,numday2=3,numyue1=2,numyue2=1,numnian1=7,numnian2=1;
- uchar DisplayData[8];
- sbit lsa=P2^2;
- sbit lsb=P2^3;
- sbit lsc=P2^4;
- sbit lsa=P2^2;
- sbit lsb=P2^3;
- sbit lsc=P2^4;
- void chushi();
- void delay(uchar i);
- void xianshi();
- void key();
- void riqi();
- void baoshi();
- void chushi()
- {
- TMOD=0x11;
- TH1=(65536-50000)/256;
- TL1=(65536-50000)%256;
- ET1=1;
- TR1=0;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- ET0=1;
- TR0=1;
- EA=1;
- }
- void jishi() interrupt 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- t++;
- if(t==20)
- {
- t=0;
- num1++;
- if(num1==10)
- {
- num1=0;
- num2++;
- if(num2==6)
- {
- num2=0;
- num3++;
- if(num3==10)
- {
- num3=0;
- num4++;
- if(num4==6)
- {
- num4=0;
- num5++;
- if(num5==4)
- {
- num5=0;
- num6++;
- if(num6==3)
- {
- num6=0;
- }
- }
- }
- }
- }
- }
- if((num5==3)&&(num6==2)&&(num4==5)&&(num3==9)&&(num2==5)&&(num1==9))
- {
- numday1++;
- }
- baoshi();
- }
-
-
- }
- void xianshi()
- {
- key();
- lsa=0;
- lsb=0;
- lsc=0;
- if(s2num==1)
- {
- if(san%2==0)
- P0=a[num1];
- else
- P0=0X00;
- }
- else
- P0=a[num1];
- delay(10);
- P0=0x00; //消隱
- lsa=1;
- lsb=0;
- lsc=0;
- if(s2num==2)
- {
- if(san%2==0)
- P0=a[num2];
- else
- P0=0X00;
- }
- else
- P0=a[num2];
- delay(10);
- P0=0x00;
- lsa=0;
- lsb=1;
- lsc=0;
- P0=a[10];
- delay(10);
- P0=0x00;
- lsa=1;
- lsb=1;
- lsc=0;
- if(s2num==3)
- {
- if(san%2==0) //閃爍
- P0=a[num3];
- else
- P0=0X00;
- }
- else
- P0=a[num3];
- delay(10);
- P0=0x00;
-
- lsa=0;
- lsb=0;
- lsc=1;
- if(s2num==4)
- {
- if(san%2==0)
- P0=a[num4];
- else
- P0=0x00;
- }
- else
- P0=a[num4];
- delay(10);
- P0=0x00;
- lsa=1;
- lsb=0;
- lsc=1;
- P0=a[10];
- delay(10);
- P0=0x00;
-
- lsa=0;
- lsb=1;
- lsc=1;
- if(s2num==5)
- {
- if(san%2==0)
- P0=a[num5];
- else
- P0=0x00;
- }
- else
- P0=a[num5];
- delay(10);
- P0=0x00;
- lsa=1;
- lsb=1;
- lsc=1;
- if(s2num==6)
- {
- if(san%2==0)
- P0=a[num6];
- else
- P0=0x00;
- }
- else
- P0=a[num6];
- delay(10);
- P0=0x00;
-
- }
- void delay(uchar i)
- {
- while(i--);
- }
- /**********************************************
- 按鍵加減
- **********************************************/
- void key()
- {
-
- if(k2==0)
- {
- delay(1000);
- if(k2==0)
- {
- s2num++;
- while(!k2);
- if(s2num==1)
- {
- TR0=0;
- TR1=1;
- }
- if(s2num==7)
- {
- TR0=1;
- TR1=0;
- s2num=0;
- }
- }
-
- }
- if(s2num!=0)
- {
-
- if(s2num==1)
- {
-
- if(k3==0)
- {
- delay(1000);
- if(k3==0)
- {
- num1++;
- if(num1==10)
- {
- num1=0;
- }
- }
- }
- while(!k3);
- if(k4==0)
- {
- delay(1000);
- if(k4==0)
- {
- num1--;
- if(num1==-1)
- {
- num1=9;
- }
- }
- }
- while(!k4);
- }
- if(s2num==2)
- {
-
- TR1=1;
- if(k3==0)
- {
- delay(1000);
- if(k3==0)
- {
- num2++;
- if(num2==6)
- {
- num2=0;
- }
- }
- }
- while(!k3);
- if(k4==0)
- {
- delay(1000);
- if(k4==0)
- {
- num2--;
- if(num2==-1)
- {
- num2=5;
- }
- }
- }
- while(!k4);
- }
- if(s2num==3)
- {
- TR1=1;
- if(k3==0)
- {
- san=0;
- delay(1000);
- if(k3==0)
- {
- num3++;
- if(num3==10)
- {
- num3=0;
- }
- }
- }
- while(!k3);
- if(k4==0)
- {
- delay(1000);
- if(k4==0)
- {
- num3--;
- if(num3==-1)
- {
- num3=9;
- }
- }
- }
- while(!k4);
- }
- if(s2num==4)
- {
- TR1=1;
- if(k3==0)
- {
- delay(1000);
- if(k3==0)
- {
- num4++;
- if(num4==6)
- {
- num4=0;
- }
- }
- }
- while(!k3);
- if(k4==0)
- {
- delay(1000);
- if(k4==0)
- {
- num4--;
- if(num4==-1)
- {
- num4= 5;
- }
- }
- }
- while(!k4);
- }
- if(s2num==5)
- {
- TR1=1;
- if(k3==0)
- {
- delay(1000);
- if(k3==0)
- {
- num5++;
- if(num5==4)
- {
- num5=0;
- }
- }
- }
- while(!k3);
- if(k4==0)
- {
- delay(1000);
- if(k4==0)
- {
- num5--;
- if(num5==-1)
- {
- num5=3;
- }
- }
- }
- while(!k4);
- }
- if(s2num==6)
- {
- TR1=1;
- if(k3==0)
- {
- delay(1000);
- if(k3==0)
- {
- num6++;
- if(num6==3)
- {
- num6=0;
- }
- }
- }
- while(!k3);
- if(k4==0)
- {
- delay(1000);
- if(k4==0)
- {
- num6--;
- if(num6==-1)
- {
- num6=2;
- }
- }
- }
- while(!k4);
- }
-
- /* if(k4==0)
- {
- delay(1000);
- if(k4==0)
- {
- num1=0;
- num2=0;
- num3=0;
- num4=0;
- num5=0;
- num6=0;
- }
- }
- while(!k4); */
- }
- }
- /****************************************
- 顯示日期
- *****************************************/
- void riqi()
- {
-
-
- lsa=0;
- lsb=0;
- lsc=0;
- P0=a[numday1];
- delay(10);
- P0=0x00; //消隱
- lsa=1;
- lsb=0;
- lsc=0;
- P0=a[numday2];
- delay(10);
- P0=0x00;
- lsa=0;
- lsb=1;
- lsc=0;
- P0=a[10];
- delay(10);
- P0=0x00;
- lsa=1;
- lsb=1;
- lsc=0;
- P0=a[numyue1];
- delay(10);
- P0=0x00;
-
- lsa=0;
- lsb=0;
- lsc=1;
- P0=a[numyue2];
- delay(10);
- P0=0x00;
- lsa=1;
- lsb=0;
- lsc=1;
- P0=a[10];
- delay(10);
- P0=0x00;
-
- lsa=0;
- lsb=1;
- lsc=1;
- P0=a[numnian1];
- delay(10);
- P0=0x00;
- lsa=1;
- lsb=1;
- lsc=1;
- P0=a[numnian2];
- delay(10);
- P0=0x00;
- }
- void sanshuo() interrupt 3
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- san++;
- if(san==11)
- san=0;
- }
- void baoshi()
- {
- int i;
- if((num4==5)&&(num3==9)&&(num2==5)&&(num1==9))
- for(i=10000;i>2;i--)
- {
- beep=~beep;
- delay(10);
- }
-
- }
- void datapros(int temp)
- {
- float tp;
- if(temp< 0) //當溫度值為負數
- {
- DisplayData[0] = 0x40; // -
- //因為讀取的溫度是實際溫度的補碼,所以減1,再取反求出原碼
- temp=temp-1;
- temp=~temp;
- tp=temp;
- temp=tp*0.0625*100+0.5;
- //留兩個小數點就*100,+0.5是四舍五入,因為C語言浮點數轉換為整型的時候把小數點
- //后面的數自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
- //算加上0.5,還是在小數點后面。
-
- }
- else
- {
- DisplayData[0] = 0x00;
- tp=temp;//因為數據處理有小數點所以將溫度賦給一個浮點型變量
- //如果溫度是正的那么,那么正數的原碼就是補碼它本身
- temp=tp*0.0625*100+0.5;
- //留兩個小數點就*100,+0.5是四舍五入,因為C語言浮點數轉換為整型的時候把小數點
- //后面的數自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
- //算加上0.5,還是在小數點后面。
- }
- DisplayData[1] = a[temp / 10000];
- DisplayData[2] = a[temp % 10000 / 1000];
- DisplayData[3] = a[temp % 1000 / 100] | 0x80;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
數碼管時鐘.zip
(127.75 KB, 下載次數: 95)
2019-1-9 01:59 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|