51单片机 数码管的显示与译码器

共阳极数组0~9:display[]={0xC0,0xF9,0xA4,0xB0,0x91,0xA2,0x82,0xF8,0x80,0x90}

共阳极数组A~F:display[]={0x88,0x83,0xA6,0xC1,0x86,0x8E}

共阴极数组0~9:display[]={0x3F,0x06,0x5B,0x4F,0x6E,0x6D,0x7D,0x07,0x7F,0x6F}

共阴极数组A~F:display[]={0x77,0x7C,0x59,0x3E,0x79,0x71}

共阴、两组四位一体数码管,位选接74LS138译码器,输入(位选)CBA接P20,P21,P22。段选通过74573后接P1口。

若不使用译码器,可直接将位选段接IO口,赋值改变。

 1 /*******************************************************************************
 2 * 实 验 名         : 动态数码管显示
 3 * 实验说明         : 8位数码管依次显示0~7
 4 * 作    者         : L2
 5 * 时    间         : 2016-08-02
 6
 7 *******************************************************************************/
 8 #include<reg51.h>
 9
10 #define GPIO_DIG P1         //Digitron  数码管
11 sbit LSA= P2^0;
12 sbit LSB= P2^1;
13 sbit LSC= P2^2;
14
15 unsigned char code DIG_CODE[10]={
16 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};  //0~9的显示码
17 void DigDisplay();
18
19 void main(void)
20 {
21     while(1)
22         DigDisplay();
23 }
24
25
26 void DigDisplay()
27 {
28     unsigned char i;
29     unsigned int j;
30     for(i=0;i<8;i++)
31     {
32         switch(i)     //位选,选择点亮的数码管,
33         {
34             case(0):
35                 LSA=0;LSB=0;LSC=0; break;//显示第0位
36             case(1):
37                 LSA=1;LSB=0;LSC=0; break;//显示第1位
38             case(2):
39                 LSA=0;LSB=1;LSC=0; break;//显示第2位
40             case(3):
41                 LSA=1;LSB=1;LSC=0; break;//显示第3位
42             case(4):
43                 LSA=0;LSB=0;LSC=1; break;//显示第4位
44             case(5):
45                 LSA=1;LSB=0;LSC=1; break;//显示第5位
46             case(6):
47                 LSA=0;LSB=1;LSC=1; break;//显示第6位
48             case(7):
49                 LSA=1;LSB=1;LSC=1; break;//显示第7位
50         }
51         GPIO_DIG=DIG_CODE[i];//发送段码
52         j=10000;                         //扫描间隔时间设定,若减少j,可观察到稳定显示的0~7 (扫描速度太快,人眼识别不了)
53         while(j--);
54         GPIO_DIG=0x00;//消隐
55     }
56 }
 1 /*******************************************************************************
 2 * 实 验 名         : 数码管秒表显示
 3 * 实验说明         : 0~59依次显示
 4 * 作    者         : L2
 5 * 时    间         : 2016-08-03
 6
 7 *******************************************************************************/
 8 #include<reg51.h>
 9
10 #define GPIO_DIG P1         //Digitron  数码管
11 #define uchar unsigned char
12 #define uint unsigned int
13 sbit LSA= P2^0;
14 sbit LSB= P2^1;
15 sbit LSC= P2^2;
16
17 uchar shi,ge,num1=0,num=0;
18 uchar code DIG_CODE[10]={
19 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};  //0~9的显示码
20 void Delay5ms();
21 void DigDisplay(uchar shi,uchar ge);
22
23
24 void main()
25 {                                                //200微秒@20MHz
26     TMOD = 0x01;        //设置定时器模式
27     TL0 = 0xA8;        //设置定时初值
28     TH0 = 0xFD;    //设置定时初值
29     EA = 1;         // 开总中断
30     TF0 = 0;        //清除TF0标志
31     ET0 = 1;        // 开定时器0中断
32     TR0 = 1;        //定时器0开始计时
33     while(1)
34     {
35         DigDisplay(shi,ge);
36     }
37 }
38
39 void DigDisplay(uchar shi,uchar ge)
40 {
41     GPIO_DIG=DIG_CODE[shi];        //段选
42     LSA=0;LSB=0;LSC=0;
43     Delay5ms();
44     GPIO_DIG=DIG_CODE[ge];
45     LSA=1;LSB=0;LSC=0;
46     Delay5ms();
47 }
48
49 void Timer0Init(void) interrupt 1
50 {
51     TL0 = 0xA8;        //重装初
52     TH0 = 0xFD;
53     num1++;
54     if(num1==200)         //5次200ms即为1s到
55     {
56          num1=0;
57          num++;
58          if(num==60)
59              num=0;
60          shi=num/10;
61          ge = num%10;
62     }
63 }
64
65
66 void Delay5ms()        //@12.000MHz
67 {
68     unsigned char i, j;
69
70     i = 59;
71     j = 90;
72     do
73     {
74         while (--j);
75     } while (--i);
76 }
时间: 2024-07-31 20:59:22

51单片机 数码管的显示与译码器的相关文章

基于51单片机的温度控制系统毕设

