单片机 > 单片机程序设计 > 详情

51单片机之动态数码管的实现

发布时间:2024-03-29 发布时间:
|

1.为什么是动态的?


1.采用了发光管的余晖和人眼的视觉暂留效应,使人看到好像各位数码管都在同时显示


2.特点:


1.同样是利用了138译码器对高低电平进行操作


2. 动态显示将所有的数码管的段选线并联,采用循环的方式对每一位进行操作


3.关于138译码器


输出高低电频是有着一定规律的


如果是110(LSA,LSB,LSC),则为L3为低电平;(反向二进制)


同时,要注意看真值表(X为任意值,L为低电平,H为高电平)

4.关于怎样实现动态的具体操作


1.使用数组来时数码管实现输出数字


2.使用for循环来时函数进行循环操作


3.使用switch case函数实现不同字段的选择


4.同时使用delay()函数和最后对P0值刷新进行消影处理


#include

typedef unsigned char u8;

typedef unsigned int u16;

//138译码器

sbit LSA=P2^2;

sbit LSB=P2^3;

sbit LSC=P2^4;

u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x77,0x7c,0x39,0x5e,0x79,0x71};

//书写子函数

void delay(u16 i)

{

while(i--);

}

void Digdisplay() //显示0到7

{

u8 i;

for(i=0;i<8;i++)

{

switch(i)

{

case 0:

LSA=0;LSB=0;LSC=0;break;

case 1:

LSA=1;LSB=0;LSC=0;break;

case 2:

LSA=0;LSB=1;LSC=0;break;

case 3:

LSA=1;LSB=1;LSC=0;break;

case 4:

LSA=0;LSB=0;LSC=1;break;

case 5:

LSA=1;LSB=0;LSC=1;break;

case 6:

LSA=0;LSB=1;LSC=1;break;

case 7:

LSA=1;LSB=1;LSC=1;break;

}

//发送字码

P0=smgduan[i];

//延时

delay(100);

//进行消影处理,防止重影

P0=0X00;

}

}

void main()

{

while(1)

{

Digdisplay();

}

}


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM JTAG 调试原理