登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] 数码管静态及动态显示

[复制链接]
发表于 2023-1-30 20:41:51 | 显示全部楼层 |阅读模式
学习笔记
学习科目: C51单片机
学习安排: 数码管静态及动态显示
开始时间: 2023-01-30
结束时间:
数码管静态及动态显示

   



    先试着让一个数码管亮起来
    首先我们要知道,一个数码管有很多引脚,并且一般不单独使用。为了节省,我们使用三八译码器,三个端口就可以控制八个端口。
屏幕截图_20230130_193049.png                  
    规定是从高位到低位顺序为A2、A1、A0。比如赋值P22=0,P21=0,P20=0,000转化为十进制就是0,就接通到Y0端口,也就是第一个数码管。P22=0,P21=1,P20=1,转化为十进制就是3,就接通到Y3端口,也就是第四个数码管。
    已经选择了接通哪个数码管,接下来就该决定该让这个被选的怎么亮。以第一个为例。
                屏幕截图_20230130_193739.png                       屏幕截图_20230130_194412.png
    注意是共阳还是共阴的的数码管,共阳接通赋低电平,共阴赋高电平
    我们让他显示数字一,就要让b,c端口接通,对照原理图,为P01、P02赋0。a、d、e、f、g、dp口不显示,就为P00、P03、P04、P05、P06、P07赋1。
    代码如下:
  1. <font face="楷体, 楷体_GB2312" size="6">#include <STC12C5A60S2.H>

  2. void main ()
  3. {        P11=0;
  4.        
  5.        
  6.         P22=0;
  7.         P21=0;
  8.         P20=0;
  9.         P01=0;
  10.         P02=0;
  11.        
  12.        
  13.         P00=1;
  14.         P03=1;
  15.         P04=1;
  16.         P05=1;
  17.         P06=1;
  18.         P07=1;
  19.        
  20. while (1)
  21.    {
  22.    }
  23. }
  24. </font>
复制代码
    第一个数码管被点亮。
IMG_2595.JPG









    一个数目管显示数字已经做到,接下来就是多个数码管同时显示数字。
    因为电路原因,所有数码管输出端口都一起的,所以不可能同时让他们显示数字,不能既显示这个又显示那个。所以我写一个软件延迟代码,定义延迟函数。极短的延迟,人眼反应不过来,利用视觉暂留,做到人眼观察时接近同时显示。
    又因为端口过多,为了方便,我定义一个函数,采用switch case语句和数组选择数码管它显示的数字,显示数字时也可以使用switch case语句,但是数组更加方便,一到八直接就是0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x98。注意共阳归零为0xFF,共阴为0x00
  1. <font face="楷体, 楷体_GB2312" size="6">#include <STC12C5A60S2.H>
  2. #include <INTRINS.H>

  3. void Delay(unsigned int xms)       
  4. {
  5.         unsigned char i, j;

  6.         while(xms--)
  7.         {
  8.                
  9.                         _nop_();
  10.                         _nop_();
  11.                         i = 234;
  12.                         j = 114;
  13.                         do
  14.                         {
  15.                                 while (--j);
  16.                         } while (--i);
  17.        
  18.         }
  19.           
  20. }


  21. void Nixie (unsigned char Location,Number)
  22.         {
  23.                
  24.     unsigned int Numbertable []={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x98};
  25.                
  26.                 switch(Location)
  27.                                 {
  28.                                 case 1:P20=0;P21=0;P22=0;break;
  29.                                 case 2:P20=1;P21=0;P22=0;break;
  30.                                 case 3:P20=0;P21=1;P22=0;break;       
  31.                                 case 4:P20=1;P21=1;P22=0;break;
  32.                                 case 5:P20=0;P21=0;P22=1;break;
  33.                                 case 6:P20=1;P21=0;P22=1;break;
  34.                                         }
  35.                        
  36.                                 P0=Numbertable [Number];               
  37.                                 Delay (1);//短暂延迟达到消影目的
  38.                                                 P0=0xFF;//共阳归零为0xFF,共阴为0x00
  39. }


  40. void main ()
  41.         {
  42.                                 P11=0;
  43.                
  44.                 while(1)
  45.                         {
  46.                                 Nixie (1,0);               
  47.                                 Nixie (2,4);
  48.                                 Nixie (3,0);
  49.                                 Nixie (4,7);               
  50.                                 Nixie (5,1);
  51.                                 Nixie (6,2);
  52.                                
  53.                         }
  54. }
  55.         </font>
复制代码
从左到右显示040712.

好懒~~不想说~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表