16位单片机 期末大作业实验报告
单片机实验报告

单片机实验报告实验一数据传送(RAM–>XRAM)一、实验目的熟悉星研集成环境软件或熟悉Keil C51集成环境软件的使用方法。
熟悉MCS51汇编指令,能自己编写简单的程序,掌握数据传输的方法。
二、实验内容1、熟悉星研集成环境软件或熟悉Keil C51集成环境软件的安装和使用方法。
2、编写程序,实现内外部数据段的传送、校验。
三、程序框图数据传送程序框图四、实验步骤在内部RAM 30H ~3FH中输入数据;使用单步、断点方式调试程序,检测外部数据RAM 的1000H ~100FH中的内容。
熟悉查看特殊功能寄存器、内部数据RAM、外部数据空间的各种方法。
五、程序清单;将内部RAM Address1 开始的16个字节送到外部RAM从Address2开始的单元里,再作比较。
Address1 DATA 30HAddress2 XDATA 1000HORG 0000HLJMP STARORG 0100HSTAR: MOV SP,#60HMOV R0,#Address1MOV DPTR,#Address2MOV R7,#10HSTAR1: MOV A,@R0 ;传送MOVX @DPTR,AINC R0INC DPTRDJNZ R7,STAR1MOV R0,#Address1MOV DPTR,#Address2MOV R7,#10HSTAR2: MOV B,@R0 ;比较MOVX A,@DPTRCJNE A,B,STAR3INC R0INC DPTRDJNZ R7,STAR2SJMP $ ;传送正确STAR3: SJMP $ ;传送错误END实验二双字节BCD码(十进制数)加法一、实验目的熟悉51汇编指令,学会使用星研集成环境软件,能自己编写简单的程序,熟悉BCD码,了解如何调用系统提供的子程序。
二、实验内容从键盘上输入4位被加数、加数,实现双字节BCD码(四位数)的加法,结果显示在数码管上;熟悉使用断点、单步进入、单步、运行到光标处、修改PC指针、全速运行等各种调试手段;熟悉查看特殊功能寄存器、内部数据RAM、外部数据空间的各种方法。
洗衣机控制器 16位单片机大作业报告1

