標題:
HC6800-ES V2.0 51單片機數(shù)碼管時鐘程序
[打印本頁]
作者:
xiaohu123456789
時間:
2019-1-9 02:01
標題:
HC6800-ES V2.0 51單片機數(shù)碼管時鐘程序
用的是89c51單片機。如圖:
按下k1切換時間日期Removeformat
按下k2對時間進行調(diào)節(jié),每按一下,調(diào)節(jié)一位
按下k3 +1
按下k4 -1最后再附上此單片機開發(fā)板原理圖
-13fb2b66d1a0756f.jpg
(404.79 KB, 下載次數(shù): 37)
下載附件
2019-1-9 01:59 上傳
電路圖:
http://www.torrancerestoration.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) //當溫度值為負數(shù)
{
DisplayData[0] = 0x40; // -
//因為讀取的溫度是實際溫度的補碼,所以減1,再取反求出原碼
temp=temp-1;
temp=~temp;
tp=temp;
temp=tp*0.0625*100+0.5;
//留兩個小數(shù)點就*100,+0.5是四舍五入,因為C語言浮點數(shù)轉換為整型的時候把小數(shù)點
//后面的數(shù)自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
//算加上0.5,還是在小數(shù)點后面。
}
else
{
DisplayData[0] = 0x00;
tp=temp;//因為數(shù)據(jù)處理有小數(shù)點所以將溫度賦給一個浮點型變量
//如果溫度是正的那么,那么正數(shù)的原碼就是補碼它本身
temp=tp*0.0625*100+0.5;
//留兩個小數(shù)點就*100,+0.5是四舍五入,因為C語言浮點數(shù)轉換為整型的時候把小數(shù)點
//后面的數(shù)自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
//算加上0.5,還是在小數(shù)點后面。
}
DisplayData[1] = a[temp / 10000];
DisplayData[2] = a[temp % 10000 / 1000];
DisplayData[3] = a[temp % 1000 / 100] | 0x80;
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
數(shù)碼管時鐘.zip
(127.75 KB, 下載次數(shù): 95)
2019-1-9 01:59 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
時之沙丶流年
時間:
2019-7-9 12:09
很不錯
作者:
3500272634
時間:
2019-12-23 13:09
很實用,最近在搞設計,
借鑒參考還是很好的。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1