中断矩阵键盘程序设计
电气工程系俞骋
【授课班级】12电气B
【授课时间】2016年3月23日上午第2节
【授课课时】1课时(45分钟)
【教材分析及处理】
本节课的内容取自中国水利水电出版社出版的郭志勇主编的单片机应用技术项目教程寄存器参数设置在此基础上进行
【教学对象分析】
本节课的教学对象是高级工大专班的学生。已经学习了单片机及C语言的基础知识,会使用PROTEUS仿真软件及KEIL编译软件。此前已经有一个学期的单片机学习经历,具备用C语言编写简单程序控制单片机的能力;已经学习过矩阵式键盘的相关理论,对矩阵式键盘的接线和键盘扫描程序均有所了解。本学期刚刚学习了中断的相关内容,初步具备中断的概念,有使用1个外部中断的C语言编程经历。对于技工院校的学生来说,文化基础、理解分析能力普遍较差,学习缺乏主动性、自觉性,但是好奇心强,对新生事物比较容易接受,并具有较强探索欲望和参与表现欲。
【教学目标】
1、知识目标:(1)巩固外部中断的寄存器设置及相应的C语言编程;
(2)巩固矩阵式键盘的连接方式;
(3)了解模块化编程的总体流程;
2、能力目标:(1)实际动手操作能力;
(2)发现问题与解决问题能力;
(3)团队协作能力;
3、情感目标:(1)培养学生的竞争意识、风险意识;
(2)培养相互协作的团队意识;
(3)树立认真负责的工作态度;
【教学重难点】
教学重点:外部中断的寄存器设置
教学难点:矩阵键盘接口的初始化
【教学方法】任务引领、小组协作
【教学工具】直流电源、万用表、多媒体设备、投影仪
【】 新课导入
(5分钟) 1、场景模拟:公司研发团队A已经完成键盘扫描部分的程序设计并通过测试。团队B已完成中断服务部分的程序设计;要求你部完成整个程序的组装并完成整体调试
2、通过两个案例介绍模块化设计和生产在实际中的应用。
观看多媒体,积极思考 1、通过任务引领,场景模拟,使学生获得一定程度的职体验;
2、通过网络资源和视频短片,激发学生对模块化设计的兴趣。 环节一
讲授新课:
任务分析
(5分钟) 1、结合原理图,分析已经获得的资源和需要完成的任务
2、已有程序模块功能描述
3、分析各模块之间的功能逻辑关系,确定主程序所承担的功能
认真听讲,积极思考
通过阅读学案中有关各程序模块的功能描述,概括各模块的功能要点
认真听讲,积极思考
通过对任务的总体分析,使学生掌握各程序模块之间的逻辑关系,从而确定主程序所要完成的任务。
此外,该环节的设计还有利于培养学生的大局观,概括能力以及分析问题的能力。 环节二
主程序的编写(15分钟) I/O口初始电平设置
问题1:如何设置P1口?
通过仿真软件的演示,引导学生归纳出P1口的电平设置
讲解矩阵键盘的接线规则,仿真软件结合PPT动画,归纳出P0口的电平设置
2、寄存器的设置
问题2:根据要求完成寄存器参数的设置
引导学生完成中断相关寄存器参数的设置
3、完成主程序的编写
布置任务一:新建一个C程序文档并完成主程序的编写 观看PPT及教师仿真,思考归纳P1口的电平设置。
观看PPT动画并听老师的分析,思考归纳P1口的电平设置。
查阅书本,思考,完成问题1
在keil软件中编写,调试主程序。 巩固数码管点亮的相关知识;
复习,巩固矩阵键盘的接线方式
复习,巩固外部中断相关的寄存器参数的设置
综合之前的分析结果,巩固,练习C语言编程技能。
环节三
模块的组装及最终调试
(15分钟) 检查接口
教师简述检查接口的意义
问题3:在给出的程序中找到接口并检查各接口是否正确接洽。
程序的组装及调试
布置任务二
最终的测试
布置任务三
认真听讲,阅读给出的程序,回答问题3
在Keil上组装相关程序段以完成完整的程序,调试并在Proteus中观看仿真结果
将程序载入单片机并在实物中调试,观看程序运行情况。
培养学生编程中的大局观;训练学生阅读程序的能力。
环节四
课堂小结
(3分钟) 教师提问:
你设计的程序是否达到了预期的目的?
你设计的程序是否还有可以改进的地方? 认真思考,积极作答 总结课堂主要内容,引导学生反思。 环节五
布置作业
(2分钟) 请大家完成项目评价表 完成项目评价表 获取反馈信息,为教学反思和今后的改进奠定基础。
板书设计
投影屏幕
中断矩阵键盘程序设计
1、各模块间的关系P0=0X0f;
主程序设计
P1=0Xff;
教学反思:
本次课通过对教材项目的改编,旨在树立学生的大局观和模块化编程意识,同时起到巩固之前所学的知识技能,如外部中断的概念,相应寄存器参数设置,以及矩阵键盘的接线。但是由于第一次接触到模块化这一概念,学生仅通过一次课的学习可能难以对模块化有深入的体验。此外,学生之前在矩阵键盘的工作原理,中断相关参数设置等内容的学习中可能并未很扎实地掌握相关知识和技能,也有可能会影响到本次课的教学进度及效果。
宁波金蓝领电子有限公司
工作任务单
2016年3月23日No.000001
任务要求 任务要求:本公司正在开发一矩阵键盘控制系统。公司研发团队A已经完成键盘扫描部分的程序设计并通过测试。团队B已完成中断服务部分的程序设计;要求你部完成整个程序的组装并完成整体调试。(详见资料包) 发单时间:9:00 要求完成时间:9:45 派单人:XXX 接单人:XXX 开始时间:9:15 完成时间: 资料清单 资料包:内含以下3个模块的程序源文件及相应模块的功能描述:(1)键盘扫描模块;(2)中断服务模块;(3)延时模块。 所需设备:安装有Keil和Proteus软件的电脑,直流电源,单片机最小系统以及矩阵键盘电路板,常用电工工具。
项目
进程
记录
主程序重要参数记录:
P0:P1:
EA::EX0:IT0: 是否完成主程序的编写是□否□
是否完成主程序的编译调试是□否□
是否检验各模块之间的接口是□否□
是否完成模块的组装是□否□
是否完成程序的最终编译调试是□否□
是否通过仿真测试是□否□
是否完成实物测试是□否□
程序员签字:检验员签字: 故障及排除记录:
程序员签字:检验员签字: 验收项目 员工态度是否端正是□否□
本次任务是否已解决问题是□否□
是否按时完成是□否□
项目经理签字: 验收时间
各模块程序源文件及功能描述
中断服务模块
程序功能描述:本模块主要实现以下功能:1、通过延时10ms再判断是否有键盘按下来完成去抖动;2、从键盘扫描模块获得所按下键盘的编号;3、根据获得的键盘编号将对应的字型代码从P1口输出以点亮数码管。
源代码:
voidscan_key_led(void)interrupt0
{
chark;
unsignedcharkey,tmp;
delay();//延时10ms去抖
P0=0x0f;//所有列输出低电平
tmp=P0;//再次读键盘状态
if(tmp!=0x0f)
{
key=scan_key(); //有键按下,调用键盘扫描程序,并把键值送key
while(k!=-1) //判断闭合键是否释放,直到其释放
{
delay(); //延时等待
k=scan_key();
}
P1=table[key]; //字型码送P1口,数码管显示被按下键对应的字符
P0=0x0f;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
键盘扫描模块
程序功能描述:本模块首先确定按下键盘在矩阵中的位置(几行几列),然后将对应的位置参数转换成唯一的键盘编号并将该值返回。
源代码:
unsignedcharscankey(void)//键盘扫描子程序
{
unsignedcharn,scan,col,rol,tmp;
bitflag=0;//设有键按下标志位
scan=0xef;
P0=0x0f;//P0口低四位做输入口,先输出全1
for(n=0;n<4;n++)//循环扫描4列,从0列开始
{
P0=scan;//逐列送出低电平
tmp=~P0;//读行值,并取反
tmp=tmp&0x0f;
col=n;//保存列号到col
flag=1;
/判断哪一行有键按下,并保存行号到rol/
if(tmp==0x01)
{rol=0;break;}//第0行有键按下
elseif(tmp==0x02)
{rol=1;break;}//第1行有键按下
elseif(tmp==0x04)
{rol=2;break;}//第2行有键按下
elseif(tmp==0x08)
{rol=3;break;}//第3行有键按下
else
flag=0;
scan=(scan<<1)+1;
}
if(flag==0)
return-1;
else
return(rol4+col);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
延时模块
程序功能描述:通过两层循环实现延时功能。
源代码:
/10ms延时程序/
voiddelay10ms(void)
{
unsignedchari,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
矩阵键盘硬件系统电路原理图
|
|