首页 > 其他 > 详细

单片机学习---数码管

时间:2020-05-05 15:25:54      阅读:83      评论:0      收藏:0      [点我收藏+]

声明:1、我使用的STC89C52单片机

   2、使用74HC573来做数码管锁存器,一次操控2个4位数码管。

   3、数码管为8位共阴极数码管


 

数码管原理图:

      共阳极:LED显示管的发光二极管的所有阳极连接在一起

      共阴极:LED 显示管的发光二极管的所有共阴极连接在一起

  

 技术分享图片

 

  要显示什么字符只需要通过点亮相应的LED灯就即可。


 

74HC573锁存器介绍:  就是把数据输入和输出隔离

                                看开发文档手册技术分享图片

 

 因为手册是英文版的。我也是机器翻译的看。所以这里只总结一下它的用法:

                输出口Q想要输出高低电平OE脚必须接地; LE脚为高电平时,输出Q随输入D的变化而变化

                LE 脚为低电平时,输出Q不随输入D的变化而变化。 输入D不会改变Q的值。

总结表:技术分享图片

 

 


 代码写起来就很简单了:

 1 /*利用数码管显示一个3位数*/
 2 #include <reg52.h>  //引入51头文件
 3 #include <intrins.h>    //引入循环库
 4 
 5 #define uchar unsigned char
 6 #define uint unsigned int
 7 
 8 sbit DU = P2^6;   //数码管段选       为1时锁存器输出端跟随输入端变化 反之亦然
 9 sbit WE = P2^7;   //数码管位选
10 /*共阴极数码管的段选表  code存放到rom区*/
11 uchar code table [] = {0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F}; //0123456789 的16进制
12 
13 void delay(uint z);
14 void display(uchar i);   //函数声明
15 /*主函数*/
16 void main()
17 {
18     while(1)
19     {
20         display(250);
21     }
22 
23 }
24 /*ms级延迟函数*/
25 void delay(uint z)
26 {
27      uint x,y;
28     for(x = z; x>0; x--)
29         for(y = 144; y>0 ; y--);
30 }
31 /*显示函数*/
32 void display(uint i)
33 {
34         uint bai,shi,ge;  //代表百十个
35         bai = i/100;
36         shi = i % 100 / 10;
37         ge = i % 10 ;
38         /*第一位数码管*/
39            P0 =0XFF;  //清除段码
40         WE = 1;      //打开位选锁存器
41         P0 = 0XFE;     // 1111 1110
42         WE = 0;   //锁存数据
43     
44         DU = 1;       //打开段选锁存器
45         P0 = table[bai];         
46         DU = 0;       // 锁存数据
47         delay(5);      //延迟 5 毫秒
48         /*第二位数码管*/
49         P0 = 0XFF;
50         WE = 1;      //打开位选锁存器
51         P0 = 0XFD;        // 1111 1101
52         WE = 0;   //锁存数据
53     
54         DU = 1;       //打开段选锁存器
55         P0 = table[shi];    
56         DU = 0;       // 锁存数据
57         delay(5);
58         /*第三位数码管*/
59         P0 = 0XFF;
60         WE = 1;      //打开位选锁存器
61         P0 = 0XFB;        //1111 1011
62         WE = 0;   //锁存数据
63     
64         DU = 1;       //打开段选锁存器
65         P0 = table[ge];       
66         DU = 0;       // 锁存数据
67         delay(5);
68 }

 

             

    

单片机学习---数码管

原文:https://www.cnblogs.com/mengnan-konghai/p/12830448.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!