我刚刚给别人做了这个设计,他的没有按键,我又从新给你弄了弄,完成你的所有要求,并且仿真成功了,看看吧。
#include<reg51h>
#define uchar unsigned char
#define uint unsigned int
uint a,m,n=0,k;//n为999存放变量
sbit key1=P3^0;
sbit key2=P3^1;
void delay(uint ms)//延时函数
{
uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<120;j++);
}
void smg(uchar wx,uchar dx)//数码管显示
{
uchar tablewx[]={0x01,0x02,0x04,0x08};
uchar tabledx[]={0xC0,0xF9,0xA4,0xB0,0x99, 0x92, 0x82, 0xF8,0x80,0x90};
P1=tablewx[wx];
P2=tabledx[dx];
delay(3);
}
void t0start()//定时器t0初始化函数
{
TMOD=0x01;
TH0=0x3c;
TL0=0xb0;
ET0=1;
EA=1;
TR0=1;
}
void main()
{
t0start();
while(1)
{
if(key1==0&&TR0==1)
delay(30);
if(key1==0&&TR0==1)
TR0=0;
if(key1==0&&TR0==0)
delay(30);
if(key1==0&&TR0==0)
TR0=1;
if(key2==0)
{
n=0;
k=0;
}
smg(0,n/100);
smg(1,n%100/10);
smg(2,n%10);
smg(3,k);
}
}
void t0() interrupt 1//t0中断函数
{
TH0=0x3c;
TL0=0xb0;
a++;
m++;
if(m==2)
{
m=0;
k++;
if(k==10)
k=0;
}
if(a==20)
{
a=0;
n++;
}
}
MOV DPTR,#TAB
MOVC A,@A+DPTR
CPL A ;理解这句
MOV P0,A
MOV DPTR,#TAB 这句是将TAB处的内容的地址移入DPTR寄存器(51单片机中唯一的一个16位的)
MOVC A,@A+DPTR 这句将(A寄存器中的内容+DPTR)中的地址处的数据移入A
比如此时 A=0,DPTR=300,这时就将300+0寄存器里的数据移到A
如果A=2,DPTR=300,这时就将(300+2)寄存器里的数据移到A
CPL A ; A求反,
MOV P0,A 将A的值移入P0口,用数码管等显示出来结果
#include<reg52h>
unsigned int s;
unsigned char key;
sbit d1=P3^7;
void delay() //动态显示延时
{
int k;
for(k=0;k<100;k++);
}
void delay1() //去抖动延时
{
unsigned char code table[] = {
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
P2=table[s%10]; P3=0xf8; delay(); P3=0xf0;
P2=table[s/10%10]; P3=0xf4; delay(); P3=0xf0;
P2=table[s/100%10]; P3=0xf2; delay(); P3=0xf0;
P2=table[s/1000]; P3=0xf1; delay(); P3=0xf0;
}
void main()
{
TMOD = 0x01;
TH0 = (65536 - 10000) / 256;//初值,每10ms中断一次
TL0 = (65536 - 10000) % 256;
ET0=1;
EA=1;
while(1) {
delay1();
if(!d1) {
delay1();
if(!d1) { //去抖动
while(!d1) delay1();//等待释放
key++;
if(key == 4) key = 1;
}
}
if(key == 1) TR0 = 1;//开始计时
else if(key == 2) TR0 = 0;//停止
else s = 0;
}
}
void time0() interrupt 1 //内部中断
{
TH0 = (65536 - 10000) / 256;
TL0 = (65536 - 10000) % 256;
s++;
if(s == 10000) s = 0;
}
以上就是关于本课题以89C52单片机为核心,设计出电子跑表,具有以下功能:全部的内容,包括:本课题以89C52单片机为核心,设计出电子跑表,具有以下功能:、MCS-51单片机查表程序的问题、利用51单片机动态显示0-60秒表等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)