小型电子产品软件开发——复习版指南.docx
- 文档编号:134752
- 上传时间:2022-10-04
- 格式:DOCX
- 页数:40
- 大小:432.77KB
小型电子产品软件开发——复习版指南.docx
《小型电子产品软件开发——复习版指南.docx》由会员分享,可在线阅读,更多相关《小型电子产品软件开发——复习版指南.docx(40页珍藏版)》请在冰豆网上搜索。
目 录
试题3.21按键控制彩灯软件开发 3
功能分析 3
软件流程图 3
程序代码 4
仿真截图 7
试题3.22计数器软件开发 8
功能分析 8
软件流程图 8
程序代码 9
仿真截图 11
试题3.23按键控制组合灯软件开发 12
功能分析 12
软件流程图 12
程序代码 12
仿真截图 14
试题3.24频率计软件开发 16
功能分析 16
软件流程图 16
程序代码 17
仿真截图 18
试题3.25小型电子产品软件开发 20
功能分析 20
软件流程图 20
程序代码 21
仿真截图 22
试题3.26秒表软件开发 23
功能分析 23
软件流程图 23
程序代码 23
仿真截图 26
试题3.27倒计时秒表软件开发 27
功能分析 27
软件流程图 27
程序代码 27
仿真截图 30
试题3.28小交通灯控制软件开发 31
功能分析 31
软件流程图 31
程序代码 32
仿真截图 34
试题3.29单片机与PC机通信软件开发 35
功能分析 35
软件流程图 35
程序代码 35
试题3.30单片机与PC机通信软件开发 37
功能分析 37
软件流程图 37
程序代码 38
试题3.21 按键控制彩灯软件开发
一、任务
在下列开发板硬件(原理图见pdf文档)基础上,编写完整程序实现如下模拟彩灯,开发板从左至右4个按键分别为S1-S4,从上至下8个灯为L1-L8,按下S1键8只LED小灯以1HZ频率闪烁,按下S2键8只灯奇偶交替点亮,间隔0.3S,按下S3键,L1-L4与L5-L8灯交替点亮,间隔0.2s,按下S4键熄灭所有灯。
二、要求
1、根据提供的开放板硬件,分析系统功能,并画出系统主程序流程图;
2、编写程序,程序代码要符合编程规范(函数/子程序名称、功能、入口参数、出口参数、注释等),易读性要好;
3、编译调试、下载程序;
4、调试系统达到功能指标;
5、编写设计报告。
功能分析
根据开发板硬件电路,P1口为8位LED灯端口, P3口的低四位为独立按键操作端口。
对P3口的低四位进行判断,以确定按键是否按下。
当按键S1按下,LED灯以1Hz频率闪烁,频率与周期互为倒数说明闪烁周期为1秒,在1秒钟时间能完成一次亮灭。
用定时/计数器定时500ms,每次时间一到让P1口取反一次,就可以使该端口上的LED灯实现1Hz频率的闪烁。
同理当按键S2按下后,先将P1口端口值设置为0x55,然后将定时/计数器定时300ms,每次时间一到让P1口取反一次,,就可以使该端口上的LED灯实现0.3s的奇偶交替闪烁。
当按键S3按下后,将P1口端口值设置为0x0f,然后将定时/计数器定时200ms,每次时间一到让P1口取反一次,,就可以使该端口上的LED灯实现0.2s的高低位交替闪烁。
当按键S3按下后,熄灭所有LED灯。
因为fosc=11.0592MHz,机器周期=12/11.0592MHz=1.085µs,而定时/计数器在定时模式时就是对fosc的12分频即机器周期进行计数,因此要定时1ms需要计数次数为9216次。
为了使计算中断次数少而减少误差初值应该尽量取值大一些,但模式1的16位寄存器的最大值为65536,也就是说最大初值不能超过65536,为了取整数计算方便我们这里取46080,也就是50ms,要实现1Hz、0.3s和0.2s分别为进入中断次数为10次、6次和4次。
软件流程图
开始
初始化
Y
N
判断按键
是否按下?
Y
按键1
按键2
按键3
按键4
P1=0x00
P1=0x55
P1=0x0f
P1=0xff
延时P1取
延时P1取
延时P1取
程序代码
/***********************************************************************按键控制彩灯:
编写完整程序实现如下模拟彩灯,开发板从左至右4个按键分别为S1-S4,从上至下8个灯为L1-L8,按下S1键8只LED小灯以1HZ频率闪烁,按下S2键8只灯奇偶交替点亮,间隔0.3S,按下S3键,L1-L4与L5-L8灯交替点亮,间隔0.2s,按下S4键熄灭所有灯。
晶振频率:
11.0592MHz
************************************************************************/#include
#defineLEDP1 //发光二极管接P1
sbitS1=P3^0;//将S1位定义为P3.0sbitS2=P3^1;//将S2位定义为P3.1sbitS3=P3^2;//将S3位定义为P3.2sbitS4=P3^3;//将S4位定义为P3.3
charflag=0,q=0; //flag为延时变量标志,q记录中断次数
/****************************************************************
函数功能:
n毫秒延时函数
入口参数:
n 出口参数:
无
****************************************************************/voiddelayms(unsignedintn)
{
unsignedintj,k;for(j=0;j for(k=0;k<114;k++); } voidmain(void) { TMOD=0x01; //使用定时器T0的模式1 TH0=(65536-46080)/256; //定时器T0的高8位设置初值,延时50msTL0=(65536-46080)%256; //定时器T0的低8位设置初值 ,延时50msEA=1; //开总中断 ET0=1; //定时器T0中断允许 while (1) { if(S1==0) //如果按键S1按下 { delayms(20); //延时20ms消抖if(S1==0) //如果按键S1确实按下 { while(! S1);//等待按键抬起q=0; //中断次数清零 flag=1; //延时变量为1,代表定时1秒的情况 LED=0xff; //LED全部关闭 TR0=1; //启动定时器T0 } } //1Hz频率闪烁 if(S2==0) //如果按键S2按下 { delayms(20); //延时20ms消抖if(S2==0) //如果按键S2确实按下 { while(! S2);//等待按键抬起q=0; //中断次数清零 flag=2; //延时变量为2,代表定时0.3秒的情况LED=0x55; //1357奇数位LED关闭,2468偶数位LED点亮TR0=1; //启动定时器T0 } } //0.3秒间隔闪烁 if(S3==0) //如果按键S3按下 { delayms(20); //延时20ms消抖if(S3==0) //如果按键S3确实按下 { while(! S3);//等待按键抬起q=0; //中断次数清零 flag=3; //延时变量为3,代表定时0.2秒的情况LED=0x0f; //低4位LED关闭,高4位位LED点亮TR0=1; //启动定时器T0 } } //0.2秒高低4位间隔闪烁 if(S4==0) //如果按键S3按下 { delayms(20); //延时20ms消抖if(S4==0) //如果按键S4确实按下 { while(! S4);//等待按键抬起q=0; //中断次数清零 flag=4; //延时变量为4,代表定时关闭的情况TR0=0; //关闭定时器 LED=0xff; //LED全部关闭 } } //全灭 } } /****************************************************************** 函数功能: 定时器T0的中断服务函数入口参数: n 出口参数: 无 *******************************************************************/ voidTime0(void)interrupt1using1//定时器T0的中断编号为1,使用第1组工作寄存器 { if(flag==1) //延时变量为1,代表定时1秒的情况 { q++; //累计次数 if(q==10)//如果中断次数计满10次即500毫秒 { LED=~LED; //8只LED小灯以1HZ频率闪烁 q=0; //中断次数清零 } } if(flag==2) //延时变量为2,代表定时0.3秒的情况 { q++; //累计次数 if(q==6) //如果计满6次即0.3秒 { LED=~LED; //8只LED小灯以0.3秒间隔闪烁 q=0; //中断次数清零 } } if(flag==3) //延时变量为3,代表定时0.2秒的情况 { q++; //累计次数 if(q==4)//如果计满4次即0.2秒 { LED=~LED;//8只LED小灯以0.2秒间隔高低4位闪烁q=0;//中断次数清零 } } TH0=(65536-46080)/256; //定时器T0的高8位设置初值,延时50msTL0=(65536-46080)%256; //定时器T0的低8位设置初值,延时50ms } 仿真截图 试题3.22 计数器软件开发 一、任务 在下列开发板硬件(原理图见pdf文档)基础上,编写完整程序实现如下模拟计数器功能,开发板4个按键从左至右分别为S1-S4,开发板上电复位后显示0,利用S3、S4做外部中断输入(要求用外部中断实现),按下S3显示数据加1,按下S4数据显示减1,当计数小于0时,显示0并蜂鸣器发“嘟”声提示,当数据大于9时,显示9并蜂鸣器发“嘟”声提示。 功能分析 根据开发板硬件电路,P0口为数码管段选操作端口,P2口为数码管位选操作端口, P1.0引脚连接蜂鸣器,P3.2引脚连接按键S3,P3.3引脚连接按键S4。 开通P2端口初始化数码管使其上电显示“0”,并设置计数变量初值为0,初始化外部中断 INT0和INT1,设置外部中断为负边沿触发,也就是当外部中断P3.2和P3.3引脚为下降沿时触发中断。 当按键S3按下,Count加1并在数码上显示,但Count值大于9 时,Sound发出提示音。 同理当按键S4按下,Count减1并在数码上显示,但Count 值小于0时,Sound发出提示音。 软件
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 小型 电子产品 软件 开发 复习 指南