微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 138译码器动态显示1-100

138译码器动态显示1-100

时间:10-02 整理:3721RD 点击:
我用138译码器动态显示1-100,结果只是显示三个零,代码如下。请多指教【抱拳】
#include"reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
u8 temp,bai,shi,ge,a;
sbit LSA=P2^2;                //138译码器三个输入口
sbit LSB=P2^3;
sbit LSC=P2^4;
u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
      0x7d,0x07,0x7f,0x6f,0x77,0x7c,
      0x39,0x5e,0x79,0x71};
void init();                      //初始化函数
void display(u8 bai,u8 shi,u8 ge);
void delay(u16 z);
void main()
{
init();
while(1)
{
  if(a==20)
  {
   a=0;
  temp++;
   if(temp==100)
    temp=0;
   bai=temp/100;
   shi=temp%100/10;
   ge=temp%10;
  }
  display(bai,shi,ge);
}
}
void init()                    //初始化函数
{
temp=0;
a=0;
bai=0;
shi=0;
ge=0;
TMOD=0x01;
TH0=(25535-50000)/256;
TL0=(25535-50000)%256;
ET0=1;
EA=1;
TR0=1;
}
void display(u8 bai,u8 shi,u8 ge)      //显示函数
{
LSA=0;
LSB=0;
LSC=0;
P0=smgduan[ge];
delay(1);
//P0=0x00;
LSA=1;
LSB=0;
LSC=0;
P0=smgduan[shi];
delay(1);
//P0=0x00;
LSA=0;
LSB=1;
LSC=0;
P0=smgduan[bai];
delay(1);
//P0=0x00;
}
void delay(u16 z)                           //延时函数
{
u16 x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}
void Timer0() interrupt 0              //中断函数
{
TH0=(25535-50000)/256;
TL0=(25535-50000)%256;
a++;
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top