标题:
基于单片机的多功能电子时钟的仿真
[打印本页]
作者:
瞬间移动
时间:
2018-3-14 21:12
标题:
基于单片机的多功能电子时钟的仿真
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png
(13.62 KB, 下载次数: 18)
下载附件
2018-3-15 03:30 上传
单片机源程序:
#include<reg51.h>
#define uchar unsigned char
void xianshi(int bianma,int adr);
int key(void);
uchar table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0xc7,0x39,0x5e,0x79,0x71};
uchar table2[]={0x88,0x90,0xa0,0xc0};
sbit key1=P3^6;
sbit key2=P3^7;
int flag2=0,t=0,i=0,j=0,m=0,k=0,b=0,c=0,a=0;
int anjian1();
int anjian2();
void delay(uchar z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
int kk=16;
int set_flag=0;
TMOD=0x11;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
ET0=1;
ET1=1;
EA=1;
EX0=1;
IT0=1;
TR1=1;
while(1)
{
if(anjian1())
{
flag2=1;
}
if(flag2)
{
if(anjian2())
{ a++;
while(anjian2()==1);
}
while(a>0)
{
xianshi(b%10,3);
xianshi(b/10,2);
xianshi(c%10,1);
xianshi(c/10,0);
if(anjian2())
{ a++;
while(anjian2()==1);
}
if(a==2)
{
TR0=1;
}
if(a==3)
{
TR0=0;
}
if(a==4)
{
a=0;
b=0,c=0;
}
}
xianshi(m,3);
xianshi(k,2);
xianshi(j,1);
xianshi(i,0);
}
else
{
P2=0Xff;
P0=0;
t=0;
m=0,k=0,j=0,i=0;
}
kk=key();
if(kk!=16)
{
if(kk==15)
{
TR1=0;set_flag=0;
}
if(kk==14)
{
TR1=1;set_flag=0;//退出模式
}
if(kk==13)
{
set_flag=3;//设置分的个位
}
if(kk==12)
{
set_flag=4;//设置分的十位
}
if(kk==11)
{
set_flag=5;//设置时的个位
}
if(kk==10)
{
set_flag=6;//设置时的十位
}
if((kk<10)&&(set_flag!=0))
{
switch(set_flag)
{
case 3:
m=kk;
break;
case 4:
if(kk<6)
k=kk;
break;
case 5:
j=kk;
break;
case 6:
if(kk<6)
i=kk;
break;
}
}
}
kk=16;
}
}
void xianshi(int bianma,int adr)
{
P2=0xff;
P0=0;
P2=~table1[bianma];
delay(1);
P0=table2[adr];
delay(1);
delay(30);
}
void dingshiqi1() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
t++;
if(t==20)
{
t=0;
m++;
if(m==10)
{
k++;
m=0;
}
if(k==6)
{
j++;
k=0;
}
if(j==10)
{
i++;
j=0;
}
if(i==6)
{
i=0;
}
}
}
void dingshiqi0() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
b++;
if(b==100)
{b=0;
c++;
}
if(c==60)
{
c=0;
}
}
int anjian1()
{
int key;
key=key1;
if(key==0)
{
delay(20);
key=key1;
if(key==0)
{
delay(200);
return 1;
}
}
return 0;
}
int anjian2()
{
int keyy;
keyy=key2;
if(keyy==0)
{
delay(20);
keyy=key2;
if(keyy==0)
{
delay(200);
return 1;
}
}
return 0;
}
void INT0_() interrupt 0
{
flag2=0;
}
int key(void)
{
int k=16;
int temp=0;
P1=0xfe;
temp=P1;
if(temp!=0xfe)
{
delay(25);
if(temp!=0xfe)
{
if(temp==0xee)
{
k=0;
}
if(temp==0xde)
{
k=1;
}
if(temp==0xbe)
{
k=2;
}
if(temp==0x7e)
{
k=3;
}
}
delay(1000);
}
P1=0xfd;
temp=P1;
if(temp!=0xfd)
{
delay(25);
if(temp!=0xfd)
{
if(temp==0xed)
{
k=4;
}
if(temp==0xdd)
{
k=5;
}
if(temp==0xbd)
{
k=6;
}
if(temp==0x7d)
{
k=7;
}
}
delay(1000);
}
P1=0xfb;
temp=P1;
if(temp!=0xfb)
{
delay(25);
if(temp!=0xfb)
{
if(temp==0xeb)
{
k=8;
}
if(temp==0xdb)
{
k=9;
}
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
基于单片机的多功能电子时钟.rar
(65.65 KB, 下载次数: 25)
2018-3-14 21:08 上传
点击文件名下载附件
有时钟和秒表的功能
下载积分: 黑币 -5
作者:
小小肚皮
时间:
2019-12-19 19:39
没有晶振是怎么运行的...
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1