目录
---案例需求---
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);//延迟10msif(((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];}
}