求一个简单的单片机用数码管显示计时60秒的C语言程序,程序一定要带有解释和Proteus 仿真电路图.
/***程序仿真用89c52 数码管用共阳极数码管
P0口段选,P3.0和P3.1位选
定时器2用法见百度“T2CON”***/
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code num[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf}; //共阳极数码管0-9数组以及全灭和“-”符号
uchar data da[2]; //定义显示缓存
uint sec; //定义秒
uchar a; //显示位选择
//延时子程序
void d(uint i)
{uint j;
for(;i>0;i--)
for(j=110;j>0;j--);
}
//显示函数
void prt()
{
da[0]=sec/10;//十位存入显示缓存
da[1]=sec%10;//各位存入显示缓存
P0=num[da[a]];//将要显示的数据付给P0
d(5);//延迟一小段时间
P3<<=1;//P3数据向左移移位
P0=0xff;//消隐
a++;//显示数据指向下一位
if(a>1) {a=0; P3=0x01;}//第二个数据扫完,指向第一个数据
}
//定时器中断子函数
timer2() interrupt 5
{
static uchar t;
TF2=0;
t++;
if(t==20) //定时够20次即1s
{
t=0; //t清零
sec++; //秒加1
if(sec==60) sec=0; //
}
}
//主函数
void main()
{ //
RCAP2H=(65536-50000)/256; //
RCAP2L=(65536-50000)%256; //定时器2定时50MS
TR2=1; //启动定时器2
ET2=1; //打开定时器2中断
EA=1; //开总中断
P3=0x01;
while(1)
{prt(); //显示
}
}
望采纳···