登录  | 立即注册

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

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] 六位数码管动态扫描

[复制链接]
发表于 2017-2-1 15:44:32 | 显示全部楼层 |阅读模式
学习笔记
学习科目: 数组,动态扫描,中断
学习安排: 进一步学习单片机
开始时间: 2017-02-01
结束时间: 2017-02-01
本帖最后由 骆海洋 于 2017-2-1 15:44 编辑
六位数码管动态扫描

  • 我们的板子上的74HC138芯片不能一次输出六个低电平,要想同是用到六个数码管就要用到动态扫描(即使能同时打开数码管显示的也是一样的),单片机能够承受的电流是50mA左右,但是一位数码管正常的电流就达到60多mA,超出了单片机的安全电流,我们的板子上用到了74HC245来驱动,这样就能安全的点亮我们的数码管。
  • 我们的数码管用的是共阳意思就是为低电平是点亮。
  • 数码管动态扫描用到了视觉暂留现象原理,即:刷新频率在100Hz(10ms)以上就感觉不到闪烁,这次程序6ms刷新一遍。
  • 真值表
    数字或字母 0 1 2 3 4 5 6 7 8 9 A B C D E F
    对应的十六进制0xC0 0xF9 0xA4 0xB0 0x99 0x92 0x82 0xF8 0x80 0x90 0x88 0x83 0xC6 0xA1 0x86 0x8E
  • 程序如下:
  • #include <STC12C5A60S2.H>
  • 定义引脚
  • sbit ADDR0 = P2^0;
  • sbit ADDR1 = P2^1;
  • sbit ADDR2 = P2^2;
  • sbit ENLED = P1^1;
  • 初始化数组
  • unsigned char code LedChar[] =
  • {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  • 数码管显示缓存区,0xff保证刚开始是熄灭状态
  • unsigned char LedBuff[6] =
  • {0xff,0xff,0xff,0xff,0xff,0xff};
  • void main ()   主函数
  • {
  •         unsigned char i = 0;
  •         unsigned int cnt = 0;
  •         unsigned long sec = 0;
  •         
  •         ENLED = 0;
  •         TMOD = 0x01;  选择定时器模式
  •         TH0 = 0xf5;   定时1ms
  •         TL0 = 0x96;
  •         TR0 = 1;     打开定时器1
  •         
  •         while(1)    无限循环
  •         {
  •                 if(TF0 == 1)
  •                 {
  •                         TF0 = 0;
  •                         TH0 = 0xf5;
  •                         TL0 = 0x96;
  •                         cnt++;
  •                         if (cnt >= 1000)
  •                         {
  •                                 cnt = 0;
  •                                 sec++;   一秒钟sec加1
  •                     给LedBuff显示缓存区赋值
  •                                 LedBuff[0] = LedChar[sec%10];
  •                                 LedBuff[1] = LedChar[sec/10%10];
  •                                 LedBuff[2] = LedChar[sec/100%10];
  •                                 LedBuff[3] = LedChar[sec/1000%10];
  •                                 LedBuff[4] = LedChar[sec/10000%10];
  •                                 LedBuff[5] = LedChar[sec/100000%10];
  •                         }
  •                         数码管一秒钟刷新一位,六秒刷新一遍
  •                         if(i == 0)
  •                         {ADDR0 = 1;ADDR1 = 0;ADDR2 = 1;i++; P0 = LedBuff[0];}
  •                         else if(i == 1)
  •                         {ADDR0 = 0;ADDR1 = 0;ADDR2 = 1;i++; P0 = LedBuff[1];}
  •                         else if(i == 2)
  •                         {ADDR0 = 1;ADDR1 = 1;ADDR2 = 0;i++; P0 = LedBuff[2];}
  •                         else if(i == 3)
  •                         {ADDR0 = 0;ADDR1 = 1;ADDR2 = 0;i++; P0 = LedBuff[3];}
  •                         else if(i == 4)
  •                         {ADDR0 = 1;ADDR1 = 0;ADDR2 = 0;i++; P0 = LedBuff[4];}
  •                         else if(i == 5)
  •                         {ADDR0 = 0;ADDR1 = 0;ADDR2 = 0;i = 0; P0 = LedBuff[5];}
  •                 }
  •         }
  • }
  • 本程序借鉴《手把手教你学51单片机》
  • 如果有错误的地方还请大神指正。



人生无根蒂,生如陌上尘。
 楼主| 发表于 2017-2-1 15:48:41 | 显示全部楼层

154838rgn12s4nl2jgm8vg.png
人生无根蒂,生如陌上尘。
 楼主| 发表于 2017-2-1 22:03:59 | 显示全部楼层
电脑端排版好好的,怎么到这成这啦。
人生无根蒂,生如陌上尘。
 楼主| 发表于 2017-2-1 22:06:01 | 显示全部楼层
我发现用浏览器打开比较好
人生无根蒂,生如陌上尘。
发表于 2017-2-2 07:32:50 | 显示全部楼层
骆海洋 发表于 2017-2-1 22:03
电脑端排版好好的,怎么到这成这啦。

H5帖子详情页最近出问题了。目前以及今后一个时期可能都会使用目前的帖子详情页了。
该会员没有填写今日想说内容.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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