系列文章目录

第2-3章 定时器+74HC573显示8位数码管


文章目录

  • 系列文章目录
  • 前言
  • 一、TIMER0
  • 二、74HC573
    • 1.原理图
    • 2.显示结果
    • 大功告成
  • 总结

前言

两章合并,主要运用定时器0和开发板上的74HC573点亮8位数码管。计划做一个8位计时器,每秒加1.


一、TIMER0

增强型的51说明书看着头大,主要是功能啰里啰嗦的,一大堆用不到的东西。定时器注意,12C5A向下兼容,所以定时器默认是12T的,若要改为1T,需配置定时器
AUTX|=0X80

另外计算定时器TH0,TL0的值,直接找STC-ISP上有直接计算的。
自己算的话,就是

#define TIMER0_COUNT (24*1000) //24Mhz,1000us
void Timer0_Init(void)
{AUXR|=0X80;TH0=(65536-TIMER0_COUNT)/256;TL0=(65536-TIMER0_COUNT)%256;TMOD|=0X01;TR0=1;ET0=1;EA=1;}

上述即为1T时,24Mhz晶振定时1ms的值。
另外测试定时器发现个问题,折腾了好久:

#define WEILA   P0^0
#define DULA    P0^1WEILA=1;

上面这么写一直报错,说语法错误,少个分号啥的,没整明白为啥,必须要改成P00才行,不能用P0^0赋值。
另外还有个要注意的点,

sbit WEILA P00;
这么写也是错的,要写成sbit WEILA=P00;

二、74HC573

点亮这玩意又耗费我好长时间,一个是因为开发板不熟,所有数码管要单独供电,跳线帽没插,2是原理图上脚位标的不清楚,脚位搞反了。

1.原理图


直接P2口做573输入,P00,P01分别做位选段选锁存使能。

代码如下(示例):

#define WEILA   P00
#define DULA    P01
#define LEDS    P2
const uchar num_table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
const uchar wei_table[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};void Timer0_isr(void) interrupt 1
{TH0=(65536-TIMER0_COUNT)/256;TL0=(65536-TIMER0_COUNT)%256;P0^=0X04;tms_1s++;if(tms_1s==1000){tms_1s=0;f_1s=1;}disp_cnt%=8;if(disp_cnt==0){disp_num=disp_count;}WEILA=1;LEDS=wei_table[disp_cnt];WEILA=0;DULA=1;LEDS=num_table[disp_num%10];DULA=0;  disp_num/=10;disp_cnt++;
}void main()
{Timer0_Init();while(1){if(f_1s){f_1s=0;disp_count++;                    }}return;
}

disp_cnt用来切换8个数码管显示哪一位,分时8次动态显示
disp_count是要显示的计数值,每秒加1
disp_num为当前位选要显示的数字,程序中通过不断除10取余得到这个数,靓!

2.显示结果

效果如下:

显示正常,但是有鬼影,应该是段选位选切换的一瞬间WEILA=1;DULA=1时造成的,在置1前将所有IO口重新设置一次。

代码如下(示例):

void Timer0_isr(void) interrupt 1
{TH0=(65536-TIMER0_COUNT)/256;TL0=(65536-TIMER0_COUNT)%256;P0^=0X04;tms_1s++;if(tms_1s==1000){tms_1s=0;f_1s=1;}disp_cnt%=8;if(disp_cnt==0){disp_num=disp_count;}LEDS=0XFF;//消除鬼影WEILA=1;LEDS=wei_table[disp_cnt];WEILA=0;LEDS=0X00;//消除鬼影DULA=1;LEDS=num_table[disp_num%10];DULA=0;  disp_num/=10;disp_cnt++;
}

再次看下结果:

大功告成

总结

写了七八年单片机汇编,写程序思路没啥问题,关键是对51的C编译器不太熟,我又喜欢钻牛角尖,影响效率。另外后续再写类似的前先搞个简单的,比如这个点亮8位数码管,我一次程序直接写完,结果调试不好找问题,应该先尝试下只点亮一个的。

今天就整这么多吧,后续整个模板出来。

