单片机的课程设计
发布网友
发布时间:2022-05-21 18:43
我来回答
共1个回答
热心网友
时间:2023-08-18 21:37
一年前写的,看看吧,好像是6位数码管,三个按键的
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
/****************************************/
uchar code temp[]={0xbd,0x84,0xd9,0xcd,0xe4,0x6d,0x7d,0x85,0xfd,0xed,0x0};
uchar code tempwe[]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
/***************************************/
/****************位定义***************/
sbit la=P2^6; //数码管段选
sbit wela=P2^7;
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^2;
uint ms;
uchar s,min,id;
void timer0_init();
void display();
void delay(uint xms);
void keyscan();
void main()
{
timer0_init();
while(1)
{
keyscan();
display();
if(id==1)
{
TR0=1;
}
else
{
TR0=0;
}
}
}
void timer0() interrupt 1
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
ms++;
if(ms==1000)
{
ms=0;
s++;
if(s==60)
{
s=0;
min++;
if(min==10)
{
min=0;
s=0;
ms=0;
}
}
}
}
void keyscan()
{
if(key1==0)
{
if(key1==0)
{
while(key1==0)
{
TR0=1;
display();
}
TR0=0;
}
}
if(key2==0)
{
if(key2==0)
{
while(key2==0)
{
display();
}
id++;
if(id==2)
{
id=0;
}
}
}
if(key3==0)
{
if(key3==0)
{
while(key3==0)
{
display();
}
if(TR0!=1)
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
ms=0;
s=0;
min=0;
}
}
}
}
void timer0_init()
{
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
EA=1;
ET0=1;
TR0=0;
}
void delay(uint xms)
{
uint x,y;
for(x=xms;x>0;x--)
for(y=110;y>0;y--);
}
void display()
{
P0=0x0;
la=0;
P0=0xff;
wela=1;
P0=tempwe[1]; //要显示的数码管
wela=0;
P0=0x0;
la=1;
P0=temp[min];//要显示的数
la=0;
delay(1);
P0=0x0;
la=0;
P0=0xff;
wela=1;
P0=tempwe[1]; //要显示的数码管
wela=0;
P0=0x0;
la=1;
P0=0x02; //要显示的数//小数点显示
la=0;
delay(1);
P0=0x0;
la=0;
P0=0xff;
wela=1;
P0=tempwe[2]; //要显示的数码管
wela=0;
P0=0x0;
la=1;
P0=temp[s/10];//要显示的数
la=0;
delay(1);
P0=0x0;
la=0;
P0=0xff;
wela=1;
P0=tempwe[3]; //要显示的数码管
wela=0;
P0=0x0;
la=1;
P0=temp[s%10];//要显示的数
la=0;
delay(1);
P0=0x0;
la=0;
P0=0xff;
wela=1;
P0=tempwe[3]; //要显示的数码管
wela=0;
P0=0x0;
la=1;
P0=0x02; //要显示的数//小数点显示
la=0;
delay(1);
P0=0x0;
la=0;
P0=0xff;
wela=1;
P0=tempwe[4]; //要显示的数码管
wela=0;
P0=0x0;
la=1;
P0=temp[ms/100];//要显示的数
la=0;
delay(1);
P0=0x0;
la=0;
P0=0xff;
wela=1;
P0=tempwe[5]; //要显示的数码管
wela=0;
P0=0x0;
la=1;
P0=temp[ms%100/10];//要显示的数
la=0;
delay(1);
P0=0x0;
la=0;
P0=0xff;
wela=1;
P0=tempwe[6]; //要显示的数码管
wela=0;
P0=0x0;
la=1;
P0=temp[ms%100%10];//要显示的数
la=0;
delay(1);
}
求采纳为满意回答。