16位单片机期末大作业实验报告Word文件下载.docx
- 文档编号:7528241
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:12
- 大小:2.19MB
16位单片机期末大作业实验报告Word文件下载.docx
《16位单片机期末大作业实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《16位单片机期末大作业实验报告Word文件下载.docx(12页珍藏版)》请在冰点文库上搜索。
使用使用键盘中断、PWM及LED数码管实现用键盘调整PWM呼吸灯的渐变快慢,同时用LED显示当前的速度级:
1、PWM占空比(如图1)。
2、16键键盘中断(如图2)。
图2键盘中断接线原理图
3、8段LED数码管(如图3)。
图3LED数码管结构图
二、实验设备及其连接
(一)、试验设备:
1.PC机一台
2.S12嵌入式开发系统一台
3.导线九根
4.小键盘一个
5.4连排共阴极8段数码管一个
(二)、设备连接:
1.键盘采用手动接线,将键盘接入双排插孔下一排插孔;
2.PTP0~3分别接键盘接线处的1~4;
3.PTA0~3分别接5-8;
4.8段数码管插到指定位置;
5.小灯接PP7口。
三、实验内容
1.在键盘中断主程序里添加PWM及LED的头文件(.h)及源文件(.c),并在键盘中断主程序main.c中添加PWM占空比小灯及LED显示程序:
2.在中断程序isr.c中添加PWM占空比小灯及LED显示程序:
3.运行程序并记录实验现象:
四、程序展示
1.添加头文件声明。
2.在main.c中添加time变量及LEDbuf[4]数组,其中time用来改变PWM渐变中的Delay延时时间,LEDbuf则用来显示每次按键改变的速度值:
main.c程序展示:
#include"
Includes.h"
//包含总头文件
//在此添加全局变量定义
uint8iii;
uint8period;
uint8duty;
uint8time=100;
uint8LEDbuf[4];
//主函数
voidmain()
{
//0.1主程序使用的变量定
uint32mRuncount=0;
//运行计数器
//uint8period,duty,time=10;
//0.2关总中断
DisableInterrupt();
//0.3芯片初始化
MCUInit(FBUS_32M);
//0.4模块初始化
Light_Init(Light_Run_PORT,Light_Run,Light_OFF);
//RUN指示灯初始化为暗
SCIInit(0,FBUS_32M,9600);
//串口0初始化
KBInit();
//键盘初始化
PWMInit(7);
//初始化PWM通道1
LEDInit();
//Light_Init(Light_Run_PORT,Light_Run,Light_OFF);
//0.5开放中断
EnableSCIReInt0;
//开放SCI0接收中断
EnableKBint();
//开放键盘中断
EnableInterrupt();
DDRB=0xff;
PORTB=0x00;
//开放总中断
period=0xFF;
//PWM周期
duty=0x00;
LEDbuf[0]='
0'
;
//待显示数据0000
LEDbuf[1]='
LEDbuf[2]='
LEDbuf[3]='
//主循环
for(;
)
{//inti,j,k;
LEDShow(LEDbuf);
//Light_Change(Light_Run_PORT,Light_Run);
//指示灯的亮、暗状态切换
//}
//---------------------------------------------------------------------
//2.通过占空比的变化来调节小灯的亮度
for(duty=0;
duty<
0xff;
duty++)
{
PWMSetting(7,period,duty);
//不断增加PWM的占空比
Delay(time);
}//延时
for(duty=0xff;
duty>
0;
duty--)
}
3.在isr.c中添加对按键的判断,当按下按键时,缩短Delay延时使得小灯闪烁速度加快,同时改变LEDbuf数组的值使得LED显示当前的按键值(速度级)。
isr.c部分程序展示:
//头文件包含,及宏定义区
//头文件包含
#include"
#pragmaCODE_SEG__NEAR_SEGNON_BANKED
externuint8iii;
externuint8time;
externuint8LEDbuf[4];
//中断服务程序区
//未定义的中断处理函数,本函数不能删除,默认
__interruptvoidisr_default(void)
{
}
//键盘中断
__interruptvoidisrKeyBoard(void)
uint8valve;
uint16i;
DisableKBint();
for(i=0;
i<
20000;
i++)
;
//延时
valve=KBScanN(10);
//扫描键值,存于value中
//SCISend1(0,valve);
//发送键值
//SCISend1(0,KBDef(valve));
//发送键盘值
if(valve==0xEB)
time=50;
1'
}
if(valve==0xDB)
time=10;
2'
if(valve==0xBB)
time=5;
3'
if(valve==0xED)
time=1;
4'
if(valve==0xE7)
time=100;
LEDbuf[3]='
五、实验小结
这次实验的难点在于键盘与PWM公用了一个通道,使得程序串行执行PWM小灯闪烁与键盘按键的等待(消抖),所以一开始无论怎么改程序始终会导致小灯渐变超慢。
最后解决办法是把PWM小灯的通道从PP1改成PP7,这样一来就不再占用同一通道,使得可以并行处理键盘和PWM小灯;
之后添加LED显示也就顺利成章了。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 16 单片机 期末 作业 实验 报告
![提示](https://static.bingdoc.com/images/bang_tan.gif)