怎么才能让数码管动态显示1-100呢?

2019-07-15 12:41发布

单片机中如果我用138译码器来点亮数码管怎么才能让数码管动态显示1-100呢???求大神帮助,初学者,还请理解。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
houjue
2019-07-15 19:10
本帖最后由 houjue 于 2016-11-3 11:24 编辑

这个问题我貌似说过呀,发你个阉割版的源程序吧。

//数码管动态显示+1,显示范围0-100,定时时间1s
#include
sbit dula=P2^6;  //定义段选信号
sbit wela=P2^7; //定义位选信号
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
void delay(uint z);    //延迟函数声明
void display(uchar bai,uchar shi,uchar ge);  //显示函数声明
void init();   //初始化函数声明
void main()
{
  init();  //调用初始化子函数
  while(1)
  {  
    if(aa==20)        //判断定时是否到达1s
    {
        aa=0;  
        temp++ ;  
        if(temp==100)        //限制temp变化的范围,使之不超过100
        {
           temp=0;
        }
    }
bai=temp/100;
shi=temp%100/10;
ge=temp%10;           //分离百位、十位和个位
display(bai,shi,ge); //调用显示子函数
  }
}
void delay(uint z)  //延迟子函数
{
         uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display(uchar bai,uchar shi,uchar ge)        //显示子函数
{
wela=1;         //位选通百位   
P0=0x01;
wela=0;
dula=1;
P0=table[bai];
dula=0;         //取百位的数字显示!
delay(2);

wela=1;
P0=0x02;
wela=0;          //选择第二个数码管显示
dula=1;
P0=table[shi];
dula=0;          //取十位的数字显示
delay(2);

wela=1;
P0=0x04;
wela=0;         //选择第三个数码管显示
dula=1;
P0=table[ge];
dula=0;          //取个位的数字显示
delay(2);
}
void init() //初始化子函数
{
dula=0;
wela=0;
temp=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void timer0() interrupt 1   //中断处理子函数
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;        //重载初值
aa++;
}

一周热门 更多>