这是一个动态数码管扫描的程序,,用串口控制自己写。只要让程序判断RXD是否等于
11111110B也就是十六进制0xfe。如果等于就让数码管段A打开。
#include<stc.h>
#define ur unsigned char
#define ut unsigned int
ur code shz[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x00};
sbit d0=P1^0;
sbit d1=P1^1;
sbit d2=P1^2;
sbit d3=P1^3;
sbit d4=P1^4;
sbit d5=P1^5;
sbit d6=P1^6;
sbit d7=P1^7; //数码管的7个段选
ut y; //全局变量
void ys(ut); //延时声明
void smg(ut); //数码动态显示程序声明
void main()
{
TMOD=0x01; //中断工作方式
TH0=(65536-50000)/256; //给寄存器高8位设置初值
TL0=(65536-50000)%256; //给寄存器低8位设置初值
EA=1; //开总中断
ET0=1; //打开T0中断
TR0=1; //启动T0中断
while(1)
{
smg(y);
}
}
void smg(ut i)
{
ut a,t1,t2,t3,t4,t5; //定义了四个变量,这四个变量分别存放个位、十位、百位、千位的数值。
t1=i/10000; //T1存放万位
t2=i%10000/1000; //T2存放千位
t3=i%1000/100; //T3存放百位
t4=i%100/10; //T4存放十位
t5=i%10; //T5存放个位
P1=0; //关闭数码管所有的位选
P0=shz[t5]; //把万位送给P0
d0=1; //打开万的位选
ys(5000); //延时
d0=0; //关闭位选
if(y>=10) //判断只有定时变量Y,大于等于10时在执行十位的动态扫描 这样就可以关闭等待的数码管
{
P0=shz[t4]; //把千位送给P0
d1=1; //打开千的位选
ys(5000); //延时
d1=0; //关闭位选
}
if(y>=100) //判断只有定时变量Y,大于等于100时在执行百位的动态扫描
{
P0=shz[t3]; //如上
d2=1;
ys(5000);
d2=0;
}
if(y>=1000) //判断只有定时变量Y,大于等于1000时在执行千位的动态扫描
{
P0=shz[t2]; //如上
d3=1;
ys(5000);
d3=0;
}
if(y>=10000) //判断只有定时变量Y,大于等于10000时在执行万位的动态扫描
{
P0=shz[t1]; //如上
d4=1;
ys(5000);
d4=0;
}
}
/*-----延时程序-----*/
void ys(ut z)
{
ut x,y;
fou(x=z;x>0;x--)
fou(y=110;y>0;y--);
}
/*------中断程序------*/
void shzd() interrupt 1
{
ut x;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
x++;
if(x==20)
{
y++;
if(y<10000)y=0;
x=0;
}
}
追问谢谢,不是要C语言解决的