问题
单片机AT89C51的P2口外接一4×4矩阵键盘,P1口外接两位LED数码管。编写键盘扫
描程序和显示程序。实现功能如下:按下某按键时,数码管上显示该键对应的键值0
~15。如果连续第二次按下该键,则数码管显示的数值为该键值加3
在单片机系统中,LED数码管的显示程序根据实际需要分为静态显示和动态显示两种方式。
所谓静态显示,是当数码管显示某个字符时,公共端接固定电平,相应段的发光二极管恒定地导通或截止,直到显示另一个字符为止。 采用数码管静态显示方式,单片机显示程序比较简单,数码管显示亮度稳定。但因为每一个数码管都需要一个8位的端口来控制,占用资源较多,一般适用于显示位数较少的场合。
当单片机系统显示的数据位数较多时,通常采用动态显示方式。
所谓动态显示方式,是将所有数码管的段选线并联在一起,由一个8位I/O口控制。而公共端分别由不同的I/O线控制,通过程序实现各位的分时选通。在多位LED显示时,动态显示方式能够简化电路,降低成本 。

位选端决定每个数码管的显示,通过人眼难以察觉的显示先后,来实现同时显示。

#include<reg52.h>
unsigned int i,j;
unsigned char buf[2],n=-1,m=0xff;
unsigned char code discodey[12]={
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
void delay(){

最低0.47元/天 解锁文章





