标题:
单片机时钟数码管显示按键可调程序+原理图
[打印本页]
作者:
罗大韩
时间:
2021-4-16 11:08
标题:
单片机时钟数码管显示按键可调程序+原理图
电路原理图如下:
51hei截图20210416110641.png
(81.2 KB, 下载次数: 89)
下载附件
2021-4-16 11:08 上传
单片机源程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit s_set=P1^0;
sbit m_set=P1^1;
sbit h_set=P1^2;
sbit reset=P1^3;
sbit led=P3^2;
unsigned char second,minute,hour,tcnt,restar=0;
uchar code scan[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar code table[13]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x39,0x00};
uchar dispbuf[8];
void delay(unsigned int us)
{
while(us--);
}
void scandisp()
{
unsigned char i,value;
for(i=0;i<8;i++)
{
P2=0xff;
value=table[dispbuf[i]];
P0=value;
P2=scan[i];
delay(50);
}
}
void Timer0(void)interrupt 1 using 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
tcnt++;
if(tcnt==20)
{
second++;
tcnt=0;
if(second==60)
{
minute++;
second=0;
if(minute==60)
{
hour++;
minute=0;
if(hour==24)
{
hour=0;
minute=0;
second=0;
tcnt=0;
}
}
}
}
}
void display()
{
scandisp();
dispbuf[6]=second/10;
dispbuf[7]=second%10;
dispbuf[5]=10;
dispbuf[3]=minute/10;
dispbuf[4]=minute%10;
dispbuf[2]=10;
dispbuf[0]=hour/10;
dispbuf[1]=hour%10;
}
void key_test()
{
display();
P1=0xff;
restar=0;
if(s_set==0)
{
delay(100);
if(s_set==0)
{
second++;
if(second==60)
{
second=0;
}
while(s_set==0) display();
}
}
if(m_set==0)
{
delay(100);
if(m_set==0)
{
minute++;
if(minute==60)
{
minute=0;
}
while(m_set==0) display();
}
}
if(h_set==0)
{
delay(100);
if(h_set==0)
{
hour++;
if(hour==24)
{
hour=0;
}
while(h_set==0) display();
}
}
if(reset==0)
{
delay(100);
if(reset==0)
{
restar=1;
}
}
}
void main()
{
while(1)
{
P3=0x00;
hour=0;
minute=0;
second=0;
tcnt=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
IE=0x82;
TR0=1;
while(1)
{
if(dispbuf[1]==9&dispbuf[0]==0&dispbuf[6]<=1&dispbuf[7]<=5)
{
led=1;
if(dispbuf[1]==9&dispbuf[0]==0&dispbuf[6]==1&dispbuf[7]==5)
{
led=0;
}
}
key_test();
if(restar==1)
break;
}
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1