从52单片机的中断与数码管讲起

数码管显示原理(使用郭天祥TX-1C开发板)

管是二极管(LED小灯组成,每一颗都是独立的)组成的。那么我要让数码管显示相应的字符就需要点亮相应的LED小灯。如果是多位数码管,那么要让他显示相应的字符怎么弄呢?首先要看我们要显示几位。是要节约IO还是需要稳定,然后决定静态扫描与动态扫描。

静态扫描:CPU输出一次之后,可以保持不变,仅在字符需要改变时刷新字符,稳定。占用的CPU时间少,但如果显示的位数多了以后,所占用的IO端口也就多了。

动态扫描:刚好与静态扫描相反,CPU需要不断的输出刷新,一旦没有了输出也就不再显示,也没静态扫描那么稳定。但可以减少IO口的占用。(好像GPU与CPU的区别)

刚才提到了刷新字符,那么我们一般怎样刷新呢?这里要提到锁存器了。锁存器是将CPU给的信号给锁住,不再接收信号。相当于常说的缓存。记住是记录上一段信号然后不再接收其他信号。那么静态与动态的差别就是动态接收信号的频率大于静态的

现在我们可以知道数码管是怎么显示你想要的字符了。如果你只需要点亮一位数码管,那么可以选取静态扫描。我们所需要做的是选取这一位数码管,点亮这个数码管中相应的LED小灯

1



2                                                                          这里需要注意的有个问题位选的使能端置1与置0。锁存器打开以后接收数据,当关闭使能端后数据存在IC,开启后又要接收数据,一定要给个明确的数据给他,然后关掉,一定要关,要不然还在接收数据,P0等于多少就无法确定。

此时该数码管只显示数字1,做一个计时怎么弄呢?修改main函数,我们现在来做一个不怎么精确的计时器

3                                                                                  这段我加了一个延时函数delay(),正规工程中是切记不要随意加这种只为消耗CPU时间的函数。因为他的目的只是消耗时间而已,而且这个时候CPU还不能去做其他事。跟个小孩一样就是耗时间。

我们来看两个逻辑上的错误列子

4
5                                                                                他们有相同的想法,就是设一个变量,用他来指向所要显示字符,使数码管依次显示且循环。但是都没有实现,因为他们一直都在循环中而没有去做其他的事。第一个一加了之后就跳出了循环,而这个循环里有显示函数,第二个则是一直在循环

正确的做法是这样的,让他在循环中显示

6

定时器

此时这个计时器是不准确的,为了让计时器够准确计时我们引入定时器,而定时器又刚好与中断有关。但定时器不是中断,定时器与中断有关但不是中断!定时器与中断有关但不是中断!

先来看与定时器和中断都有关的周期,时钟周期(震荡周期)两个脉冲之间的时间间隔。机器周期完成一个基本操作所需时间,单片机完成一个指令所需时间是机器周期的整数倍。频率,周期倒数,表示1秒时间内能震荡多少下。定时器怎么计时呢?每过一个机器周期定时器加1,加满后溢出清零重新开始,和我们的时间一样,过完一天又是新的一天。

怎么去使用定时器,两个特殊寄存器的使用以及一个计算题。两个特殊寄存器TMOD(工作模式寄存器),TCON(控制寄存器),先设置TMOD以确定工作方式,GATE(是否由外部引脚INTx和TRx来决定开关还是仅由TRx来决定)C/T决定是计时计数,M0M1决定计算方式。

7                                                                                不可位寻址,也就是说M1=0这种设置是错误的,而可位寻址的如TCON可以这样设置TR=1;

如我设置TMOD=0x01,换为二进制0000 0001。让TR1=0,关掉计数器T1,TR0=1,打开计数器T0,选择TR0计数器,仅仅受TR0来决定是否打开,选择计时,用工作方式1进行计算。


8                                                                            TCON前面也提到了TRx打开或关掉计算器,TF标志位,当计数值满了TF=1,此时TF软件清零或硬件清零

计算初值,现在必须明确清楚完成一个操作的时间是一个机器周期,还有刚才我们选择的计算方式是1,机器周期的时间是\frac{12}{11059200} =T1,如果我们要0.02秒,那么计算X*T1=0.02。算下来X=18432,。那么让定时器敲18432下,刚好是65536,也就刚好等于0.02秒,初始值就是(65536-18432)=47104,转为十六进制=0xb800,送给TH=0xb8,送给TL=0x00;

第一 对TMOD赋值,确定工作方式

第二 计算初值(TH/TL)

第三 TR置1开始计数

第四  检测TF,查看溢出情况 如:


9
10                                                                                    (修改了一下main函数而已)SEG_GX()在1图2图能找到

中断
现在来看一下中断,为什么设置中断,为了使单片机具有对内部或外部随机发生的事进行一个实时处理。那就问下什么是中断,中断就是应对突发事件而设立的机制。比如,你在家写程序,这时相亲的对象来了,你认为见对象很重要,保存一下你刚写的程序,然后去见你对象。写程序是主函数,对象来了,是中断源,你认为见对象重要是他的优先级更高,是你去见你对象是处理中断函数,见完对象你回去写程序。如果刚才没有保存程序,你也就很难知道从哪里开始写的了。这就是一个完整的中断过程。简化下:接收到中断源信号》响应这个请求》处理这个请求》返回原来的程序。一般来讲中断函数是独立的,不返回任何值。记住几个重要且易混淆的点,定时器和中断是有区别的,中断应对的是随机事件。我们在中断函数中不需设置TFx位。响应中断后,硬件置1,处理完中断后,硬件置0,不需要你去写。你需要的就是给他一个初始值,以及在中断函数中需要处理的函数,还有在main函数中记得设置中断允许。要不然白瞎了,总中断EA=1;以及其他你需要打开的中断,ESx串口中断允许,ETx内部中断允许,EXx外部中断允许。

11
12

interrupt表明这是一个中断服务函数,而1是他的中断优先级别。若一件优先级别更高的事情发生,优先处理级别更高的事,处理完成以后再来处理优先级低的事这就形成了中断嵌套,中断的优先级分两种,一种是抢占优先,一种是固有优先。当都忙得过的时候按固定优先级走,当忙不过的时候,一堆中断等着响应就出现了抢占优先这里就出现了中断优先级寄存器(PTx,PXx,PS)当其中一个置1时,他的优先级就高于其他。

现在我们把那个定时器改在中断函数中实现,切记在中断函数中一定要越简单越好,或者处理时间越短越好,该中断函数cnt加1与flag置1操作。

13


而主函数中要处理的就较为复杂

14

现在做一个999秒的计时器来结束这一篇文章,因为只有一块芯片,也就只能选择动态扫描,。前面我们只选了一位数码管,用的也都是静态扫描,现在我们要选三位数码管来显示,所以还需要再知道两件件事,消影,消除数码管在位选或者段选时的余晖。让我们看得更清楚一点,还有我们要做一个数组或者三个变量用来存储个位,十位,百位。就是两件事数码管扫描与消影。做完这两件事后,就是显示及字符按什么方式显示的事了

15扫描段与消影


16

有了这三段函数,额,你数码管想怎么显示就看你的函数fun了,这里我是这样写的,但感觉太土了,这是哪个帅帅的我写的吗。这不是我的追求,以后再改了,现在要往前走了

17
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,340评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,762评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,329评论 0 329
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,678评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,583评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,995评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,493评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,145评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,293评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,250评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,267评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,973评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,556评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,648评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,873评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,257评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,809评论 2 339

推荐阅读更多精彩内容