小型电子产品软件开发——复习版指南.docx

上传人:b****9 文档编号:134752 上传时间:2022-10-04 格式:DOCX 页数:40 大小:432.77KB
下载 相关 举报
小型电子产品软件开发——复习版指南.docx_第1页
第1页 / 共40页
小型电子产品软件开发——复习版指南.docx_第2页
第2页 / 共40页
小型电子产品软件开发——复习版指南.docx_第3页
第3页 / 共40页
小型电子产品软件开发——复习版指南.docx_第4页
第4页 / 共40页
小型电子产品软件开发——复习版指南.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

小型电子产品软件开发——复习版指南.docx

《小型电子产品软件开发——复习版指南.docx》由会员分享,可在线阅读,更多相关《小型电子产品软件开发——复习版指南.docx(40页珍藏版)》请在冰豆网上搜索。

小型电子产品软件开发——复习版指南.docx

目 录

试题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发出提示音。

软件

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

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1