单片机程序结构.pptx

上传人:夺命阿水 文档编号:351279 上传时间:2023-04-23 格式:PPTX 页数:18 大小:114.38KB
返回 下载 相关 举报
单片机程序结构.pptx_第1页
第1页 / 共18页
单片机程序结构.pptx_第2页
第2页 / 共18页
单片机程序结构.pptx_第3页
第3页 / 共18页
单片机程序结构.pptx_第4页
第4页 / 共18页
单片机程序结构.pptx_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《单片机程序结构.pptx》由会员分享,可在线阅读,更多相关《单片机程序结构.pptx(18页珍藏版)》请在课桌文档上搜索。

1、单片机程序结构,单片机程序结构,单片机程序结构,void main()sysinit();moduleInit();while(1)if(!ADTimer)ADTimer=500;处理AD数据;if(!KeyTimer)KeyTimer=10;扫描按键;,if(!LEDTimer)LEDTimer=2;扫描LED;if(hp!=rp)处理串行接口数据;,单片机程序结构,void SysTick_Handler()if(ADTimer)ADTimer-;if(KeyTimer)KeyTimer-;if(LEDTimer)LEDTimer-;,时间片轮询法架构,1.设计一个结构体:/任务结构typ

2、edef struct _TASK_COMPONENTSuint8Run;/程序运行标记:0-不运行,1运行uint8Timer;/计时器uint8ItvTime;/任务运行间隔时间void(*TaskHook)(void);/要运行的任务函数TASK_COMPONENTS;,时间片轮询法架构,2.任务运行标志出来,此函数就相当于中断服务函数,需要在定时器的中断服务函数中调用此函数,这里独立出来,并于移植和理解。voidTaskRemarks(void)uint8i;for(i=0;iTask_Max;i+)/逐个任务时间处理if(TaskCompsi.Timer)/时间不为0TaskComp

3、si.Timer-;/减去一个节拍if(TaskCompsi.Timer=0)/时间减完了TaskCompsi.Timer=TaskCompsi.ItvTime;/恢复计时器值TaskCompsi.Run=1;/任务可以运行,时间片轮询法架构,3.任务处理,主程序中调用voidTaskProcess(void)uint8i;for(i=0;iTASKS_MAX;i+)/逐个任务时间处理if(TaskCompsi.Run)/时间不为0TaskCompsi.TaskHook();/运行任务TaskCompsi.Run=0;/标志清0,时间片轮询法架构,4.应用建立任务staticTASK_COMP

4、ONENTSTaskComps=0,1000,1000,TaskDisplayClock,/显示时钟0,10,10,TaskKeyScan,/按键扫描0,5,5,TaskLedScan,/动态刷新LED/可以继续添加任务。;,时间片轮询法架构,4.应用编写各个任务函数void TaskDisplayClock()void TaskKeySan()void TaskLedScan(),时间片轮询法架构,4.应用编写主函数void main(void)InitSys();/初始化while(1)TaskProcess();/任务处理,按键扫描程序,unsigned char read_key(vo

5、id)unsigned char key_press;/按键是否被按下 unsigned char key_return=0;/按键返回值 key_press=key_sr1;/读按键I/O电平 if(!key_press)delay(10);key_press=key_sr1;/读按键I/O电平 if(!key_press)key_return=1;,状态机按键扫描程序,按键初始状态,按键按下状态,按键释放状态,I/O口低电平,I/O口高电平,I/O口高电平,I/O口低电平,I/O口低电平,I/O口高电平,执行按键动作,按键扫描程序,/*名 称:状态机按键扫描功 能:运用状态机思想,实现按下

6、按键LED点亮,再按一下LED灯熄灭。作 者:创建时间:2014年12月14日修改时间:备 注:*/#include/头文件#includeKey_State.h/按键扫描头文件sbit Led=P07;/LED灯输出unsigned char Key_Number=0;/按键值,按键扫描程序,/*函数名称:主程序功 能:程序执行的入口返 回 值:无时 间:2014-12-14 备 注:*/void main()while(1)if(!Key_Timer)Key_Timer=10;/在定时器内每1Ms增1 Key_Number=read_key();/按键扫描函数,取得按键值,10MS调用一次

7、 if(Key_Number=1)/按键返回值是1 Led=Led;/LED灯取反,按键扫描程序,Key_State.c#includesbit key_sr1=P16;/按键输入口#define key_state_0 0/按键的初始状态#define key_state_1 1/按键按下的状态#define key_state_2 2/按键释放的状态,按键扫描程序,/*函数名称:按键扫描程序功 能:检测按键,并返回按键值返 回 值:key_press时 间:2014-12-14 备 注:*/unsigned char read_key(void)static char key_state=

8、0;/按键的状态 unsigned char key_press;/按键是否被按下 unsigned char key_return=0;/按键返回值 key_press=key_sr1;/读按键I/O电?switch(key_state)return key_return;/返回按键值,按键扫描程序,switch(key_state)case key_state_0:/按键初始态 break;case key_state_1:/按键确认态 break;case key_state_2:/按键释放的状态 break;,按键扫描程序,case key_state_0:/按键初始态 if(!key_press)key_state=key_state_1;/键被按下,状态转换到键确认态 break;case key_state_1:/按键确认态 if(!key_press)key_return=1;/按键仍按下,按键确认输出为“1”key_state=key_state_2;/状态转换到键释放态 else key_state=key_state_0;/按键已抬起,转换到按键初始态 break;case key_state_2:if(key_press)key_state=key_state_0;/按键已释放,转换到按键初始 break;,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号