小型电子产品软件开发——复习版指南Word文件下载.docx
- 文档编号:849885
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:40
- 大小:432.77KB
小型电子产品软件开发——复习版指南Word文件下载.docx
《小型电子产品软件开发——复习版指南Word文件下载.docx》由会员分享,可在线阅读,更多相关《小型电子产品软件开发——复习版指南Word文件下载.docx(40页珍藏版)》请在冰点文库上搜索。
仿真截图 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
判断按键
是否按下?
按键1
按键2
按键3
按键4
P1=0x00
P1=0x55
P1=0x0f
P1=0xff
延时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<
reg51.h>
//包含单片机寄存器的头文件
#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<
n;
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按下
//延时20ms消抖if(S2==0) //如果按键S2确实按下
S2);
flag=2;
//延时变量为2,代表定时0.3秒的情况LED=0x55;
//1357奇数位LED关闭,2468偶数位LED点亮TR0=1;
//启动定时器T0
} //0.3秒间隔闪烁
if(S3==0) //如果按键S3按下
//延时20ms消抖if(S3==0) //如果按键S3确实按下
S3);
flag=3;
//延时变量为3,代表定时0.2秒的情况LED=0x0f;
//低4位LED关闭,高4位位LED点亮TR0=1;
} //0.2秒高低4位间隔闪烁
if(S4==0) //如果按键S3按下
//延时20ms消抖if(S4==0) //如果按键S4确实按下
S4);
flag=4;
//延时变量为4,代表定时关闭的情况TR0=0;
//关闭定时器
} //全灭
/******************************************************************
定时器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秒的情况
if(q==6) //如果计满6次即0.3秒
//8只LED小灯以0.3秒间隔闪烁
if(flag==3) //延时变量为3,代表定时0.2秒的情况
if(q==4)//如果计满4次即0.2秒
//8只LED小灯以0.2秒间隔高低4位闪烁q=0;
//中断次数清零
//定时器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发出提示音。
判断按键是否
按下?
判断是否
count>
9
count<
count=0,声音提示
count=9,声音提示
Count--
count++
S4按下执行中断INT1
S3按下执行中断INT0
编写完整程序实现如下模拟计数器功能,开发板4个按键从左至右分别为S1-S4,开发板上电复位后显示0,利用S3、S4做外部中断输入(要求用外部中断实现),按下S3显示数据加1,按下S4数据显示减1,当计数小于0时,显示0并蜂鸣器发"
嘟"
声提示,当数据大于9时,显示9并蜂鸣器发"
声提示。
******************************************************************/#include<
sbitbuz=P1^0;
//buz接蜂鸣器
sbitwei=P2^0;
//数码管位选通位
sbitS3=P3^2;
sbitS4=P3^3;
unsignedchari;
//定义全局变量iunsignedcharflag;
//蜂鸣器鸣叫标志位
unsignedcharcodetab[]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
//共阳极0~9的段码
//延时函数,入口参数为n,没有出口参数voiddelayms(unsignedintn)
//主函数main()
EA=1;
//打开总中端EX0=1;
//打开外部中断0
EX1=1;
//打开外部中断1
IT0=1;
//设置外部中断0触发方式为边沿触发IT1=1;
//设置外部中断1触发方式为边沿触发while
(1)
wei=0;
//选通7段数码管第1位P0=tab[i];
//让数码管显示0~9if(flag)
flag=0;
//清蜂鸣器鸣叫标志位buz=0;
//蜂鸣器鸣叫delayms(500);
//延时500毫秒buz=1;
//蜂鸣器关闭
voidint0()interrupt0//外部中断0
//延时消抖if(S3==0)//按键确认按下
//等待按键松开if(i<
9)//判断i是否小于9
i++;
//i自加
else//i不小于9
i=9;
//给i直接赋值9flag=1;
//蜂鸣器鸣叫
voidint1()interrupt2//外部中断1
//延时消抖if(S4==0)//按键确认按下
//等待按键松开if(i>
0)//判断i是否大于0
i--;
//i自减
else//i不大于0
i=0;
//给i直接赋值0flag=1;
试题3.23 按键控制组合灯软件开发
在下列开发板硬件(原理图见pdf文档)基础上,编写完整程序实现如下功能,4个按键分别控制2个灯,4个按键从左至右分别称为S1-S4,单片机引脚1、2所接灯分别为LED1、LED2,按下S1控制LED1亮灭变化(当前灭则点亮,当前亮则变灭),S2控制LED2亮灭变化,S3开所有灯,S4关闭所有灯。
根据开发板硬件电路,P1口为8位LED端口,LED1接P10,LED2接P11,P3端口低四位为独立按键S1、S2、S3和S4。
循环扫描P3口的低四位,判断按键是否按下,当确认S1按键被按下后执行LED1亮灭变化(当前灭则点亮,当前亮则变灭);
同理当确认S2按键被按下后执行LED2亮灭变化(当前灭则点亮,当前亮则变灭);
当确认S3按键被按下后开启LED1、LED2;
当确认S3按键被按下后关闭LED1、LED2。
LED1取反
LED2取反
LED1、2全
/************************************************************************
编写完整程序实现如下功能,4个按键分别控制2个灯,4个按键从左至右分别称为S1-S4
,单片机引脚1、2所接灯分别为LED1、LED2,按下S1控制LED1亮灭变化(当前灭则点亮,
当前亮则变灭),S2控制LED2亮灭变化,S3开所有灯,S4关闭所有灯。
*************************************************************************/#include<
sbits1=P3^0;
//按键S1位sbits2=P3^1;
//按键S2位sbits3=P3^2;
//按键S3位sbits4=P3^3;
//按键S4位sbitLED1=P1^0;
//LED1位sbitLED2=P1^1;
//LED2位
n毫秒延时函数入口参数:
出口参数:
****************************************************************/
voiddelayms(unsignedintn)
主函数
****************************************************************/main()
while
(1)//死循环
if(s1==0)//判断按键S1是否被按下
//延时20毫秒if(s1==0)//判断按键S1是否被按下
s1);
//等待按键松开LED1=!
LED1;
//LED1灯取反
elseif(s2==0)//判断按键S2是否被按下
//延时20毫秒
if(s2==0)//判断按键S2是否被按下
s2);
//等待按键松开LED2=!
LED2;
//LED2灯取反
elseif(s3==0)//判断按键S3是否被按下
//延时20毫秒if(s3==0)//判断按键S3是否被按下
s3);
//等待按键松开LED1=0;
//点亮LED1LED2=0;
//点亮LED2
elseif(s4==0)//判断按键S3是否被按下
//延时20毫秒if(s4==0)//判断按键S3是否被按下
s4);
//等待按键松开LED1=1;
//熄灭LED1LED2=1;
//熄灭LED2
试题3.24 频率计软件开发
在下列开发板硬件(原理图见pdf文档)基础上,编写程序,使频率计在上电后,具有:
能测试1-100HZ的低频信号;
并把结果显示在数码管上。
误差小于1HZ。
根据开发板硬件电路,P0口为数码管段选操作端口,P2口为数码管位选操作端口,使用3位数码管显示当前输入脉冲的频率。
将T0工作于定时工作方式的模式1,T1工作于计数工作方式的模式2,T0用于定时50毫秒,每20次定时次数到即为
1秒,定时1秒到,读取T1的计数结果,即为输入脉冲在1秒内的脉冲个数,也即频率。
输入脉冲应接T1的外部脉冲输入端即P3.5。
初始化定时器
T0定时1秒
到?
TL1清零,中断次数清零
数码管显示T1计数值也即频率
启动定时器
/***********************************************************************
技能抽查第四题:
编写程序,使频率计在上电后,具有:
能测试1-100HZ的低频信号;
并把结果显示在数码管上。
*************************************************************************/
#include<
//包含单片机寄存器的头文件sbitpulse=P3^5;
//脉冲输入从T1/P3.5送入unsignedcharq;
//记录中断次数,定时1sunsignedintcnt;
//脉冲次数暂存
unsignedchartable[]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xbf};
//共阳极数码管0~9、-的段码表
n毫秒延时函数入口参数:
显示子函数入口参数:
cnt
****************************************************************/voiddisplay(unsignedintcnt)
P2=table[cnt/100];
P0=0x7f;
delayms
(1);
P0=0xff;
P2=table[cnt/10%10];
P0=0xbf;
P2=table[cnt%10];
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 小型 电子产品 软件 开发 复习 指南