历史上的今天
今天是:2024年10月29日(星期二)
2021年10月29日 | 让51单片机八段数码管亮起来
2021-10-29 来源:eefocus
一、八段数码管基础部分
1.八段数码管的共阴极和共阳极
一个八段数码管由八段二极管组成即a,b,c,d,e,f,g,dop(点),共八段。其中数码管分两种,共阴极和共阳极(共阳极:数码管的阳极全部接在一起,低电平点亮它,如果是共阳极,低电平点亮它。)

2.八段数码管的位码和段码
一般四位数码管,有四个引脚控制选取哪一位数码管(位选),还有8位段选是公用的,就是当位选为第一位时,段选码只对第一位点亮那些段有关,同理选中第二个位时,段码只对第二位有效,依此类推。。。 一般硬件结构确定后,就会出现段码位码的说法。比如说四个位选引脚分别连接单片机p2.2 2.3 2.4 (这三个口分别是74HC138译码器端口),发光管是共阴 那么第一位的位码是xxxx1110;第二位是xxxx1101;第三位是xxxx1011;第四位是xxxx0111;这样我在显示时,如果显示第一位数据,则往p2口送xxxx1110,再送第一位的段码。
二、八段数码管动态显示
所谓静态显示,就是每一个数码管的段码都要独占具有锁存功能的输出口,CPU把要显示的字码送到输出口上,就可以使数码管显示对应的字符,直到下一次送出另一个字码之前,显示的内容一直不会消失。动态显示有显示稳定、亮度大、节约CPU时间等优点,但占有I/O口较多,硬件成本高。
1.八个八段数码管动态扫描0到7流水显示
#include #define uchar unsigned char #define uint unsigned int sbit LSA=P2^2; //74HC138译码器端口 sbit LSB=P2^3; sbit LSC=P2^4; //共阳数码管编码表 uchar code table1[] ={0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e}; //共阴数码管编码表 uchar code table2[] ={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; //延时 void DelayMS(uint x) { uchar t; while(x--) for(t=0;t<120;t++); } //主程序 void main() { uchar i; while(1) { for(i=0;i<8;i++) { P0=0xff; LSA=0;LSB=0;LSC=0; P0=table2[0]; DelayMS(100); LSA=1;LSB=0;LSC=0; P0=table2[1]; DelayMS(100); LSA=0;LSB=1;LSC=0; P0=table2[2]; DelayMS(100); LSA=1;LSB=1;LSC=0; P0=table2[3]; DelayMS(100); LSA=0;LSB=0;LSC=1; P0=table2[4]; DelayMS(100); LSA=1;LSB=0;LSC=1; P0=table2[5]; DelayMS(100); LSA=0;LSB=1;LSC=1; P0=table2[6]; DelayMS(100); LSA=1;LSB=1;LSC=1; P0=table2[7]; DelayMS(100); } } } 2.八个八段数码管动态扫描0到7常亮显示 #include typedef unsigned int uint; typedef unsigned char uchar; sbit LSA=P2^2; //74HC138译码器端口 sbit LSB=P2^3; sbit LSC=P2^4; uchar out[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void delay(uint num) { while(num--); } void display() { uint 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=out[i];//发送段码 delay(100); //间隔一段时间扫描 P0=0x00;//消隐 } } void main() { while(1) { display(); } } 三、八段数码管静态显示 动态显示就是把所有显示器的8个段码中的A-dp的各个相同段连接在一起,接到一个公共的输出口上,而数码管的位端分别接在另外的输出口上,通过这两个输出口的两组信号相互作用来产生显示效果。即让各位数码管按照一定顺序轮流显示,只要扫描频率足够高,由于人眼的“视觉暂留”现象,就能连续稳定地显示。动态显示能显著降低显示部分成本,大大减少显示接口的连线结构。 1.一个数码管的静态显示0到9 #include #define uchar unsigned char #define uint unsigned int //共阳数码管编码表 uchar code table1[] ={0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e}; //共阴数码管编码表 uchar code table2[] ={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; //延时 void DelayMS(uint x) { uchar t; while(x--) for(t=0;t<120;t++); } //主程序 void main() { uchar i=0; P0=0x3f; for(; i < 10; ++i) { P0 = table2[i]; if(i == 9) i = 0; DelayMS(300); } while(1); }
上一篇:学习笔记之51单片机键盘篇
下一篇:51单片机用三种方法实现流水灯
史海拾趣
|
来此请教一个问题,由于以前很少接触硬件驱动的编写,甚至都没有做过单片机开发,最近却被迫要在Linux下面的无线网卡驱动里面做一些东西,遇到了很多的不可理解的地方,请教一下牛人。 在驱动中,有好多的程序找不到他的定义之处,在Linux内核中也 ...… 查看全部问答> |
|
我的系统是XP+SP2 首先安装的是MSASYNC安装上去了 但是接着安装EVC++4.0没有安装成功,就没有接着装EVC了,装了PB5.0但是再装EVC的时候始终都装不上了,系统一直提示VIRTUAL PC/WINDOWS CE ...… 查看全部问答> |
|
MIFARE4Mobile行业集团今天宣布了针对MIFARE4Mobile规格的新发展计划 MIFARE4Mobile行业集团今天宣布了针对MIFARE4Mobile规格的新发展计划。包括恩智浦在内专注#NFC#技术领域的7家公司将合作支持下一代2.0版本MIFARE4Mobile规格,包括新的特性及技术。http://www.mifare.net/products/mifare4mobile1/mifare4mobile/… 查看全部问答> |
|
msp430单片机18B20测温程序 #include \"msp430x22x4.h\" typedef unsigned char uchar; typedef unsigned int uint; #define DQ1 P2OUT |= BIT4 #define DQ0 P2OUT &= ~BIT4 #define DQ_in P2DIR &= ~BIT4 #define DQ_o ...… 查看全部问答> |
|
很多国内的筒子对铁电存储/FRAM、FRAM MCU依然知之胜少,经常被问到一些基础的问题。 这也难怪,毕竟FRAM以前还是个冷僻的技术,而这几年随着智能三表、物联网以及工业传感网络的快速增长,FRAM存储器以及FRAM微控制器的应用越来越多。这里顺便分 ...… 查看全部问答> |
|
Cadence IC610在CIW中新建schematics出警告,求解决 环境:红帽 Enterprise 5 Cadence IC: ic610 这个软件的安装了很久,现在应用上有一点小问题: 1. $cdsdoc -test,测试是没有问题的,直接$cdsdoc也是没有问题的,但是进入cdsdoc对话框之后,要打开一项对应的*.html时, 下载 (417.08 KB) 4 ...… 查看全部问答> |
|
自从考研复试结束以后,就开始了俺的毕业设计了。这个题目说实话,想做出来简单,想做好比较难。好了,言归正传,开始说说设计思路吧。 硬件方案如下: 1.主控制器采用ST公司 ...… 查看全部问答> |




