用的是89c51单片机。如图:
按下k1切换时间日期Removeformat
按下k2对时间进行调节,每按一下,调节一位
按下k3 +1
按下k4 -1最后再附上此单片机开发板原理图
电路图:http://www.51hei.com/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)
|