自学内容网 自学内容网

【C51】单片机与LED数码管的静态显示接口案例分析

目录

---案例需求---

1、电路设计

2、程序

3、元器件清单

4、程序仿真


LED数码管有静态显示和动态显示两种显示方式。静态显示是指无论有多少位LE数码管,其都同处于显示状态。数码管工作于静态显示方式时,各位的共阴极(或共阳极)连接在一起并接地(或接+5V);每位的段码线(a-db)分别与一个8位的I/O口锁存器输出相连。送往各LED数码管所显示字符的段码一经确定,则相应I/O口锁存器锁存的段码输出将维持不变,直到送入另一个字符的段码为止。所以,静态无法显示闪烁,亮度较高,软件控制比较容易,节约CPU的工作时间。缺点是占用I/O口比较多,硬件成本也高,因此适用于显示位数比较少的场合。

---案例需求---

共阳极数码管的段码接到单片机的P0口,P1.0引脚接一个按键,开始时数码管显示0,每按一次按键,数码管显示的数字加1,加到10,回到0。

1、电路设计

原理图,LED数码管为共阳极数码管,电阻RP1的作用为限流

电路的特点是使用P0口作为准I/O口,由于P0口内部是漏极开路的,因此需要接上拉电阻。其中P1.0引脚外接一个独立式按键用于产生计数信号,低电平有效。

2、程序

#include<reg51.h>
#define uchar unsigned char  //unsigned char无符号字型
sbit S1=P1^0;  //定义了一个特殊标志位(Sbit)S1,它关联到了P1口的第0位(也称为P1.0)
uchar code seg[]=//段码
  //定义了一个名为"seg"的无符号字符数组(uchar code)
  //它是一个常量数组,用于存储8086微处理器使用的段码
{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //0-9的段码
void delayms(uchar ms)
{
uchar i;
while(ms--)
for(i=0;i<123;i++);
}
uchar key_scan(void)  //按键扫描函数
{
static kp=0;
if((P1&0x01)!=0x01)  //读取P1.0引脚的值,判断是否为0,若为0,则有按键按下
{
delayms(10);//延迟10ms
if(((P1&0x01)!=0x01)&&(kp==0))
{
kp=1;
return 1; //S1按下
}
} 
else kp=0;
return 0;
}
void main(void)
{
uchar key_val;//定义键值变量
uchar num=0;//定义显示变量
while(1)
{
key_val=key_scan();//取键值
if(key_val==1)  //若按键按下,则处理按键对应的功能
{
if(++num==10)num=0;
}
P0=seg[num];
}
}

3、元器件清单

4、程序仿真


原文地址:https://blog.csdn.net/m0_71824048/article/details/143064210

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!