首页 理论教育零起点学习单片机多语言编程实例:绿灯倒计时与黄灯闪烁

零起点学习单片机多语言编程实例:绿灯倒计时与黄灯闪烁

【摘要】:执行显示程序后显示00数值。再执行到数值比较条件转移指令d-dx=0时,执行下一条显示程序,显示“09”数值。绿灯计时、显示结束后,关闭显示器和黄灯亮。尽管本程序也是绿灯亮5s但与上面的程序有所不同,它们一个是绿灯从“08”开始倒计时、显示,一个是从“05”开始倒计时、显示。程序点评:倒计时程序一般是以1s为单位计时。设计黄灯闪烁的时间亮、灭各0.5s共用1s即可满足要求。

1.10个数的倒计时程序

【例2-33】 从09开始倒计时程序

实例程序运行效果:在单片机上手工输入并运行该程序,显示器从“09”开始显示,随之递减“1”显示:08、07、06、05、04、03、02、01、00。

程序点评:程序应用了条件转移指令JNZD。当1-1=0时,一方面执行下一条显示程序;另外一方面将“0”的数值重新赋值给显示寄存器d。执行显示程序后显示00数值。

【例2-34】 从0A开始倒计时程序

实例程序运行效果:在单片机上手工输入并运行该程序,显示器从“0A”开始显示,随之递减“1”显示:09、08、07、06、05、04、03、02、01。

程序点评:程序应用了条件转移指令JNZD。当1-1=0时,一方面执行下一条结束程序;另一方面尽管将“0”的数值重新赋值给显示寄存器d,但所执行的下一条程序是结束指令。因此,不显示00数值,而显示的数值仍是01。

2.10个数的正计时程序

【例2-35】 从00~09的正计时程序

实例程序运行效果:在单片机上手工输入并运行该程序,显示器从“00”开始显示,随之递加“1”显示:01、02、03、04、05、06、07、08、09随后关显示。

程序点评:程序应用了INCD加数指令和数值比较条件转移指令JNED。当程序执行到d=08+01指令时,将“09”赋值给显示寄存器d并没有显示“09”这个数。再执行到数值比较条件转移指令d-dx=0时,执行下一条显示程序,显示“09”数值。

【例2-36】 从01~0a的正计时程序

实例程序运行效果:在单片机上手工输入并运行该程序,显示器从“01”开始显示,随之递加“1”显示:02、03、04、05、06、07、08、09、0A随后关显示。

程序点评:本程序与上面10个数正计时程序的主要区别是当程序执行到d=09+01指令时,将“0A”赋值给显示寄存器d并没有显示“09”这个数。当执行到数值比较条件转移指令0A-0B≠0转移到02地址显示。再次执当程序执行到d=0A+01指令时,将“0B”赋值给显示寄存器d并没有显示“0B”这个数。再执行到数值比较条件转移指令0B-0B=0转移到下一条关显示程序,没有显示“0B”这个数。

3.程序设计

【例2-37】 设计一个绿灯亮5s倒计时并显示的控制程序。

要求:倒计时到时后,绿灯灭。

实例程序运行效果:在单片机上手工输入并运行该程序,绿灯亮并从“05”开始倒计时显示,随后倒计时显示04、03、02、01。计时结束绿灯熄灭。

程序点评:程序应用了条件转移指令JNZD。当1-1=0时,执行下一条关绿灯程序。(www.chuimin.cn)

注意,这时显示寄存器d被重新赋值的数值是“00”。

【例2-38】 设计一个绿灯亮5s倒计时并显示,以及绿灯计时、显示结束后,黄灯亮3s的程序。

实例程序运行效果:在单片机上手工输入并运行该程序,绿灯亮并从“05”开始倒计时并显示。绿灯计时、显示结束后,关闭显示器和黄灯亮。黄灯亮3s后再灭。

程序点评:程序应用了条件转移指令JNZD。当1-1=0时,执行下一条关绿灯程序。

【例2-39】 设计一个绿灯亮5s倒计时并显示,以及绿灯计时、显示结束后,黄灯亮3s倒计时并显示的程序。

程序一:

实例程序运行效果:在单片机上手工输入并运行该程序,绿灯亮并从“05”开始倒计时并显示。绿灯计时、显示结束后,黄灯亮并从“03”开始倒计时并显示。黄灯计时、显示结束后,关闭显示器。

程序点评:程序应用了两次条件转移指令JNZD。当d-1≠0分别转移到了02地址与10地址。

程序二:

实例程序运行效果:在单片机上手工输入并运行该程序,绿灯亮并从“05”开始倒计时并显示。绿灯计时、显示结束后,黄灯亮并从“03”开始倒计时并显示。黄灯计时、显示结束后,关闭显示器。

程序点评:程序两次应用了当d-1≠0条件转移指令JNZD和应用了d-dx≠0数值比较条件转移指令JNED。多次转移,多个转移地址。尽管本程序也是绿灯亮5s但与上面的程序有所不同,它们一个是绿灯从“08”开始倒计时、显示,一个是从“05”开始倒计时、显示。

【例2-40】 设计一个绿灯亮5s倒计时并显示,以及绿灯计时、显示结束后,黄灯闪烁3s且倒计时显示的程序。

程序一:

实例程序运行效果:在单片机上手工输入并运行该程序,绿灯亮并从“05”开始倒计时并显示。绿灯计时、显示结束后,黄灯亮并从“03”开始倒计时与显示,同时黄灯闪烁3s。黄灯计时、显示结束后,黄灯灭并关闭显示器。

程序点评:倒计时程序一般是以1s为单位计时。黄灯闪烁的同时,倒计时的时间单位要一致。设计黄灯闪烁的时间亮、灭各0.5s共用1s即可满足要求。

程序二:

实例程序运行效果:在单片机上手工输入并运行程序,绿灯亮并从“08”开始倒计时并显示。绿灯计时、显示结束后,黄灯亮并从“03”开始倒计时与显示,黄灯闪烁3s。黄灯计时、显示结束后,黄灯灭并关闭显示器。

程序点评:注意区分d-1≠0条件转移指令JNZD和d-dx≠0数值比较条件转移指令JNED的不同用法。区分不同的转移地址。