历史上的今天
今天是:2025年10月09日(星期四)
2022年10月09日 | 89C52单片机静态数码管的显示,动态数码管显示
2022-10-09 来源:csdn
1.简介
就是用单片机控制点亮上面的灯,显示对应数字

2、理论介绍
1)我么们先看一下电路图



1)我们可以看到 控制数码管的连接方式是
P0 口 连接 锁存器 ,通过锁存器 再控制数码管上灯亮
2)锁存器U8 通过 LE 脚 高低电平 来控制WE1~WE8 引脚的电平和P0口是否保持一致。进而控制8个数码管中的哪一个数码管可以亮或者灭
3)锁存器U9 通过 LE 脚 高低电平 来控制A~H 引脚的电平和P0口是否保持一致。进而控制一个数码管里面哪个字段可以亮或者灭从而形成数字

3.示例展示
下面我们就让第四个数码管显示1来展示
#include sbit U8 = P2^7; //U8 锁存器LE 端口,用于控制哪一个数码管 sbit U9 = P2^6;// U9 锁存器LE端口,用于控制数码上数字显示 void main(){ //控制哪一个数码管亮 U8 = 1;//锁存器 高电平,则表示 允许U8锁存器输出端和输入端电平一样 P0 = 0xf7; //1111 0111 我们想第四个数码管亮,第四位置为低电平 U8 = 0; //锁存器 低电平 ,表示 即使 输入端电平改变,输出端也不改变 //控制数码管显示什么数字 U9 = 1; P0 =0x06; //0000 0110 显示1 则数码管 bc 段位 显示高电位,其余都是0 U9 = 0; while(1){ ; } } 4、实物展示 但是 这个数码管会每隔几秒闪一下,到现在不知为什么? 5.动态数码管显示 动态数码管就是让人感觉多个数码管一起亮 动态数码管显示和静态基本类似 就是多个数码管切换的过程,利用人的视觉效果差,来感觉数码管是一起亮的 //数码管动态显示12345678 #include #define uchar unsigned char//宏定义 #define uint unsigned int //宏定义 sbit we = P2^7; //位定义数码管位选锁存器接口 sbit du = P2^6; //位定义数码管段选锁存器接口 //数码管段选表 uchar code leddata[]={ 0x3F, //"0" 0x06, //"1" 0x5B, //"2" 0x4F, //"3" 0x66, //"4" 0x6D, //"5" 0x7D, //"6" 0x07, //"7" 0x7F, //"8" 0x6F, //"9" 0x77, //"A" 0x7C, //"B" 0x39, //"C" 0x5E, //"D" 0x79, //"E" 0x71, //"F" 0x76, //"H" 0x38, //"L" 0x37, //"n" 0x3E, //"u" 0x73, //"P" 0x5C, //"o" 0x40, //"-" 0x00, //熄灭 0x00 //自定义 }; //毫秒级延时函数 void delay(uint z) { uint x,y; for(x = z; x > 0; x--) for(y = 114; y > 0 ; y--); } void main() { while(1) { //第一位数码管显示1 P0 = 0xfe;//1111 1110 第一位数码管显示,注意数码管的排序,P0.0对应连接的是左边第一位数码管 we = 1;//打开位选 we = 0; //关闭位选 P0 = leddata[1]; du = 1; //打开段选 du = 0; //关闭段选 delay(2);//延时 //第二位数码管显示2 P0 = 0xfd;//1111 1101 只选通第二位数码管 we = 1; //打开位选 we = 0; //关闭位选 P0 = leddata[2]; //显示2 du = 1;//打开段选 du = 0; //关闭段选 delay(2);//延时 //第三位数码管显示3 P0 = 0xfb;// 1111 1011只选通第三位数码管 we = 1; //打开位选 we = 0; //关闭位选 P0 = leddata[3]; //显示3 du = 1;//打开段选 du = 0; //关闭段选 delay(2);//延时 P0 = 0xf7;//1111 0111 只选通第四位数码管 we = 1; //打开位选 we = 0; //关闭位选 P0 = leddata[4]; //显示4 du = 1;//打开段选 du = 0; //关闭段选 delay(2);//延时 P0 = 0xef;//1110 1111 只选通第五位数码管 we = 1; //打开位选 we = 0; //关闭位选 P0 = leddata[5]; //显示5 du = 1;//打开段选 du = 0; //关闭段选 delay(2);//延时 P0 = 0xdf;//1101 1111 只选通第六位数码管 we = 1; //打开位选 we = 0; //关闭位选 P0 = leddata[6]; //显示6 du = 1;//打开段选 du = 0; //关闭段选 delay(2);//延时 we = 1; //打开位选 P0 = 0xbf;//1011 1111 只选通第七位数码管 we = 0; //关闭位选 P0 = leddata[7]; //显示7 du = 1;//打开段选 du = 0; //关闭段选 delay(2);//延时 P0 = 0x7f;//0111 1111 只选通第八位数码管 we = 1; //打开位选 we = 0; //关闭位选 P0 = leddata[8]; //显示8 du = 1;//打开段选 du = 0; //关闭段选 delay(2);//延时 } } 我们可以看到所有数码管都是通过P0口来控制,利用程序执行的速度和人视觉差来实现的。 其实这里面的灯是一个一个亮起来的
上一篇:89C52单片机 蜂鸣器的实现
下一篇:89C52单片机 独立按键 示例
史海拾趣
|
[經典資源分享]各大公司電子類招聘題目精選 類比電路 1、基爾霍夫定理的內容是什麼?(仕蘭微電子) 2、平板電容公式(C=εS/4πkd)。(未知) 3、最基本的如三極管曲線特性。(未知) 4、描述回饋電路的概念,列舉他們的應用。(仕蘭微電子) ...… 查看全部问答> |
|
C-Source Code Generated AssemblyMemory Instruction// Enable only 2801 Peripheral Clocksunion PCLKCR0_REG shadowPCLKCR0;EALLOW; 3F82A7 EALLOWshadowPCLKCR0.bit.rsvd1 = 0; 3F82A8 MOV @AL,#0x47D8shadowPCLKCR0.bit.TBCLKSYNC = 0; 3F82AA ...… 查看全部问答> |
|
KernelIoControl找设备号的问题 if(!KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR,&g_Irq,sizeof(UINT32),&g_SysIntr,sizeof(UINT32),NULL)) { RETAILMSG(1,TEXT(\"ERROR:Failed to request sys ...… 查看全部问答> |
|
GPIO寄存器的读写方法。不过我看了还是很多疑惑,为什么在内存映射表里面这样定义 DCD 0x91600000, 0x56000000, 1 ; I/O Port register 而在s2410.h中又会这样#define IOP_BASE 0xB1600000 // 0x ...… 查看全部问答> |
|
驱动设计四挑战 由于LED在原器件的物理特性差异,制作光源系统的观念则与传统设计大不相同,需要有更多方面的技术与专业辅助。 1.电源转换:LED原器件若非特殊制作方式,一般都是直流驱动 ...… 查看全部问答> |
|
锂电池广泛使用,连环保汽车使用的都是锂电池。现在的锂电池电充管理也成了一门学问。这里跟大家汇报一下我们解剖HC4054充电IC的情况。 为了延长锂电池的使用寿命。锂电池充电都遵守如下军规: 1、单节锂电池小于2.5V时,用小电流充电(俗称的涓 ...… 查看全部问答> |
|
本帖最后由 paulhyde 于 2014-9-15 09:29 编辑 在竞赛版块看到不少黄智伟老师一系列的帖子。。非常给力。。。期待黄智伟老师根据2011年器件清单分析分析。。。 … 查看全部问答> |
|
配置好IP和MAC后,直接运行例程的程序,液晶屏上根本不显示IP,加入断点后,发现调试根本没有执行到断点这句,想问下,程序中是不是要自己修改下才行? 如果要修改,是修改哪一块呢?是第二个断点那部分的IP和子网掩码吗? 串口显示: 执 ...… 查看全部问答> |




