单片机C51编程几个有用的模块(2)

上传人:沈*** 文档编号:182351751 上传时间:2023-01-22 格式:PDF 页数:4 大小:106.23KB
收藏 版权申诉 举报 下载
单片机C51编程几个有用的模块(2)_第1页
第1页 / 共4页
单片机C51编程几个有用的模块(2)_第2页
第2页 / 共4页
单片机C51编程几个有用的模块(2)_第3页
第3页 / 共4页
资源描述:

《单片机C51编程几个有用的模块(2)》由会员分享,可在线阅读,更多相关《单片机C51编程几个有用的模块(2)(4页珍藏版)》请在装配图网上搜索。

1、电子下载站 资料版权归合法所有者所有 严禁用于商业用途 欢迎光临中国最大的电子工程师应用网站欢迎光临中国最大的电子工程师应用网站 网址:网址: 单片机 C51 编程几个有用的模块(2)应用举例 现在来举例说明上述几个模块的使用方法。硬件环境描述:为了控制一盏灯,需要单片机提供一个做控制功能的开关量,这里不描述外部接口电路,只说明当单片机的 P10 脚为高电平时,灯灭,当 P10 脚为低电平时,灯亮。可以通过计算机由串口发送命令来控制,或通过一个按键(push button 不是自锁式的按键)来手动控制(按键接在 P11 脚上,当键没有按下时,P11 电平为高,键按下时,引脚电平被接低),当使用

2、按键手动控制的时候,需要给计算机发送通知。设定串口通讯指令如下:数据包由 0 xff 做包头,4 个字节长,第二个字节为命令代码,第三个字节为数据,最后一个字节为校验位。命令和数据代码有如下组合:(计算机发给单片机)0 x10 0 x01:计算机控制灯亮。(数据位是非零值即可)0 x10 0 x00:计算机控制灯灭。(单片机发给计算机)0 x11 0 x01:单片机正常执行控制指令,返回。(数据位是非零值即可)0 x11 0 x00:单片机不能够正常执行控制指令,或控制指令错(不明含义的数据包或校验错等)。0 x12 0 x01:手动控制灯亮。(数据位是非零值即可)0 x12 0 x00:手动

3、控制灯灭。建立工程:在硬盘上建立文件夹 Projects,在 Projects 下建立 Common 文件夹及 Example 文件夹。将各模块的头文件及实现文件拷贝到 Common 文件夹下(推荐使用这样的文件组织结构,其它工程也可以建立在 Projects下,各工程共享 Common 文件夹中的代码)。启动 KeilC 的 IDE,在 Example 下建立新工程,将各模块的实现文件包含进工程。在 Example 文件夹下建立 Output 文件夹,更改工程设置,将 Output 作为输出文件和 List 文件的输出文件夹(推荐使用这样的结构,当保存工程文件时,可以简单的删除 Output

4、 文件夹中的内容而不会误删有用的工程文件)。建立工程配置头文件 Config.h 及工程主文件 Example.c,并将 Exmaple.c 文件加入工程。输入代码:代码的具体编写过程略。下面是最后的 Config.h 文件及 Example.c 文件。/File:Config.h/#ifndef _CONFIG_H_#define _CONFIG_H_#include /使用 AT89C52 做控制#include“./Common/Common.h”/使用自定义的数据类型#define TIMER_RELOAD 922 /11.0592MHz 晶振,1ms 中断周期 电子下载站 资料版权归

5、合法所有者所有 严禁用于商业用途 欢迎光临中国最大的电子工程师应用网站欢迎光临中国最大的电子工程师应用网站 网址:网址: 2#define TIMER_KBSCANDELAY 40 /40ms 重检测按键状态,即 40ms 消抖#define SCOMM_AsyncInterface /使用异步通讯服务#define IsPackageHeader(x)(x)=0 xff)/判断包头是不是 0 xff#define IsPackageTailer(x,y,z)(y)=(z)/判断包的长度是不是足够#endif/_CONFIG_H_ /File:Example.c/#include#includ

6、e“./Common/Common.h”#include“./Common/Timer.h”#include“./Common/Scomm.h”#include“./Common/KBScan.h”BIT gbitLampState=1;/灯的状态,缺省为 off static void Initialize()InitTimerModule();/初始化时钟模块 InitSCommModule(0 xfd,TRUE);/初始化通讯模块,11.0592MHz 晶振,/波特率为 19200 EA=1;/开中断 void main()Initialize();/初始化 while(TRUE)/主循

7、环 ImpTimerService();/实现时钟中断服务,如键盘扫描 AsyncRecePackage(4);/接收 4 个字节长的数据包 /在中断外部响应时钟中断事件 void OnTimerEvent()/do nothing /控制外部灯 static void TriggerLamp(BIT bEnable)电子下载站 资料版权归合法所有者所有 严禁用于商业用途 欢迎光临中国最大的电子工程师应用网站欢迎光临中国最大的电子工程师应用网站 网址:网址: 3 P10=bEnable;/需要反相控制 /键扫描回调函数 BYTE KBScan()BIT b;P11=1;/读之前拉高引脚电平 b

8、=P11;/读入引脚状态 return b;/数据反相做扫描码 /计算校验和 static BYTE CalcCheckSum(BYTE*pbyBuf,BYTE byLen)BYTE by,bySum=0;for(by=0;by byLen;by+)bySum+=pbyBufby;return 0 bySum;/接收到键盘消息回调函数 void OnKeyPressed(BYTE byValue,BYTE byState)BYTE by4;if(byState=0)switch(byValue)case 0 x01:gbitLampState=g bitLampState;/灯状态取反 Tri

9、ggerLamp(gbitLampState);/执行控制 by0=0 xff;/构造数据包 by1=0 x12;by2=(BYTE)gbitLampState;by3=CalcCheckSum(by,3);/求校验和 SendPackage(by,4);/发送数据包 break;/处理其它扫描码 default:break;电子下载站 资料版权归合法所有者所有 严禁用于商业用途 欢迎光临中国最大的电子工程师应用网站欢迎光临中国最大的电子工程师应用网站 网址:网址: 4 /接收到数据包回调函数 void OnRecePackage(BYTE*pbyBuf,BYTE byBufLen)BYTE

10、by4;by0=0 xff;by1=0 x11;if(byBufLen!=4|pbyBuf3!=CalcCheckSum(pbyBuf,3)by2=0;by3=CalcCheckSum(by,3);SendPackage(by,4);/处理长度或校验和不正确 switch(pbyBuf1)case 0 x10:gbitLampState=(BIT)pbyBuf2;TriggerLamp(gbitLampState);by2=1;by3=CalcCheckSum(by,3);SendPackage(by,4);/发送成功执行通知 break;default:/不知道的命令 by2=0;by3=CalcCheckSum(by,3);SendPackage(by,4);/发送没有成功执行通知 break;

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!