给力,经过改进可以正常跑了,而且8个管显示都正常
- /*-----------------------------------------------
- 名称:8位数码管动态扫描显示变化数据
- 内容:8位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值
- ------------------------------------------------*/
- #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
- #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
- sbit DUAN=P2^6;//定义锁存使能端口 段锁存
- sbit WEI=P2^7;// 位锁存
- /***********************************
- 数码管码表
- ***********************************/
- unsigned char code LedDuan[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //LED段码
- /*****该程序位码表没有使用*****
- unsigned char code LedWei[10]={
- 0xfe, //0 第1位---从右侧开始
- 0xfd, //1 第2位
- 0xfb, //2 第3位
- 0xf7, //3 第4位
- 0xef, //4 第5位
- 0xdf, //5 第6位
- 0xbf, //6 第7位
- 0x7f, //7 第8位
- };
- ***************************/
- unsigned char Temp[8]; //临时数组,用于显示函数
- void Display(A,B,C,D,E,F,G,H); //显示函数
- /*****************************
- 延时函数
- *****************************/
- void delay(unsigned int t)
- {
- unsigned int i,j;
- for(i = 0; i < t; i++)
- for(j = 0; j < 125; j++);
- }
- /***********************************
- 主函数
- ***********************************/
- void main(void){
- unsigned char num=0,t=0;
- unsigned int i=0;
- //unsigned int a,b,c,d,e,f,g,h;
- while(1){
- if(t==80){ //用于延时一段时间显示,类似延时函数,
- i++;
- t=0;
- }
- if(Temp[0]==9){ //判断数码管是不是跑到 99999999 ,如果是,重新计数
- i=0;
- }
- t++;
- //数码管断码分离计算
- Temp[0]=i/10000000;
- Temp[1]=i/1000000%10;
- Temp[2]=i/100000%10;
- Temp[3]=i/10000%10;
- Temp[4]=i/1000%10;
- Temp[5]=i/100%10;
- Temp[6]=i/10%10;
- Temp[7]=i%10;
- //显示函数
- Display(Temp[0],Temp[1],Temp[2],Temp[3],Temp[4],Temp[5],Temp[6],Temp[7]);
- }
- }
- /*******************************
- 显示函数:
- 8个参数分别对应8个数码管
- *******************************/
- void Display(A,B,C,D,E,F,G,H){
- //打开第一位
- DUAN=1;
- DataPort=LedDuan[A];
- DUAN=0;
-
- WEI=1;
- DataPort=0xfe;
- WEI=0;
- delay(1);
- //打开第二位
- DUAN=1;
- DataPort=LedDuan[B];
- DUAN=0;
- WEI=1;
- DataPort=0xfd;
- WEI=0;
- delay(1);
- //打开第三位
- DUAN=1;
- DataPort=LedDuan[C];
- DUAN=0;
- WEI=1;
- DataPort=0xfb;
- WEI=0;
- delay(1);
- //第四位
- DUAN=1;
- DataPort=LedDuan[D];
- DUAN=0;
-
- WEI=1;
- DataPort=0xf7;
- WEI=0;
- delay(1);
- //第五位
- DUAN=1;
- DataPort=LedDuan[E];
- DUAN=0;
-
- WEI=1;
- DataPort=0xef;
- WEI=0;
- delay(1);
- //第六位
- DUAN=1;
- DataPort=LedDuan[F];
- DUAN=0;
-
- WEI=1;
- DataPort=0xdf;
- WEI=0;
- delay(1);
- //第七位
- DUAN=1;
- DataPort=LedDuan[G];
- DUAN=0;
-
- WEI=1;
- DataPort=0xbf;
- WEI=0;
- delay(1);
- //第八位
- DUAN=1;
- DataPort=LedDuan[H];
- DUAN=0;
- WEI=1;
- DataPort=0x7f;
- WEI=0;
- delay(1);
- }
复制代码
|