目的是为了熟悉定时器中断程序,使用定时器的中断控制数码管的多位扫描显示数字,通过按键S2和S3来控制数字的加减。欢迎各位指正不足!!!!!!
#include <REGX52.H>
#define uint unsigned int
#define uchar unsigned char
sbit DU =P2^6;//段选
sbit WE =P2^7;//位选
sbit key_s2 = P3^0;//独立按键S2
sbit key_s3 = P3^1;//独立按键S3
uchar num;//数码管显示的值
uchar ms_50,s; //记录50ms的个数 20个为1s
//共阴极数码管0-9
uchar code duanxuan[]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,};
//位选前三个数码管
uchar code weixuan[] ={0xfe,0xfd,0xfb,0xf7};
void delay(uint x) //@12.000MHz 延迟函数1毫秒
{
unsigned char i, j;
while(x--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
void display(uchar i) //数码管显示函数
{
static uchar wei;
uchar qian,bai, shi, ge;
qian =i/1000;
bai = i / 100%10;
shi = i /10%10;
ge = i % 10;
P0 = 0XFF;//清除断码
WE = 1; //位选打开
P0 = weixuan[wei];
WE = 0; //关闭位选寄存器
switch(wei)
{
case 0:DU = 1;P0 = duanxuan[qian];DU = 0;break;
case 1:DU = 1;P0 = duanxu

7490

被折叠的 条评论
为什么被折叠?