分享一下单片机毕设课程计参考资料33个,献给大四的朋友,毕业设计就不用愁了,如果有什么不懂的地方可以加群大家一起交流:813238832资料下载的地址:https://bbs.usoftchina.com/thread-208012-1-1.html 1.CDMA通信系统中的接入信道部分进行仿真与分析2.USB接口设计3.毕业设计(论文)OFDM通信系统基带数据4.电气工程系毕业设计开题报告5.电信运营商收入保障系统设计与实现6.基于51单片机的16×16点阵(滚动显示)7.基于51单片机的LE

一天:51单片机从入门到一个动态数码管显示数字控制

最近进的公司是一个做路由器的..很多嵌入式工程师.有个项目( 智能空调控制)是跟嵌入式工程师对接,我做APP+PHP..他做服务器.我们用MQTT(由于emqtt是用erlang写的,所以我也学了点erlang,后期有时间分享一下,这个语言很好,很强大.特别抽象).这个项目激发了我对嵌入式的兴趣,于是乎.开始从51单片机搞起了..所以就有了这篇文章...今天搞得东西挺多.我最近都是笔记形式,不想以前写的那么详细...因为学的东西太多,白天在公司搞项目,没时间写太具体... 今天学了什么呢? >k

51单片机第三弹---数码管显示

先把定义拉过来: LED数码管是由多个发光二极管封装在一起组成"8"字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极.LED数码管常用的段数一般为7段,有的另加一个小数点 .LED数码管根据LED的接法不同,分为共阴和共阳两类 . 贴原理图 其实就两点 :由于板子上有8个数码管,而每个数码管有8段,称选择显示哪一个数码管的东西为位选,称单个数码管显示数字几的东西为段选,位选由P2.2  p2.3 p2.4 控制 数码管IO口为P0 对于每一个数码管,显示数字几只要控制

[51单片机] EEPROM 24c02 + 数码管 + 中断 [统计开机次数]

>_<:24c02的SCL连P2.0;SDA连P2.1;WP接GND;P0接8位数码管的8针;P2.2连段码;P2.3连位码; >_<:delay.c 1 #include "delay.h" 2 /*------------------------------------------------ 3 uS延时函数,含有输入参数 unsigned char t,无返回值 4 unsigned char 是定义无符号字符变量,其值的范围是 5 0~255 这里使用

[51单片机] 以从0开始做4位8段共阴数码管3461AS驱动谈细节决定高质量DIY

目录 1)问题产生 2)失败尝试 3)最终方案 4)使用方法 5)知识共享 1)问题产生 在上一篇“以PWM控制直流电机为例建一个简单的51工程框架”中已向大家介绍了一个封装好的8位8段数码管的驱动(如下图中FUNC文件夹下led8.c文件). 但是该驱动电路是要有一定的硬件基础的(如下图):如2片74HC573.而我这里只有几个4位8段共阴数码管又没有74HC573,所以就得寻求用51直接驱动的方案了! 2)失败尝试 失败操作:直接在相应的引脚间加5伏电压来测试该数码管是否正常 结果:烧坏了2

51单片机实现对24C02进行页写、顺序读取并显示验证

源:51单片机实现对24C02进行页写.顺序读取并显示验证 //************************************************************************************* //**程序名称:51单片机实现对24C02进行页写.顺序读取并显示验证 //**编写人:**** //**修改人:**** //**程序目的:熟悉I2C总线协议,实现51模拟I2C时序和24C02通信 //**功能描述:51单片机将8个字节数据写入24C02的一

基于51单片机DS18B20测温LCD1602显示可设时设温调时的项目

一.前言 1.基于51单片机DS18B20测温LCD1602显示可设时设温调时的项目包括用Keil软件编写单片机C语言程序和用Proteus软件仿真单片机外围电路 2.基于51单片机DS18B20测温LCD1602显示可设时设温调时的项目构思 (1).声明程序变量思维导图 (2).程序子函数思维导图 (3).程序主函数思维导图 二.基于51单片机DS18B20测温LCD1602显示可设时设温调时的项目的Keil软件编写的单片机C语言程序 1 #include<reg52.h>//声明51单片机

51单片机:独立按键与矩阵按键控制数码管

一,独立按键注意一下几点 >按下的时候,电压被拉低,所以IO口要传低电平( 0x0 ) >按下的时候要消除抖动 ( 延时10ms ),在判断,是否还是低电平,再做业务处理 下面这段程序,就是通过一个独立按键连接到p1口,控制静态数码管的 一段 进行亮和灭的切换. #include <reg52.h> sbit key_control = P1^0; sbit led = P0^0; typedef unsigned char u8; typedef unsigned int u16

51单片机300个proteus仿真实例下载

51单片机300个proteus仿真实例下载,不仅有230个51单片机的proteus仿真实例,还有59个经典案例,50个经典电路制作实例,下面只是部分截图和资料,还有更多的proteus仿真/程序在闯客网可以找到,并且免费下载,有需要的朋友可以下载学习,还有技术交流群:613377058 下载链接:https://bbs.usoftchina.com/thread-201293-1-1.html 100000秒以内的计时程序.DSN 10秒的秒表 (2).DSN 10秒的秒表.DSN 1286