求画proteus电子时钟仿真图,程序我写了,不会仿真啊
九诗二房 2012-11-20 02:21:24 程序如下,,我邮箱lwwkeep@qq.com
#include <reg51.h>
#include <intrins.h>
#define SEG P0 //数码管接p0管脚
#define SCANP P2 //扫描接p1管脚
unsigned int i=0;
unsigned char data scan=0xfe;
sbit key0=P3^0;//调整分
sbit key1=P3^1;//调整时
sbit key2=P3^4;
#define countt0 50000 //T0,mode1,50MS 12Mhz
#define th_t0 (65636-countt0)/256
#define tl_t0 (65636-countt0)%256
unsigned int count_t0=0;
#define countt1 1000 //T1,mode1,1ms 12Mhz
#define th_t1 (65636-countt1)/256
#define tl_t1 (65636-countt1)%256
unsigned char code tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x98};// 共阳数码管
unsigned char distab[6];
unsigned char second=0,minute=0,hour=0;
void delay(unsigned);//延迟函数
void key_m();//按键处理
void key_h();
void min_inc();
void hour_inc();
main()
{
TCON=0x00;//低电平触发
TMOD=0x11;//定时器0、1工作在mode1
TH0=th_t0;
TL0=tl_t0;
TH1=th_t1;
TL1=tl_t1;
distab[0]=tab[hour/10];//显示时分秒
distab[1]=tab[hour%10];
distab[2]=0xbf;//显示“—”
distab[3]=tab[minute/10];
distab[4]=tab[minute%10];
distab[5]=0xbf;
distab[6]=tab[second/10];
distab[7]=tab[second%10];
IE=0x8f;//用int0/1,TF/1
TR1=1;//启动T1
TR0=1;//启动T0
SEG=0xff;
SCANP=0xff;
P3=0xff;
while(1)
{
if(key0==0)
{
delay(20);//延迟20MS
TR0=0;
key_m();//按键处理
}
if(key1==0)
{
delay(20);
TR0=0;
key_h();
}
}
}
void key_m()
{
if(minute==59)
minute=0;
else
minute++;
if(key2=0) TR0=1;
}
void key_f()
{
if(hour==23)
hour=0;
else
hour++;
if(key2=0) TR0=1;
}
void delay_ms(unsigned int j) // 延时函数
{
unsigned ms;
while(j--)
for(ms = 0; ms < 124; ms++);
}
void time(void) interrupt 1 //时分秒计算
{
count_t0++;
if(count_t0==20)
{
count_t0=0;
second++;
if(second==60)
{
second=0;
min_inc();
}
}
distab[6]=tab[second/10];
distab[7]=tab[second%10];
}
void disp(void) interrupt 3 //用于数码管的动态扫描
{
SEG=0xff;
SEG=distab[i];
SCANP=scan;
scan=_crol_(scan,1);// 循环左移
i++;
if(i==6) i=0;
}
void min_inc()
{
minute++;
if(minute==60)
{
minute=0;
hour_inc();
}
distab[3]=tab[minute/10];
distab[4]=tab[minute%10];
}
void hour_inc()
{
hour++;
if(hour==24) hour=0;
distab[0]=tab[hour/10];
distab[1]=tab[hour%10];
}