学院大作业报告课程名称:嵌入式系统设计与实践项目名称:《洗衣机控制器》班级:姓名:学号:成绩:________ 实验时间:2011.12.16一、设计目的运用C 语言,HCS12 16位单片机的知识,根据题目的要求进行软硬件的设计和调试,从而加深对于本课程知识点的理解,掌握了如何使用CodeWarrior 来整合各种驱动模块,再通过算法实现硬件上的运行。
二、功能描述最终运行的功能为:1、DG128开启,上电,LCD 提示显示输入。
2、键入所选定时量程,LCD 开始计时,此时,洗衣机启动。
3、定时结束,LCD 提示计数完毕,洗衣机工作完毕。
此时,手动关闭电源即可。
通过对于CodeWarrior 软件的操作,编写代码,最终实现freescaleHCS12DG128单片机简单控制家用洗衣机的开启——计数——关闭功能。
三、硬件连接图7-1 MCU 与LCD 的连接PTA0 PTA1 PTA2 PTA3 PTA4 PTA5 PTA6 PTA7PTA 口(KEY1-8)Vcc四、设计方案定时档位:在洗衣机启动的时候,LCD上电,显示提示输入,键入不同的键,所对应的模式不同,共分为20分钟、25分钟、、、65分钟10个定时档。
每个键所定义的模式为:键定义值0键位20分钟,键定义值每加1,相应计数值在20的基础上加5分钟。
主要驱动模块键盘驱动源文件:KBI_I.c.计数驱动模块:Timer.cLCD显示驱动模块:LCD.c五、程序设计代码//头文件包含#include "Includes.h" //总头文件#include <string.h>//在此添加全局变量定义uint8 time[3];extern uint8 KB_valueN,KB_DefValue;void main(){//0.1 主函数中的变量定义uint16 remember,cnt;uint8 state=0;uint32 mRuncount=0; //运行计数器uint8 receive_data[33]="Time: ";//uint8 d;////0.2 关总中断DisableInterrupt(); //禁止总中断//0.3 芯片初始化MCUInit();//0.4 模块初始化TimerInit(); //定时器1初始化LCDInit(); //LCD初始化KBInit(); //键盘初始化Light_Init(Light_Run_PORT,Light_Run,Light_OFF); //RUN指示灯初始化为暗//0.5 开放中断//EnableTimer; //开放定时器1溢出中断EnableKBint(); //开放键盘中断EnableInterrupt(); //开放总中断time[0] = 0; //(1) "时分秒"缓存初始化(00:00:00)time[1] = 0;time[2] = 0;remember = time[2]; //(2) 临时变量remember初始化KB_valueN = 0xff;LCDShow((uint8 *)"Input: "); //LCD提示输入// 主循环for(;;){//LCD显示计数器值if (KB_valueN != 0xff){if((KB_valueN==0xee)||(KB_valueN==0xde)||(KB_valueN==0xbe)||(KB_valueN==0x7e)||(KB_valueN==0xed)||(KB_valueN==0xdd)||(KB_valueN==0xbd)||(KB_valueN==0x7d)||(KB_valueN==0xeb)||(KB_valueN==0xdb)){if(state==0){cnt = (((KBDef(KB_valueN)-0x30)+20)*60);state=1;}if(state==1){if(remember!=time[2]);{for(;;){strcpy((char*)receive_data,"Time: ");//双引号中存在除“Time:”五个字符外的27个字符remember = time[2];cnt--;if(cnt>0){receive_data[8] =(cnt/1000)+0x30;receive_data[9] =((cnt%1000)/100)+0x30;receive_data[10]=((((cnt%1000)%100)/10)+0x30);receive_data[11]=((((cnt%1000)%100)%10)+0x30);LCDShow((uint8 *)receive_data);}elseLCDShow((uint8 *)"Task is Finished ");}}}}if((KB_valueN==0xbb)||(KB_valueN==0x7b)||(KB_valueN==0xe7)||(KB_valueN==0xd7)||(KB_valueN==0xb7)||(KB_valueN==0x77 )) LCDShow((uint8 *)"Time: ");}} //for_end(主循环结束)}//main_end中断程序isr.c中要添加中断程序,如定时器溢出中断处理程序,键盘中断程序。
单片机16×16点阵显示实验总结400字

单片机16×16点阵显示实验总结400字单片机16×16点阵显示实验总结这次实验我们使用单片机设计了16×16点阵显示器的驱动电路,并成功实现了在点阵上显示字符、数字和图案的功能。
下面是对本次实验的总结。
首先,我们按照实验手册的指示,采用逐行扫描的方式驱动16×16点阵显示器。
通过设置接口电路和引脚连接,将单片机与点阵电路相连,实现数据和控制信号的传输。
接着,我们编写了相应的程序代码,在单片机上进行编译和烧录,并使用示波器进行调试。
在调试过程中,我们发现了一些常见的问题,比如接口线连接错误、引脚配置错误等,及时解决这些问题,确保了实验的顺利进行。
接下来,我们开始编写点阵显示的控制程序。
通过对点阵每一个LED灯珠的亮灭状态进行控制,我们可以实现在点阵上显示不同的字符、数字和图案。
我们编写了一个字符库,其中包含了常用字符和数字的点阵码。
通过查表的方式,我们可以根据需要在点阵上显示相应的内容。
在编写程序的过程中,我们充分利用了单片机的IO口和定时器的功能,并采用了合理的算法,提高了程序的执行效率。
在实验过程中,我们遇到了一些困难和挑战。
首先,点阵显示器的像素较多,对于单片机的计算能力和IO口的数量有一定要求。
因此,在编写程序的过程中,我们需要注意内存和资源的使用,避免发生卡顿或者无法正常显示的情况。
其次,点阵显示器的扫描速度要求较高,需要通过设置定时器的中断来实现,以确保显示的稳定性和清晰度。
通过本次实验,我们不仅掌握了单片机的基本原理和编程技巧,还深入了解了点阵显示器的工作原理和驱动方式。
通过自主设计和编写代码,我们成功实现了在16×16点阵上显示字符、数字和图案的功能。
这不仅加深了我们对嵌入式系统的理解,还提高了我们的动手实践能力和问题解决能力。
总之,通过这次实验,我们不仅学到了很多知识,还锻炼了自己的动手能力和团队合作能力。
虽然在实验过程中遇到了一些困难,但通过不懈努力和团队合作,我们最终取得了成功。
单片机实验报告

