其实是8位数码管的轮流显示。感觉冲哥把这个解释得复杂了。多路复用,依次点亮,即可解释实际需要。点亮一个数码管只需要一个8位并口。若有N位需要点亮,也使用并口,则需要N*8位并口,这样对系统资源要求太商。可以使用多路复用。 第11集 计时器的使用
定时器是定时器和计数器的统称;
可以避免delay一直占用系统资源。核心是加法计数器,其本质是对脉冲进行计数。默认是12分频。12分频表示系统时间计数12次时,才完成一个计数指令。系统频率为24MHz(24*10^6Hz)时,一次计数所用时间为:12/〖24*10〗^6秒。完成一个完整的16位计数65536共计用时65536*12/(24*10^6 )=0.032768秒。若想计时1ms,则需要计数(1*10^(-3))/(12/(24*10^6 ))=2000次。
计数器是加法计数器,只有初始化为(65536-2000)时,计数器会在计数2000次之后因溢出而产生中断。65536-2000=63536=0xF830.所以TH0=0xF8,TL0=0x30.
第12集 计数器的使用
关于计数器的解释过于牵强。何为计数器,是对上升沿或者下降沿的脉冲计数。可以统计电机转多少圈,或者其他计数方式。计数值不能无限大,计数到65536时,会溢出产生中断。
比如,12双鞋子可以装满一个大箱子。这样每装12双就需要进行一个打包动作。可以初始化为65536-12,装满一个箱子后,进行一个打包的动作。其本质跟定时器是一样的。
第13集 简易多任务处理上
1 添加函数头(格式化注释)
2 模块化编程(.c+.h)
.h文件
#ifndef
#endif
3 注意extern的用法:此变理/函数是在别处定义的,要在此处引用
拿到12K128试验箱好几天了,这几天在了解试验箱,并跟进一些试验程序。
这几天一直卡在第13节课,简易多任务处理。
今天终于搞懂了几个问题,这些问题也许在经验丰富的程序员面前都不算什么问题,但对于业余爱好者及自学人员,困扰了我好几天。
也许总结不到位,若出错了,也可以参考一下。
1 多任务处理时,所有的.H文件,都必须用include “”包含在主C文件中。这样在.h中定义的变更都能方便使用,不致于重复定义及找不到变量。
2 中断程序一定要写主C文件中。
3 用cdc-ISP时,stc.h要放在usb.h前;
4 单片机一定是硬件跟软件的结合,写软件前,一定要熟悉硬件。了解试验箱的原理图又花了好几天的时间。
5 必要的动手能力,把OLED12864装在试验箱中,要用电烙铁改装电路。且SCL & SDA需要加装上拉电阻。
6 最快的熟悉程序和电路的方法,是跟着视频一起做,程序写一遍,原理图也自己画一遍。这样软件硬件都有了解。 本帖最后由 xupota 于 2024-10-30 21:20 编辑
7 子程序之前有函数调用时,相应的.h文件也含有include .h
8 .h文件中定义的变更,需加extern 前缀。但在在.c文件中引用前,需重新定义一次,或者赋初值。比如下:
test.c
int a;
int b =0;
//test.c文件中直接定义,并使用,OK
但是要在main.c中调用a,和b时,则必段在test.h文件中重新定义
test.h
extern int a;
extern int b;
否则系统报错***ERROR L104: MULTIPLE PUBLIC DEFINITIONS
页:
1
[2]