编制程序使得7段码从0显示至f_静、动态数码管动态显示

本文介绍了7段数码管的静态和动态显示原理,包括静态显示占用CPU时间少、硬件复杂,动态显示利用人眼视觉暂留效果节省硬件资源但亮度略低。随后提供了分别实现静态显示0和动态扫描显示0-7的单片机C语言程序代码,涉及位选控制和延时函数的使用。
摘要由CSDN通过智能技术生成

1. 数码管静态、动态显示原理7ebdf0dc072aa1def90cf2e21947c268.png

       静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。这种方法的优点是占用CPU时间少,显示便于监测和控制。缺点是硬件电路比较复杂,成本较高

       动态显示的特点是将所有数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的电阻阻值

2.原理图

ff5f9aa2f60bfc7ef634630c3343efe1.png

5b2a2c90ec2767ecb8d9ac1be0cbdc6c.png

3. 静、动态数码管程序

           一、实现现象:下载程序后数码管静态显示0。

#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16;  //对数据类型进行声明定义

typedef unsigned char u8;

sbit LSA=P2^2;

sbit LSB=P2^3;

sbit LSC=P2^4;

u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值

/*******************************************************************************

* 函 数 名       : main

* 函数功能 : 主函数

* 输    入       : 无

* 输    出     : 无

*******************************************************************************/

void main()

{

LSA=0;

LSB=0;

LSC=0;//控制38译码器的Y0输出低电平

P0=smgduan[1];

LSA=1;

LSB=0;

LSC=0;//控制38译码器的Y0输出低电平

P0=smgduan[1];

while(1);

}

    二 、实现现象:下载程序后数码管从右至左显示0-7。

#include "reg52.h" 

typedef unsigned int u16;  //对数据类型进行声明定义

typedef unsigned char u8;

sbit LSA=P2^2;

sbit LSB=P2^3;

sbit LSC=P2^4;

u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值

/*************************************

* 函 数 名      : delay

* 函数功能    : 延时函数,i=1时,大约延时10us

************************************/

void delay(u16 i)

{

while(i--);

}

/*************************************

* 函 数 名       : DigDisplay

* 函数功能     : 数码管动态扫描函数,循环扫描8个数码管显示

*************************************/

void DigDisplay()

{

   u8 i;

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

{

    switch(i) //位选,选择点亮的数码管,

{

 case(0):

LSA=0;LSB=0;LSC=0; break;//显示第0位

 case(1):

LSA=1;LSB=0;LSC=0; break;//显示第1位

case(2):

LSA=0;LSB=1;LSC=0; break;//显示第2位

case(3):

LSA=1;LSB=1;LSC=0; break;//显示第3位

case(4):

LSA=0;LSB=0;LSC=1; break;//显示第4位

case(5):

LSA=1;LSB=0;LSC=1; break;//显示第5位

case(6):

LSA=0;LSB=1;LSC=1; break;//显示第6位

case(7):

LSA=1;LSB=1;LSC=1; break;//显示第7位

}

P0=smgduan[i];//发送段码

delay(100); //间隔一段时间扫描

P0=0x00;//消隐

}

}

/*********************************************************

* 函 数 名       : main

* 函数功能      : 主函数

* 输    入        : 无

* 输    出        : 无

***********************************************************/

void main()

{

while(1)

{

DigDisplay();  //数码管显示函数

}

}

---基于普中科技51单片机开发板 普中科技51单片机开发板
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值