标题:
HC6800-ES V2.0 51单片机数码管时钟程序
[打印本页]
作者:
xiaohu123456789
时间:
2019-1-9 02:01
标题:
HC6800-ES V2.0 51单片机数码管时钟程序
用的是89c51单片机。如图:
按下k1切换时间日期Removeformat
按下k2对时间进行调节,每按一下,调节一位
按下k3 +1
按下k4 -1最后再附上此单片机开发板原理图
-13fb2b66d1a0756f.jpg
(404.79 KB, 下载次数: 37)
下载附件
2019-1-9 01:59 上传
电路图:
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)
2019-1-9 01:59 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
时之沙丶流年
时间:
2019-7-9 12:09
很不错
作者:
3500272634
时间:
2019-12-23 13:09
很实用,最近在搞设计,
借鉴参考还是很好的。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1