STC12C5A60S2-定时器+数码管相关推荐

  1. 合泰单片机数码管c语言,合泰单片机定时器数码管显示

    ;内容:4位共阴数码管显示0000-9999显示 ;数码管段码接法A-PD0,B-PD1....G-PD6,H-PD7 ;数码管位码接法OM0-PC0...COM4-PC3 ;目的: ;1.查表 ;2 ...

  2. 基于51单片机的倒计时器秒表定时器数码管显示原理图方案设计

    系统的功能分析 (末尾附文件) 框架图: 原理图: 声光报警电路(低电平有效)设计 有源蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机.打印机.复印机.报警器.电子玩具.汽车电 ...

  3. 用 定时计数器中断 和 动态八段数码管 做一个秒表

    用 定时/计数器中断 和 动态八段数码管做一个秒表 目录 用 定时/计数器中断 和 动态八段数码管做一个秒表 1.思路 定时器 数码管 2.主要代码讲解 3.全部代码参考(代码写的很烂,欢迎提出建议) ...

  4. 51单片机电路原理图_10个定时器精选电路方案带你学习时钟脉冲的工作方式

    可编程控制器中的定时器是根据时钟脉冲累积计时的,时钟脉冲有 1ms.10ms.100ms等不同规格.(定时器的工作过程实际上是对时钟脉冲计数)因工作需要,定时器除了占有自己编号的存储器位外,还占有一个 ...

  5. 10个定时器精选电路方案带你学习时钟脉冲的工作方式

    可编程控制器中的定时器是根据时钟脉冲累积计时的,时钟脉冲有 1ms.10ms.100ms等不同规格.(定时器的工作过程实际上是对时钟脉冲计数)因工作需要,定时器除了占有自己编号的存储器位外,还占有一个 ...

  6. 嵌入式开发学习笔记9-做一个好玩的LED闪烁

    嵌入式开发学习笔记9-做一个好玩的LED闪烁 前言 实际操作 程序功能 实现思路 程序源码 实现效果展示 前言 LED小灯闪烁实质是控制单片机上的I/O口,通过向I/O口循环输入高低电平,从而控制LE ...

  7. 【blue bridge cup】笔记

    一.               IO 口编程 IO编程,该开发板使用了573锁存器,通过P2口的5,6,7位连接3-8译码器,扩展出了8个口,其中4个口分别连接4个573锁存器,这里以LED的锁存器 ...

  8. 省赛题第六届到第十二届单独分析

    4月2日 第十一届没写完,现在是北京时间二十二点十三分,距离揽江楼关门还有十七分钟,我要收拾书包从五楼下去,明天早起写完,写了差不多五个小时吧 4月3日上午 写完了朋友们 4月5日下午 回来把第十二届 ...

  9. 51单片机调时电子钟

    /************************************************************************************** 程序功能:在8个数码管上 ...

  10. 蓝桥杯单片机学习过程记录(十四)第六届温度记录

    蓝桥杯单片机学习过程记录(十四)第六届温度记录 应用的内容: 定时器 数码管 时钟ds1302 温度传感器ds18b20 独立按键 结果实现的问题: 时钟和定时器两个时间走的不同,定时器5ms下200 ...

最新文章

  1. AndroidManifest.xml
  2. 中国互联网+户外广告行业商业模式创新与投资机会深度研究报告
  3. Android 线程管理
  4. Node.js 执行webpack命令出现的错误
  5. android自动创建桌面,Android应用启动后自动创建桌面快捷方式的实现方法
  6. 在EXT中向弹窗传值或者对象
  7. 玹疯:这些年我走过的弯路
  8. mysql 各表charset不同_MySQL表字段字符集不同导致的索引失效问题
  9. 硬件加速下webview切换闪屏_网页渲染性能优化 —— 性能优化下
  10. 并发无锁队列学习(单生产者单消费者模型)
  11. java中包容易出现的错误及权限问题
  12. Java Web项目漏洞:检测到目标URL存在http host头攻击漏洞解决办法
  13. 数值分析(5)-分段低次插值和样条插值
  14. Python基础十七:IO编程一:读写文件
  15. 红白机基本原理(一)总述
  16. PHP如何判断图片是否伪造
  17. 如何编写GIMP插件(三)
  18. 服务器定时发送qq消息,python实现定时发送qq消息.pdf
  19. 2022 CCF BDCI数字经济创新应用案例大赛决赛晋级名单
  20. A Brief History of Just-In-Time 简读

热门文章

  1. 亲测jupyter打不开浏览器
  2. keil的错误: Error: Encountered an improper argument 的解决方法
  3. MatrixOne混沌测试之道
  4. win10 开机黑屏时间长 联想y470解决方案
  5. 什么是天使轮、A轮、B轮、C轮、D轮融资
  6. Android通知栏图标显示网络图片
  7. html实现短信验证的功能,怎样实现短信验证功能
  8. 电脑版微信多开显示网络代理服务器,电脑版微信多开的方法_电脑维护
  9. Android 改变View的中心点
  10. JavaBean的前世晋升程序员如何提升领导力