单片机实验报告班级:09050541学号:0905054116姓名:王昆鹏实验1 P1口实验一、实验目的:1.学习P1口的使用方法。
2.学习延时子程序的编写和使用。
二、实验设备:CPU挂箱、8051CPU模块三、实验内容:1.P1口做输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。
四、实验原理:P1口为准双向口,P1口的每一位都能独立地定义为输入位或输出位。
作为输入位时,必须向锁存器相应位写入“1”,该位才能作为输入。
软件延时,如果用c编程时,通过使用keil的软件模拟,调试观察子函数(delay)延时时间。
(具体延时可以自行设定)使用汇编语言的软件延时,可以计算其指令的周期数,大概估算其软件延时。
五、实验原理图:P1口输出、输入实验六、实验步骤:执行程序:P1.0~P1.7接发光二极管L1~L8。
七、程序框图:循环点亮发光二极管(具体延时可以自行设定)八、程序代码NAME T1_1ORG 0000HLJMP STARTORG 0030HSTART: MOV A,#0FEH //将1111 1110赋给A LOOP: RL A //A循环左移MOV P1,A //把A赋给端口P1LCALL DELAY //延时0.16sJMP LOOP //循环;延时函数DELAY: MOV R1,#200DEL1: MOV R2,#200DEL2: DJNZ R2,DEL2DJNZ R1,DEL1RETEND实验2 中断口实验一、实验目的:1.学习外部中断技术的基本使用方法。
2.学习中断处理程序的编程方法。
二、实验设备:CPU挂箱、8051CPU模块三、实验内容:通过设定两个中断使能和触发方式,并编写相应的中断服务子函数,改变led灯的变化情况。
当按下KEYBOARD的按键时8个led都灭,当把k1向上拉再复位后,4个led亮,4个灭。
四、实验原理:参考《单片机原理及接口技术》第三版,北京航空航天大学出版社。
16位单片机实验指导书

16位单片机应用实验指导书电子与信息工程学院2O15年2月实验一MC9S12XS128入门实验一.实验目的1.熟悉CodeWarrior嵌入式开发系统软硬件环境,掌握其使用方法及调试方式。
2.掌握S12 GPIO接口的使用方法及编程方法。
3.熟悉S12单片机的C语言程序编程框架。
4.理解样例中的第一个C语言程序代码。
二.实验设备及其连接1.PC机一台2.S12嵌入式开发实验板一套3.接线原理图实验板上有8个发光二级管和4个按钮开关, 8个发光二级管由单片机的PB口8个IO引脚控制, PB0-PB7输出低电平时LED点亮, 输出高电平时LED熄灭。
4个独立的按键输入直接连接到PP口的PP4-PP7引脚, 常态下为高电平, 按键按下时, CPU相应I/O引脚将检测到低电平, XS128芯片的PP口是有中断功能的IO口, 除了可用查询方式检测IO口的状态以外,我们也可以用中断的方式读入按键的状态。
三.实验内容1.使用CodeWarrior嵌入式开发系统的软硬件环境,掌握其使用方法及调试方式。
2.调试运行提供的样例程序light,观看实验结果。
(软件使用参见第四部分)3.运行样例程序,观察小灯的闪烁和对应的程序实现;调整延时的长短,继续观察小灯的闪烁。
4.尝试新建自己的工程,自编程序,实现用4个开关控制4个小灯的亮灭. 4个开关分别接在端口P的PTP4~PTP7口,4个小灯则接在PORTB0~PORTB3口, 参见第二部分连接图. 编程实现用这4个开关控制4个小灯,按钮开关按下时,对应小灯亮,否则为暗。
提示:新建工程时芯片选择HCS12X family-〉mc9s12xs128,connection 选择TBDML,然后下一步输入工程路径和名称,再3次下一步,选择默认选项,然后下一步、完成。
在main.c 文件中加入你的代码,主要通过设置数据方向寄存器DDRB DDRP和数据寄存器PORTB PTP来实现开关控制小灯的功能。
用单片机语言设计16位加法计算器实验报告

