零成本学习之单片机开发之(3)跑马灯原来可以这么玩
从今天开始给大家逐步讲解单片机编程,有兴趣的小伙伴们,可以关注本课程,完全免费。
本人从事从2004年大学毕业开始从事开发工作,先后做过单片机开发、ucOSII开发、手机开发、android APP开发、PHP开发、微信小程序开发,目前从事物联网开发。我本人并非学计算机的,除了学校上课之外,基本上这些开发都是自学的。边学习边工作,基本上以学以致用为目的,用到什么学习什么。
深深体会到自学的艰辛,尤其是最初入门的时候,那道砍迈过去后面再学习基本上就简单多了,所谓触类旁通,举一反三。但是前面打基础的时候是非常费力的,看到很多评论说C语言指针太难了,后来就放弃了。其实那是没有找到好的学习方法,没有人指导。只要有人带一带指点一下,问题很快就能解决。
相比于国外的开源学习氛围,我认为我们做的还远远不够,我们的编程大师还非常少,像ucLinux、ucOSII、FreeRtos等等非常有名的嵌入式操作系统,商业的更不用说了,太多了。我们在软件方面一直都是落后的状态,当然近几年我们自己也有不少好的作品。比如,Huawei LiteOS、Alios Things、djyos、RT-Thread、SylixOS等。一直想为学习单片机的同学做点什么,今年相对来说会轻松一些,利用闲暇时间,给大家分享一些案例、学习方法和心得。本课系列课程主要针对初学者、单片机学习爱好者、学习中遇到困难者,有什么不清楚的地方可以留言讨论。
首先、课程目标
使用一个按键和8个LED指示灯实现跑马灯效果,总共4中显示效果使用按键按下事件切换显示模式第二、原理图设计
添加8个LED指示灯,也可以利用上节课的原理图直接用右键复制出7个LED元器件添加8个限流电阻,并调整布线,直接上结果。第三、编码设计
软硬件接口
端口P0 第一个管脚P00z作为按键输入端口端口P2作为LED的输出端口软件流程
1.串口初始化
2.主循环处入口
检测按键事件 根据按键事件切换显示模式 根据模式更新显示数据 根据显示模式显示显示数据3.考虑到排版整洁性,只上了主函数代码,其他模块代码见源代码文件
void main(void)
{
initUart();//串口初始化
while(1)//主循环
{
handleKey();//检测按键
checkMode();//根据按键事件切换显示模式
handleMode();//根据显示模式更新显示数据
if(ledmode%2==0)//根据显示模式把数据显示到LED上
displayDriver1(cnt);
else
displayDriver2(cnt);
delay(100); //延时100ms
}
}
最后、知识点总结
1.跑马灯也是IO操作的进一步巩固,只不过加入了时序上的小算法,看起来更具有动态感
2.注意如何通过按键事件切换模式的
3.注意如何模式和更新的数据进行换算的
4.注意显示驱动的技巧
5.本次课程所用的工程文件私信20002,系统自动给出下载链接。
本次课程到此结束,如果有什么疑问欢迎留言。
不花费一分钱,实现跑马灯编程实验
建立仿真工程
初学者学习单片机编程,并不需要去网上买个开发板才能开始编程做实验,若是想先了解,可以先用proteus仿真软件来做实验,Protues软件具有其它EDA工具软件的功能。这些功能是:
1.原理布图
2.PCB自动或人工布线
3.SPICE电路仿真
另外,它可以仿真51系列、AVR、PIC、ARM、等常用主流单片机。还可以直接在基于原理图的虚拟原型上编程,再配合显示及输出,能看到运行后输入输出的效果。配合系统配置的虚拟逻辑分析仪、示波器等,Proteus建立了完备的电子设计开发环境。下面用AT89C55单片机外部连接8个LED反光二极管,采用共阴极连接方法。当单片机管脚输出为0时,LED亮;当管脚输出为1时,LED灭。
链接方法
编程环境
使用Keil 开发编译环境,首先建立一个新工程,接着建立一个.C文件,如main.c,单片机运行程序入口main(),开始编写程序代码。
编程环境
跑马灯程序代码
跑马灯需要一个延时程序,延时子程序调用delay(),然后单片机管脚在不同时段输出控制LED发光二极管,进行跑马灯的控制。以下贴上本次实验代码。欢迎讨论留言!
#include <reg52.H>
#include <intrins.h>
typedef unsigned char uint08;
typedef unsigned short int uint16;
typedef unsigned long int uint32;
void delay_ms(uint16 ms)
{
uint16 i,j;
for(i=0;i<ms;i++)
{
for(j=0;j<255;j++)
{
_nop_();
}
}
}
// 0x01 0x02 0x04
uint08 display1[8] = {0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};
uint08 display2[8] = {0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};
void main()
{
uint08 i;
uint08 temp;
uint08 ptemp;
// 初始化变量
P2 = 0xff;
ptemp = 0;
while(1)
{
if(ptemp>=8)
{
ptemp = 0;
}
temp = display1[ptemp]; // ÿ´ÎÏÔʾledÊýÁ¿¼Ó1µÄ×Ö¶ÎÂë
for(i=0;i<8;i++)
{
P2 = ~temp;
temp <<= 1;
delay_ms(200);
}
temp = display2[ptemp];// ÿ´ÎÏÔʾledÊýÁ¿¼Ó1µÄ×Ö¶ÎÂë
for(i=0;i<8;i++)
{
P2 = ~temp;
temp >>= 1;
delay_ms(200);
}
ptemp++;
}
}
效果图
相关问答
老铁们麻烦回答一下!!阶新科技运用汇编语言怎么编写 跑马灯 程序?[回答]项目时间:2014-09-2013-11项目名称:C语言在单片机上的应用项目描述:项目介绍设计一个数字时钟的电路,然后用汇编语言或者C语言编写数字时钟时钟的...
单片机 求汇编语言设计一个彩灯控制系统,有4个控制开关,8盏LED灯?对于这个问题处理起来是不难的,这是学习单片机常用的一个练习程序,比如我们用MCS-51来设计一个彩灯控制器,也俗称“跑马灯”。在硬件方面我们要焊接出一个单...
pcr扩增的原理和步骤顺口溜?通过定时器定时一定时间使跑马灯依次点亮!在单片机编程时直接在定时中断程序中通过标志给端口置高电平即可!通过定时器定时一定时间使跑马灯依次点亮!在单片...
51 单片机 最小系统( 跑马灯 )不工作?,视频 跑马灯 系统哪家质量...[回答]微信直播云课堂.叮叮开课微信生态优势:随时随地在微信内管理网校,绑定微信公众号,朋友圈便捷分享、自发社群传播、多重裂变营销自主研发的多个软件...
multisim中的滑动变阻器如何调节单片机电子类等相关专业的一门重要课程,在实际工程中有着广泛应用。全各大中专院校开设了不同类型的单片机课程及相关的实验和综合设计。在些专业的...
Led爆闪五种模式互相交叉点怎么接线?这种暴闪灯通常采用一体化主机,电源需要单独接在电瓶上,有独立的开关和频闪控制器,一般环境下是两个灯来回频闪。一体化主机的暴闪灯可安装在车子的中网内,位...
软件能脱离操作系统独立存在吗?但是某些场景下,应用软件也可以脱离操作系统二存在。比如工业控制领域。以单片机为例,写好跑马灯的汇编程序,用烧录软件将二进制文件烧录到单片机里面,就可以...
为什么我的功放灯不亮了?怀疑是某个元件...这种流水灯是通过三极管先后点亮的,看这个灯灭的情形应该是有一个三极管的电路出了问题,用个万用表的短路测试去测一下各元件的焊接情况,怀...
人眼对于多少赫兹频率以上的刷新率基本不感到闪烁? - 183****...答:刷新率达到100Hz时,几乎不感到闪烁。试验:(1)初始,单片机跑马灯试验,初始设置闪烁周期100ms,使得两个LED灯以10Hz刷新率来回闪烁(交替亮暗)。(2)...
只会c语言,自学的,能找到合适的工作吗?工资会是多少?王”,...你也可以先做一个牛掰的工具发网上,把自己知名度提上去,胜出几率更大点。熊猫烧香的开发者李俊,开始就是个搬水泥工人,给人看网吧的,因为一个熊猫烧香...