51单片机中文编程编程问题

早期单片机比如51单片机中文编程为了提高可靠性(防止数据误读或跑飞)采用较高的分频系数对时钟分频,使得指令周期长执行速度慢。例如51单片机中文编程需要12个晶振周期才能组成1个机器周期而且很多指令需要2个机器周期才能执行。

STC51单片机中文编程设计设置软件(STC单片机工具书)可以设置串口波特率源代码查询,选型手册等等强大功能超好用,开发STC单片机必不可少的工具啊!强烈推荐!

学AVR单片机的好书是《AVR单片机嵌入式系统原理與应用实践》封面见下图。

AVR一般采用CVAVR编程也可用GUN GCC AVR、AVR Studio软件编程。可采用汇编或C语言编程烧程序前先输出HEX文件,然后用SLISP(双龙ISP)软件加載再通过ISP编程线或者25针并口连接线烧入AVR单片机,支持在线编程

由于AVR单片机最小系统很简单,就是电源+晶振(可不用)+LED+ISP接口(通电就运荇断电就停止,不用复位电路)因此任何初学者都可以用面包板搭出AVR最小系统,并且编程实践

}

1. 按键分类与输入原理

按键按照结構原理科分为两类一类是触点式开关按键,如机械式开关、导电橡胶式开关灯;另一类是无触点式开关按键如电气式按键,磁感应按鍵等前者造价低,后者寿命长目前,微机系统中最常见的是触点式开关按键

在单片机应用系统中,除了复位按键有专门的复位电路忣专一的复位功能外其他按键都是以开关状态来设置控制功能或输入数据的。当所设置的功能键或数字键按下时计算机应用系统应完荿该按键所设定的功能,键信息输入时与软件结构密切相关的过程

对于一组键或一个键盘,总有一个接口电路与CPU相连CPU可以采用查询或Φ断方式了解有无将按键输入,并检查是哪一个按键按下将该键号送入累加器,然后通过跳转指令转入执行该键的功能程序执行完成後再返回主程序。

微机键盘通常使用机械触点式按键开关其主要功能式把机械上的通断转换为电气上的逻辑关系。也就是说它能提供標准的TTL逻辑电平,以便于通用数字系统的逻辑电平相容机械式按键再按下或释放时,由于机械弹性作用的影响通常伴随有一定的时间觸点机械抖动,然后其触点才稳定下来

其抖动过程如图1所示,抖动时间的长短与开关的机械特性有关一般为5-10ms。在触点抖动期间检测按鍵的通与断可能导致判断出错,即按键一次按下或释放错误的被认为是多次操作这种情况是不允许出现的。为了克服按键触点机械抖動所致的检测误判必须采取消抖措施。按键较少时可采用硬件消抖;按键较多式,采用软件消抖

3. 独立按键与矩阵键盘

单片机控制系統中,如果只需要几个功能键此时,可采用独立式按键结构

独立按键式直接用I/O口线构成的单个按键电路,其特点式每个按键单独占用┅根I/O口线每个按键的工作不会影响其他I/O口线的状态。独立按键的典型应用如图所示独立式按键电路配置灵活,软件结构简单但每个按键必须占用一个I/O口线,因此在按键较多时,I/O口线浪费较大不宜采用。独立按键如图2所示

独立按键的软件常采用查询式结构。先逐位查询与I/O口线的输入状态如某一根I/O口线输入为低电平,则可确认该I/O口线所对应的按键已按下然后,再转向该键的功能处理程序

单片機按键一般通过配备上拉电阻来实现输入端高低电平的切换。

4条输入线接到单片机的IO口上当按键K1按下时,+5V通过电阻R1然后再通过按键K1最终進入GND形成一条通路那么这条线路的全部电压都加到了R1这个电阻上,KeyIn1这个引脚就是个低电平当松开按键后,线路断开就不会有电流通過,那么KeyIn1和+5V就应该是等电位是一个高电平。我们就可以通过KeyIn1这个IO口的高低电平来判断是否有按键按下

以普中科技51单片机中文编程开发板为例

图4为独立按键电路图 8个按键分别对应JP5的八个引脚,所有按键统一接地按键之间互不影响,JP5中包含上拉电阻当按键松开时,对应引脚输入1;当按键按下时对应引脚输入0。

图5为流水灯电路图 8个LED灯接地共阴当引脚输出1时,LED灯亮;当引脚输出0时LED灯灭。

(1) 无消抖的8个引腳控制8个LED灯

(2) 通过按键控制单个数码管计数并作消抖处理

  • 数码管初始化为0按下按键增加对应的数,例如按下Key1则增加1按下Key2则增加2
  • 超出9时,偠做越界处理
  • 按键抬起检测 按一次只加一次

(3)通过按键控制多个数码管计数

  • 功能:数码管初始化为0按下按键增加对应的数,例如按下Key1则增加1按下Key2则增加2……但是按下Key8需清零
  • 使用38译码器对COM口进行控制 节省I/O口
  • P1的三个引脚控制38译码器,其他引脚上的值不允许被改动
  • P2控制数码管段碼端的给值
  • P0控制检测按键的输入
  • 按键要消抖 抬起要检测 边界要检测

不足:按下按键时数码管全部熄灭,这是由于掉进按键检测的死循环Φ无法扫描动态数码管。改进方法等待学习中断和定时器。

(3) 通过中断来控制按钮增加数码管显示

  • P2接J12控制动态数码管段码端
  • P1.0-2接J6-三八译码器 控制动态数码管COM端
}

(1)这两天一直在受一个问题的干扰那就是做单片机串口通信的时候,有些数据总是传得不对:当显示0~f这些数字的时候显示没有错误,而显示其它8位数据的时候都错了发送11(16进制)时,到单片机上居然是49(十进制)这显然是不对的,一直怀疑是程序的问题反复地检查和修改之前编的一个数码管动态显示子程序,没有错那只能是串口初始化和串口子程序有问题了……这么想太错了……先入为主,两天以来都没解决(其实也没什么心情解决叻,又是临近周末都在看老友记),今天打定一定要解决了就开始研究,刚开始一直在沿着老路反复修改程序。。后来无意间一瞥,看到晶振上标着“12.000”瞬间明白所有问题所在,立刻改为11.0592Mhz的晶振这个开发板是别人的……居然还有人用12M的晶振!实在无语……

如果用12M嘚晶振,那么波特率只能用1200了极慢无比的速度……想用其他的波特率(2400、4800、9600)等就等用11.0592M,具体为什么看书去……

(2)第二个问题,还是串口通信的编程的时候一直用的查询RI的方法,来接收数据因为中断法就没成功过。今天想了一下原因,参考了下别人的程序把ET1=1给注释掉,发现可以了。这是因为利用定时器1作为波特率发生器时,是不用开启中断的(但要开启定时器即置位TR1)。如果开启了中断这时候定時器1的中断优先级会默认比串口的高,那样就有很大的可能进入不了串口的中断服务程序也就无法接收数据了。

}

我要回帖

更多关于 51单片机中文编程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信