湖北第二师范学院计算机学院09计应单片机课程设计实验报告课程设计名称:电子计算器课程设计单位:10计应(1)班课设小组成员:徐凡(1060310039)凡平(1060310058)彭浩(1060310045)桂银(1060310010)潘光卉(1060300033)完成时间:2012年04月02日至2012年04月 24 日单片机课程设计实验报告课程设计题目:简易计算器作品功能描述:当通过输入键盘数字时,能够在显示器上显示输出的数值,并且通过想实现的简单运算功能,实现计算器的加、减、乘、除和清零,并将结果显示出来。
小组成员工作分工:徐凡:程序主框架的构造和主要功能函数的设计。
凡平:原理图的设计和硬件的焊接。
彭浩:基本功能函数的设计(“+,-,*,/”)。
桂银:程序流程图的设计和键盘扫描程序的实现。
潘光卉:编写文档和功能测试。
硬件电路设计:本设计中我们用的是AT89C52芯片,LCD1602 (PROTEUS中为LM016L)就是那个液晶屏,因为可以显示2行16个字符,故叫做LCD1602.11.0592M或12M晶振(CRYSTAL),两者均可,但要涉及到串口需选用12MKEYPAD-SMALLCALC就是那个4X4键盘电容20~30PF(CAP),接最小电路电容10PF主要接复位电路RESPACK-8排阻,为20K的,一个引脚接正极,另8个引脚接I/O口接RES电阻10K,接复位电路实物照片:硬件原理图原理说明:1,上电后,屏幕初始化;2,计算。
按下数字键,屏幕显示要运行的第一个数字,再按下符号键,然后再按下数字键,屏幕显示要运算的第二个数字,最后按下“=”号键,屏幕上显示出计算结果。
3,如果要再次计算,可以按下“ON/C”键清零,或者继续按下数字键,即可重新计算。
键盘使用说明如下:按键功能说明:Array“+”实现两个数的相加“-”实现两个数的相减“×”实现两个数的乘积“÷”实现两个数商的运算“ON/C”计算器显示的清零和接通电源程序控制流程图:软件设计:在程序设计方法上,模块化程序设计是单片机应用中最常用的程序设计方法。
16位单片机 期末大作业实验报告

上海电力学院16位单片机实验报告实验名称:使用键盘中断、PWM及LED数码管的实验专业:姓名:班级:学号:一、实验目的使用使用键盘中断、PWM 及LED 数码管实现用键盘调整PWM 呼吸灯的渐变快慢,同时用LED 显示当前的速度级:1、PWM 占空比(如图1)。
2、16键键盘中断(如图2)。
图2键盘中断接线原理图3、8段LED 数码管(如图3)。
图3 LED 数码管结构图(a) 25%的占空比图1 PWM 占空比示意图时钟 PWM (b) 50%的占空比时钟PWM (c) 75%的占空比时钟PWM二、实验设备及其连接(一)、试验设备: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" //包含总头文件//在此添加全局变量定义uint8 iii;uint8 period;uint8 duty;uint8 time=100;uint8 LEDbuf[4];//主函数void main(){//0.1 主程序使用的变量定uint32 mRuncount=0; //运行计数器//运行计数器//uint8 period,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); //RUN指示灯初始化为暗//0.5 开放中断EnableSCIReInt0; //开放SCI0接收中断EnableKBint(); //开放键盘中断EnableInterrupt();DDRB=0xff;PORTB=0x00; //开放总中断period = 0xFF; //PWM周期duty=0x00;LEDbuf[0]='0'; //待显示数据0000LEDbuf[1]='0';LEDbuf[2]='0';LEDbuf[3]='0';// 主循环for(;;){ //int i,j,k;LEDShow(LEDbuf);// Light_Change(Light_Run_PORT,Light_Run); //指示灯的亮、暗状态切换//}//---------------------------------------------------------------------//2.通过占空比的变化来调节小灯的亮度for(duty=0;duty<0xff;duty++){PWMSetting(7,period, duty); //不断增加PWM的占空比LEDShow(LEDbuf);Delay(time);}//延时for(duty=0xff;duty>0;duty--){PWMSetting(7,period, duty); //不断增加PWM的占空比LEDShow(LEDbuf);Delay(time);}//延时}}3.在isr.c中添加对按键的判断,当按下按键时,缩短Delay延时使得小灯闪烁速度加快,同时改变LEDbuf数组的值使得LED显示当前的按键值(速度级)。
单片机项目实训实验报告

一、实验背景与目的随着科技的发展,单片机作为嵌入式系统的重要组成部分,广泛应用于各个领域。
为了提高学生的实践能力和创新精神,我们选择了单片机项目实训作为实验课程。
本次实训旨在让学生掌握单片机的基本原理,熟悉其硬件和软件设计,并通过实际项目实践,提高学生的动手能力和解决问题的能力。
二、实验内容与步骤本次实训项目为设计一款基于ATmega16单片机的简易计算器。
该计算器能够实现基本的四则运算,并通过矩阵键盘和LCD1602显示屏进行人机交互。
1. 实验内容(1)设计计算器的硬件电路,包括ATmega16单片机、矩阵键盘、LCD1602显示屏等。
(2)编写计算器的软件程序,实现四则运算功能。
(3)测试计算器的功能,确保其正常运行。
2. 实验步骤(1)硬件设计根据实验要求,设计计算器的硬件电路。
主要包括以下步骤:1)选择合适的ATmega16单片机开发板。
2)设计矩阵键盘电路,包括按键布局和连接方式。
3)设计LCD1602显示屏电路,包括数据线和控制线。
4)将以上电路连接到ATmega16单片机开发板上。
(2)软件设计编写计算器的软件程序,实现以下功能:1)初始化ATmega16单片机,设置时钟频率。
2)初始化LCD1602显示屏,显示“0”作为初始值。
3)编写矩阵键盘扫描程序,检测按键状态。
4)根据按键输入,执行相应的四则运算。
5)将运算结果显示在LCD1602显示屏上。
6)实现清零、退格等功能。
(3)测试与调试1)将编写好的程序烧录到ATmega16单片机中。
2)连接计算器硬件电路,进行功能测试。
3)针对测试过程中发现的问题,进行调试和修改。
4)确保计算器能够正常运行,实现预期功能。
三、实验结果与分析经过实际操作和调试,我们成功设计并实现了一款基于ATmega16单片机的简易计算器。
该计算器能够实现基本的四则运算,并通过矩阵键盘和LCD1602显示屏进行人机交互。
以下是实验结果分析:1. 硬件设计方面,我们选择了合适的ATmega16单片机开发板,并设计了简洁的矩阵键盘和LCD1602显示屏电路。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
上海电力学院
16位单片机实验报告
实验名称:使用键盘中断、PWM及LED数码管的实验专业:
姓名:
班级:
学号:
一、实验目的
使用使用键盘中断、PWM 及LED 数码管实现用键盘调整PWM 呼吸灯的渐变快慢,同时用LED 显示当前的速度级:
1、PWM 占空比(如图1)。
2、16键键盘中断(如图2)。
图2键盘中断接线原理图
3、8段LED 数码管(如图3)。
图3 LED 数码管结构图
(a) 25%的占空比
图1 PWM 占空比示意图
时钟 PWM (b) 50%的占空比
时钟
PWM (c) 75%的占空比
时钟
PWM
二、实验设备及其连接
(一)、试验设备:
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" //包含总头文件
//在此添加全局变量定义
uint8 iii;
uint8 period;
uint8 duty;
uint8 time=100;
uint8 LEDbuf[4];
//主函数
void main()
{
//0.1 主程序使用的变量定
uint32 mRuncount=0; //运行计数器
//运行计数器
//uint8 period,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); //RUN指示灯初始化为暗
//0.5 开放中断
EnableSCIReInt0; //开放SCI0接收中断EnableKBint(); //开放键盘中断
EnableInterrupt();
DDRB=0xff;
PORTB=0x00; //开放总中断
period = 0xFF; //PWM周期
duty=0x00;
LEDbuf[0]='0'; //待显示数据0000
LEDbuf[1]='0';
LEDbuf[2]='0';
LEDbuf[3]='0';
// 主循环
for(;;)
{ //int i,j,k;
LEDShow(LEDbuf);
// Light_Change(Light_Run_PORT,Light_Run); //指示灯的亮、暗状态切换//}
//---------------------------------------------------------------------
//2.通过占空比的变化来调节小灯的亮度
for(duty=0;duty<0xff;duty++)
{
PWMSetting(7,period, duty); //不断增加PWM的占空比LEDShow(LEDbuf);
Delay(time);
}//延时
for(duty=0xff;duty>0;duty--)
{
PWMSetting(7,period, duty); //不断增加PWM的占空比
LEDShow(LEDbuf);
Delay(time);
}//延时
}
}
3.在isr.c中添加对按键的判断,当按下按键时,缩短Delay延时使得小灯闪烁速度加快,同时改变LEDbuf数组的值使得LED显示当前的按键值(速度级)。
isr.c部分程序展示:
//头文件包含,及宏定义区
//头文件包含
#include "Includes.h" //包含总头文件
#pragma CODE_SEG __NEAR_SEG NON_BANKED
extern uint8 iii;
extern uint8 time;
extern uint8 LEDbuf[4];
//中断服务程序区
//未定义的中断处理函数,本函数不能删除,默认
__interrupt void isr_default(void)
{
DisableInterrupt();
EnableInterrupt();
}
//键盘中断
__interrupt void isrKeyBoard(void)
{
uint8 valve;
uint16 i;
DisableInterrupt();
DisableKBint();
for (i=0 ; i<20000; i++)
; //延时
valve = KBScanN(10); //扫描键值,存于value中// SCISend1(0, valve); //发送键值
// SCISend1(0,KBDef(valve));
//发送键盘值
if(valve==0xEB)
{
time=50; LEDbuf[3]='1';
}
if(valve==0xDB)
{
time=10; LEDbuf[3]='2';
}
if(valve==0xBB)
{
time=5; LEDbuf[3]='3';
}
if(valve==0xED)
{
time=1; LEDbuf[3]='4';
}
if(valve==0xE7)
{
time=100;LEDbuf[3]='0';
}
五、实验小结
这次实验的难点在于键盘与PWM公用了一个通道,使得程序串行执行PWM小灯闪烁与键盘按键的等待(消抖),所以一开始无论怎么改程序始终会导致小灯渐变超慢。
最后解决办法是把PWM小灯的通道从PP1改成PP7,这样一来就不再占用同一通道,使得可以并行处理键盘和PWM小灯;之后添加LED显示也就顺利成章了。