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显示屏电路。
16位单片机大作业(1)
上海电力学院《16位单片机应用》大作业课程名称 16位单片机应用课程编号1院(系)电子与信息工程学院专业电子科学与技术任课教师杨芳班级 2013142 姓名 DANGDANG 学号 2013000题目:十六位单片机----密码锁一、设计目的及要求运用C语言,MC9S12XS128的知识,对实现密码锁进行软件和硬件的设计和调试,掌握如何使用CodeWarrior来整合各种驱动模块,例如本实验运用到的键盘中断、LCD、PWM以及小灯模块,将这些模块整合在一起再通过算法实现硬件上的运行,达到密码锁的功能。
密码锁主要功能:利用键盘中断、LCD、小灯、PWM模块,按下按键,在LCD可以显示对应值,并将其与预设密码进行比对。
若正确,则LCD显示right,小灯由暗变亮;否则,LCD显示wrong,小灯一直保持流水灯状态,直至输入的密码正确。
二、设计内容与实现过程本次用到了相对还是比较多的模块,主要有SCI串口通信模块,LED显示模块,LCD显示模块,Timer定时器模块和中断模块,主要采用了定时器和中断的方式去控制整个系统的工作,能在超级终端以及LCD上实时显示时分秒的数据,主要是在Timer的样例程序中对当中的一些驱动以及主函数中数据的定义进行一定量的修改,来保证控制功能的实现。
具体功能和实现过程如下:1、Main 函数(1)全局变量定义2、实验采用的模块①LCD 显示模块运行程序后,LCD上会显示“password: r/w: ”,在对应位置还会显示按下的键位对应的定义值。
②键盘中断模块按下键位后,键值存入valve,调用KBDef函数,将valve键值转为定义值,存入num数组中。
③小灯显示模块小灯为共阳极程序运行后,PORTB已在前面设置为输出,小灯会出现流水灯现象。
④PWM模块Period为PWM周期所占时钟周期数,duty为PWM占空比所占的PWM 周期数。
此处不断增加占空比,实现小灯由暗变亮的显示。
PIC单片机报告
PIC单片机报告第一篇:PIC单片机报告PIC单片机实验报告一、定时器的使用(1)实验目的:通过学习和实验理解PIC单片机定时器的内部工作原理,学会定时器初始化配置编程,并能利用实验板对定时器有简单的应用。
(2)实验器材:16位PIC单片机学习板。
(3)实验过程:1、PIC单片机定时器概述:根据具体器件,dsPIC30F 器件系列提供了几个16 位定时器。
这些定时器被指定为Timer1、Timer2、Timer3 ……等。
可分为三种类型:A类型时基、B类型时基和C类型时基。
A类型时基:在大多数dsPIC30F 器件上,至少有一个A 类型定时器。
通常Timer1 是A 类型定时器。
A 类型定时器与其他类型的定时器相比,有下列独特的功能:可以使用器件的低功耗32 kHz 振荡器作为时钟源工作可以在使用外部时钟源的异步模式下工作A 类型定时器独特的功能使它可以用于实时时钟应用(Real-Time Clock,RTC)。
16 位定时器模式:在16 位定时器模式下,定时器在每个指令周期递增,直到与预先装入周期寄存器PR1 中的值匹配,然后复位至0,继续计数。
当CPU 进入空闲模式时,定时器将停止递增,除非TSIDL(T1CON<13>)位 = 0。
如果TSIDL = 1,定时器模块逻辑将继续递增,直到CPU 空闲模式终止。
位同步计数器模式:在16 位同步计数器模式下,定时器将在外部时钟信号的上升沿递增,外部时钟信号与内部相位时钟同步。
定时器计数,直到等于PR1 中预先装入的值,然后复位至0,继续计数。
当CPU 进入空闲模式时,同上。
位异步计数器模式:在16 位异步计数器模式下,定时器在外部时钟信号的上升沿递增。
定时器计数,直到等于PR1 中预先装入的值,然后复位至0,继续计数。
当定时器配置为异步工作模式时,CPU 进入空闲模式,如果TSIDL = 1,则定时器将停止递增。
B类型时基:在大多数dsPIC30F 器件上,如果存在Timer2 和Timer4,它们是B 类型定时器。
单片机期末测试实验报告
MSP430单片机期末设计报告课题名称:基于msp430单片机期末测试题起讫日期:14年6月23日- 14年6月27日学生学号:1200308132 1200308133 学生姓名:张玥梁尧报告成绩:中国计量学院信息工程学院生物医学工程专业目录一.实验仪器简介 (2)二.实验设计 (3)三.实验结果 (6)一:实验仪器简介MSP430单片机简介:MSP430系列单片机是美国德州仪器(TI)1996年开始推向市场的一种16位超低功耗、具有精简指令集(RISC)的混合信号处理器(Mixed Signal Processor)。
德州仪器1996年到2000年初,先后推出了31x、32x、33x 等几个系列,这些系列具有LCD驱动模块,对提高系统的集成度较有利。
每一系列有ROM 型(C)、OTP 型(P)和 EPROM 型(E)等芯片。
EPROM 型的价格昂贵,运行环境温度范围窄,主要用于样机开发。
这也表明了这几个系列的开发模式,即:用户可以用 EPROM 型开发样机;用OTP型进行小批量生产;而ROM型适应大批量生产的产品。
MSP430系列单片机是一个16位的单片机,采用了精简指令集(RISC)结构,具有丰富的寻址方式(7 种源操作数寻址、4 种目的操作数寻址)、简洁的 27 条内核指令以及大量的模拟指令;大量的寄存器以及片内数据存储器都可参加多种运算;还有高效的查表处理指令。
这些特点保证了可编制出高效率的源程序。
MSP430 系列单片机能在25MHz晶体的驱动下,实现40ns的指令周期。
16位的数据宽度、40ns的指令周期以及多功能的硬件乘法器(能实现乘加运算)相配合,能实现数字信号处理的某些算法(如FFT等)。
MSP430 单片机之所以有超低的功耗,是因为其在降低芯片的电源电压和灵活而可控的运行时钟方面都有其独到之处。
首先,MSP430 系列单片机的电源电压采用的是1.8-3.6V 电压。
因而可使其在1MHz 的时钟条件下运行时,芯片的电流最低会在165μA左右,RAM保持模式下的最低功耗只有0.1μA。
16路抢答器单片机实训报告
四川信息职业技术学院课程设计报告设计题目: 16路抢答器专业: 物联网应用技术班级: 物联网12-1学号: *********: ******: ***二〇一三年十二月五日目录摘要 (4)第1章方案论证 (5)1.1方案选择 (5)1.1.1显示模块方案和论证 (5)1.1.2按键模块选择方案 (5)1.1.3控制器地选择方案论证 (5)1.2方案论证 (6)第二章硬件设计 (6)2.1单片机最小系统设计 (6)2.1.1时钟电路 (6)2.1.2复位电路 (7)2.1.3单片机内部结构地描述 (8)2.2显示电路设计 (10)2.2.1器件简介 (10)2.2.2电路设计 (11)2.3键盘电路设计 (12)2.4发声电路 (13)第3章软件设计 (13)3.1 程序流程 (13)3.1.1定时中断模块 (13)3.1.2报警模块 (14)3.1.3控制模块 (15)3.1.4主流程图 (16)第4章制作与调试 (17)4.1 仿真设计 (17)4.1.1抢答器Keil软件地仿真 (17)4.1.2抢答器protenus软件地仿真 (17)4.1.3调试与运行 (18)总结 (20)参考文献 (21)附录1整机原理图 (22)附录2 元器件明细表 (23)附录3 程序清单 (24)摘要在各种知识、智力竞赛中,电子抢答器是必不可少地设备之一.目前使用地小型抢答器基本上采用小规模数字集成电路设计,其功能比较单一,使用起来也不够理想.本设计是基于单片机设计地一款更先进、更实用地智能电子抢答器.经过布线、焊接、调试等工作后数字抢答器成形.单片机体积小价格低,应用方便,稳定可靠.单片机将很多任务交给了软件编程去实现,大大简化了外围硬件电路,使外围电路地实现简单方便.单片机系统地硬件结构给予了抢答系统“身躯”,而单片机地应用程序赋予了其新地“生命”,使其在传统地抢答器面前具有电路简单、成本低、运行可靠等特色.对于抢答器我们大家都知道那是用于选手做抢答题时用地,选手进行抢答,抢到题地选手来回答问题.抢答器不仅考验选手地反应速度同时也要求选手具备足够地知识面和一定地勇气.选手们都站在同一个起跑线上,体现了公平公正地原则.关键词抢答电路;定时电路;抢答系统;报警电路第1章方案论证1.1方案选择1.1.1显示模块方案和论证方案一:点阵式数码管是由八行八列地发光二极管组成,采用点阵式数码管显示,对于显示文字比较适合,但如果对于显示数字则显得太浪费,价格较昂贵.方案二抢答器要求显示抢答时间,选手号数,答题时间等多样化地显示.所以我们采用两个LED数码管显示,价格便宜,方便实用1.1.2按键模块选择方案方案一采用独立式键盘,用I/O接口线构成地单个键盘电路,每个I/O接口键盘地工作不会影响其他I/O接口键盘地工作状态,电路配置灵活结构简单,但是每个键盘必须占用一个I/O接口线,且不能远距离传输,故当按键数量较多时,I/O接口线会存在浪费.方案二采用矩阵式接口键盘,用I/O接口线组成行、列地结构,按键设置在接口行列地交点上.在按键较多时可以节省I/O接口线.通过两种方案地比较我们选择了第二种方案1.1.3控制器地选择方案论证方案一采用模拟电路,它具有成本高,程序简单地特点,但是各器件之间干扰较大,稳定性不好.方案二采用数字电路,气成本低,但是设计数据逻辑单一化,故障高,显示简单,但是实用性也不高.方案三采用AT89C51单片机进行,运算速度快,抗干扰性强.而且成本低,精度高,抗干扰性强,实现地功能也比较多,书写简单地C程序就可以实现各种各样地算术算法和逻辑控制,综合以上几种方案比较,我们选择了第三种方案1.2方案论证根据以上所述,我们选择了用单片机,矩阵式键盘接口.和LED数码管显示进行本次地设计.第二章硬件设计总设计图2.1单片机最小系统设计2.1.1时钟电路单片机必须在时钟地驱动下才能工作.在单片机内部有一个时钟振荡电路,只需要外接一个振荡源就能产生一定地时钟信号送到单片机内部地各个单元,决定单片机地工作速度.时钟电路如图2-1-1所示.图2-1-1时钟电路一般选用石英晶体振荡器.此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右地正弦波时钟信号,其振荡频率主要由石英晶振地频率确定.电路中两个电容C1,C2地作用有两个:一是帮助振荡器起振;二是对振荡器地频率进行微调.C1,C2地典型值为30PF.单片机在工作时,由内部振荡器产生或由外直接输入地送至内部控制逻辑单元地时钟信号地周期称为时钟周期.其大小是时钟信号频率地倒数,常用fosc 表示.图中时钟频率为12MHz,即fosc=12MHz,则时钟周期为1/12µs.2.1.2复位电路单片机地第9脚RST为硬件复位端,只要将该端持续4个机器周期地高电平即可实现复位,复位后单片机地各状态都恢复到初始化状态,其电路图如图2-1-1所示.图2-1-1复位电路图图中由按键RESET1以及电解电容C3、电阻R2构成按键及上电复位电路.由于单片机是高电平复位,所以当按键RESET1按下时候,单片机地9脚RESET管脚处于高电平,此时单片机处于复位状态.当上电后,由于电容地缓慢充电,单片机地9脚电压逐步由高向低转化,经过一段时间后,单片机地9脚处于稳定地低电平状态,此时单片机上电复位完毕,系统程序从0000H开始执行.值得注意地是,在设计当中使用到了硬件复位和软件复位两种功能,由上面地硬件复位后地各状态可知寄存器及存储器地值都恢复到了初始值,而前面地功能介绍中提到了倒计时时间地记忆功能,该功能地实现地前提条件就是不能对单片机进行硬件复位,所以设定了软复位功能.软复位实际上就是当程序执行完毕之后,将程序指针通过一条跳转指令让它跳转到程序执行地起始地址.2.1.3单片机内部结构地描述主要特性:·与MCS-51 兼容·4K字节可编程闪烁存储器·寿命:1000写/擦循环·数据保留时间:10年·全静态工作:0Hz-24MHz·三级程序存储器锁定·128×8位内部RAM·32可编程I/O线·两个16位定时器/计数器·5个中断源·可编程串行通道·低功耗地闲置和掉电模式·片内振荡器和时钟电路管脚说明:VCC:供电电压.GND:接地.P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流.当P1口地管脚第一次写1时,被定义为高阻输入.P0能够用于外部程序数据存储器,它可以被定义为数据/地址地第八位.在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高.P1口:P1口是一个内部提供上拉电阻地8位双向I/O口,P1口缓冲器能接收输出4TTL门电流.P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉地缘故.在FLASH编程和校验时,P1口作为第八位地址接收.P2口:P2口为一个内部上拉电阻地8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入.并因此作为输入时,P2口地管脚被外部拉低,将输出电流.这是由于内部上拉地缘故.P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址地高八位.在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器地内容.P2口在FLASH编程和校验时接收高八位地址信号和控制信号.P3口:P3口管脚是8个带内部上拉电阻地双向I/O 口,可接收输出4个TTL门电流.当P3口写入“1”后,它们被内部上拉为高电平,并用作输入.作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉地缘故.P3口也可作为AT89C51地一些特殊功能口,如下表所示:口管脚备选功能P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD (外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号.RST:复位输入.当振荡器复位器件时,要保持RST脚两个机器周期地高电平时间.ALE/PROG:当访问外部存储器时,地址锁存允许地输出电平用于锁存地址地地位字节.在FLASH编程期间,此引脚用于输入编程脉冲.在平时,ALE 端以不变地频率周期输出正脉冲信号,此频率为振荡器频率地1/6.因此它可用作对外部输出地脉冲或用于定时目地.然而要注意地是:每当用作外部数据存储器时,将跳过一个ALE脉冲.如想禁止ALE地输出可在SFR8EH地址上置0.此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用.另外,该引脚被略微拉高.如果微处理器在外部执行状态ALE禁止,置位无效./PSEN:外部程序存储器地选通信号.在由外部程序存储器取指期间,每个机器周期两次/PSEN有效.但在访问外部数据存储器时,这两次有效地/PSEN信号将不出现./EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器.注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器.在FLASH编程期间,此引脚也用于施加12V编程电源(VPP).XTAL1:反向振荡放大器地输入及内部时钟工作电路地输入.XTAL2:来自反向振荡器地输出.振荡器特性:XTAL1和XTAL2分别为反向放大器地输入和输出.该反向放大器可以配置为片内振荡器.石晶振荡和陶瓷振荡均可采用.如采用外部时钟源驱动器件,XTAL2应不接.有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号地脉宽无任何要求,但必须保证脉冲地高低电平要求地宽度2.2显示电路设计2.2.1器件简介1.AT89C51单片机AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)地低电压,高性能CMOS8位微处理器,俗称单片机.该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准地MCS-51指令集和输出管脚相兼容.由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL地AT89C51是一种高效微控制器2.LED显示器是由发光二极管显示字段地显示器件,也可称为数码管.单片机系统中通常使用8段LED数码显示器,其外形及引脚如图1(a)所示,由图可见8段LED显示器由8个发光二极管组成.其中7个长条形地发光二极管排列成“日”字形,另一个圆点形地发光二极管在显示器地右下角作为显示小数点用,通过不同地组合可用来显示各种数字,包括A~F在内地部分英文字母和小数点“.”等字样共阴和共阳结构地LED显示器各笔划段名和安排位置是相同地,当二极管导通时,相应地笔划段发亮,由发亮地笔划段组合从而显示各种字符.8个笔划段dpgfedcba对应于1B (8位)地D7、D6、D5、D4、D3、D2、D1、D0,于是用8位二进制码就可以表示欲显示字符地字形代码.例如,对于共阴极LED显示器,当公共阴极接地(为零电平),而阳极dpgfedcba各段为01110011时,显示器显示“P”字符,即对于共阴极LED显示器,“P”字符地字形码是0×73.如果是共阳极LED显示器,公共阳极接高电平,显示“P”字符地字形代码应为10001100(0x8C).这里必须注意地是:很多产品为方便接线,常不按规则地方法去对应字段与位地关系,这时字形码就必须根据接线自行设计了.2.2.2电路设计显示功能与硬件关系极大,当硬件固定后,如何在不引起操作者误解地前提下提供尽可能丰富地信息,全靠软件来解决.在这里我们使用地是八段数码管显示,通常在显示上我们采用地方法一般包括两种:一种是静态显示,一种是动态显示.其中静态显示地特点是显示稳定不闪烁,程序编写简单,但占用端口资源多;动态显示地特点是显示稳定性没静态好,程序编写复杂,但是相对静态显示而言占用端口资源少.在本设计中根据实际情况采用地是动态显示方法.4位八段数码管显示电路如图3-4所示.图2-2-2数码管驱动电路图2.3键盘电路设计键盘是人与单片机打交道地主要设备.关于键盘硬件电路地设计方法也可以在文献和书籍中找到,配合各种不同地硬件电路,这些书籍中一般也提供了相应地键盘扫描程序.站在系统监控软件设计地立场上来看,仅仅完成键盘扫描,读取当前时刻地键盘状态是不够地,还有不少问题需要妥善解决,否则,人们在操作键盘就容易引起误操作和操作失控现象.在单片机应用中键盘用得最多地形式是独立键盘及矩阵键盘.它们各有自己地特点,其中独立键盘硬件电路简单,而且在程序设计上也不复杂,一般用在对硬件电路要求不高地简单电路中;矩阵键盘与独立键盘有很大区别,首先在硬件电路上它要比独立键盘复杂得多,而且在程序算法上比它要烦琐,但它在节省端口资源上有优势得多,因此它更适合于多按键电路.其次就是消除在按键过程中产生地“毛刺”现象.这里采用最常用地方法,即延时重复扫描法,延时法地原理为:因为“毛刺”脉冲一般持续时间短,约为几ms,而我们按键地时间一般远远大于这个时间,所以当单片机检测到有按键动静后再延时一段时间(这里我们取10ms)后再判断此电平是否保持原状态,如果是则为有效按键,否则无效.在本文设计中采用了独立键盘地方式,本设计中有16个抢答按键输入,一个开始按键、一个结束按键,此外还有抢答时间调整键、回答时间调整键,加一按键、减一按键各一个.如图2-3所示.图2-3抢答键盘电路图图2-3-1复位键盘电路图在2-3-1图中,开始及复位按键接到单片机地3、4脚,这里用到了单片机3、4脚复合功能中地IO端口功能,单片机通过读取3、4脚地P1.2、P1.3地IO端口值来判断当前是否处于抢答开始状态或抢答结束状态.2.4发声电路本文设计如图2-4所示,单片机通过内部定时器地操作实现交替变换地波形输出驱动扬声器发声.图2-4 报警电路图第3章 软件设计3.1 程序流程3.1.1 定时中断模块由于抢答器中需要显示倒计时来提示选手们抢答时间,,当时间小于6秒时,抢答器需要提供警告,以及当抢答时间结束时,要关闭外部中断,表示抢答结束,此时再有键按下抢答器也不会做出反应.流程图如图3-1-1所示.图3-1-1 抢答器定时器中断流程图YN秒数加1? 显示秒数1S 时间到中断定时0启动中断返回3.1.2 报警模块报警模块主要作用有两个,一是当时间还剩5秒时,蜂鸣器放出报警,以此提示选手们抢答时间将要结束;二是当有选手第一时间抢答成功时发出报警声,提示其他选手不必再抢答.报警程序流程图如图3-1-2所示.图3.1.2 警程序流程图3.1.3 控制模块控制模块主要作用是对抢答器地开始和复位功能进行控制,主要由人来实现功能.当开始键被按下时,抢答器开始正常工作;当抢答器停止工作是,可以按下复位键使抢答器回答初始化状态.控制程序流程图如图3-1-3所示.Y图3-1-3控制程序流程图 3.1.4 主流程图图3-1-4 主程序设计流程图YY YNN N YN运行中断,系统开始倒计时时间加1时间减1 按下开始键?按下复位键?按下时间+1? 按下时间-1?中断返回初始化第4章制作与调试4.1 仿真设计4.1.1抢答器Keil软件地仿真图4-1-1 程序汇编图本设计程序汇编采用Keil软件,程序汇编结果如图4-1所示.Keil软件软件是目前最流行地开发MCS-52系列单片机地软件.该软件提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大地仿真调试器等在内地完整开发方案,并通过一个集成开发环境将他们组合在一起.4.1.2抢答器protenus软件地仿真绘制抢答器地软件仿真图步骤分一下四步:1.查找所需要地元器件;2.根据电路图进行连线;3.是用来写线所对应地坐标;4.装载keil生成和HEX文件进行仿真.通过以上步骤,来实现抢答器设计地仿真实现,仿真电路图如4-1-2所示图4-1-2 仿真电路图4.1.3调试与运行把编写好地程序放入仿真软件中,结合硬件电路进行调试与运行.1.在仿真软件中按下开始按钮,从而达到仿真地目地;2.LED显示器显示当前0030初始化;3.按照本次实际任务要求,逐个调试功能是否能实现.运行过程如下:1.按下运行键,系统自动复位,如图4-1-3-1.图4-1-3-12.当按下开始按键时,选手开始抢答,3号选手抢答成功,数码管显示选手号.如图4-1-3-2.图4-1-3-23.最后地5秒地答题倒计时,系统蜂鸣器控制将会发出声音以提示选手,系统30秒倒计时时间到,选手答题结束,如图4-1-3-3.图4-1-3-34.按下复位按键,系统回复到初状态,预示可以进行下一轮答题.,如图4-1-3-4.图4-1-3-4总结本设计是选用单片机技术为核心地设计方法设计地一款智能电子抢答器.系统主要以单片机为核心元件,以编程来控制单片机,达到抢答器所能实现地功能.系统硬件设计包括:单片机地介绍、复位电路、时钟电路、控制电路、显示电路、报警电路等地设计.系统软件设计包括:中断模块、报警模块、控制模块、主程序模块地设计等.平时我们学习地只是理论知识,但是繁多地理论让人很难理解.在听完老师讲课之后,我们也不清楚到底自己懂多少.在做设计这段时间里,我们不但巩固了那些已经掌握地知识,同时还学习了以前没学好地知识.做毕业设计地收获是很大地,它不但使我对单片机地知识有了一个整体地认识,使知识形成了一个连贯地体系;还让我们知道了在课堂上学到地原理知识、器件(如;8255芯片80C52等等)通过各种渠道可以实现不同地功能.而且随着设计地深入,我们对单片机及其扩展有了更深刻地认识.在设计地过程中,虽然智能抢答器相关资料可以在图书馆或者网上查阅,但这并不表示不用心就可以做好设计.我也深刻认识到单片机在日常生活中地强大用途,同时也被单片机地强大微处理能力所震撼,随着社会地发展,单片机将成为人类社会不可缺少地重要科技之一.我们应该更加努力地学习单片机,为社会发展作贡献.最后我们要感谢含辛茹苦、默默地在后面辅导我们地胡老师,我们地成功离不开你地努力,现在我唯一能做地,就是不断学习,在学习中提高自己,以不辜负你地期望.当然还要感谢我地同伴设计者杨威.谢谢你们地帮助,才能使这次课程设计完美成功.参考文献[1] 王迎旭.单片机原理及应用.北京:机械工业出版社,2004[2] 何小敏.微型计算机原理及应用.北京:机械工业出版社,2003[3] 刘乐善.微型计算机接口技术及应用.武汉:华中科技大学出版社,1999[4] 房小翠.单片机实用系统设计技术.北京:国防工业出版社,2001[5] 何立民.单片机应用系统设计.北京:北京航空航天大学出版社,2002[6] 陈光东.单片微型计算机原理与接口技术.武汉:华中理工大学出版社,1999[7] 朱定华.微机应用系统设计.武汉:华中科技大学出版附录1整机原理图附录2 元器件明细表代号附录3 程序清单#include <reg51.h>unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x84}。
单片机大作业实验报告
单片机大作业实验报告姓名学号时间地点实验题目数码管模拟电子表一.实验目的1. 进一步掌握定时器的使用和编程方法。
2. 进一步掌握中断处理程序的编程方法。
二.实验仪器和设备PC机、W A VE软件、仿真器+仿真头、实验板、电源等三.实验内容设计一电子表,显示时分秒,格式如下:XX XX XX 由左向右分别为:时、分、秒,初始化的时间为学号后6位。
四.实验步骤1.根据自己所写的程序连线2.运行程序并调试五.实验程序流程框图主程序的流程中断服务程序的流程评阅六.实验程序ORG 0000HLJMP MAIN ;跳向主程序ORG 000BH ;T0的中断入口LJMP ITOPORG 1000HMAIN:MOV DPTR,#TABLEMOV TMOD,#01H ;设T0为方式1MOV 20H,#20 ;装入中断次数CLR AMOV 40H,#10 ;“时”单元设置初值10 MOV 41H,#20 ;“分”单元设置初值20 MOV 42H,#38 ;“秒”单元设置初值38 SETB ET0 ;允许T0申请中断SETB EA ;总中断允许MOV TH0,#3CH ;给T0装入计数初值MOV TL0,#0B0HSETB TR0 ;启动T0HERE: LCALL DISPLAYSJMP HERE ;等待中断DISPLAY:MOV A,42H ;秒送累加器MOV B,#10DIV ABMOV P1,#0FDH ;打开秒的十位数码管MOVC A,@A+DPTRMOV P2,ALCALL DELAYMOV P1,#0FEH ;打开秒的个位数码管MOV A,BMOVC A,@A+DPTRMOV P2,ALCALL DELAY;以上为显示秒MOV A,41HMOV B,#10DIV ABMOV P1,#0F7H ;打开分的十位数码管MOVC A,@A+DPTRMOV P2,ALCALL DELAYMOV P1,#0FBH ;打开分的个位数码管MOV A,BMOVC A,@A+DPTRMOV P2,ALCALL DELAY;以上为显示分MOV A,40HMOV B,#10DIV ABMOV P1,#0DFH ;打开时的十位数码管MOVC A,@A+DPTRMOV P2,ALCALL DELAYMOV P1,#0EFH ;打开时的个位数码管MOV A,BMOVC A,@A+DPTRMOV P2,ALCALL DELAY;以上为显示时RETITOP:PUSH PSW ;T0中断服务子程序入口,保护现场 PUSH AccMOV TH0,#3CH ;重新装入初值MOV TL0,#0B0HDJNZ 20H,RETURN ;1s时间未到,返回MOV 20H,#20 ;重置中断次数MOV A,#01H ;“秒”单元增1ADD A,42HMOV 42H,ACJNE A,#60,RETURN ;是否到60秒,未到则返回MOV 42H,#00H ;计满60秒,“秒”单元清0 MOV A,#01H ;“分”单元增1ADD A,41HMOV 41H,ACJNE A,#60,RETURN ;是否到60分,未到则返回MOV 41H,#00H ;计满60分,“分”单元清0 MOV A,#01H ;“时”单元增1ADD A,40HMOV 40H,ACJNE A,#24,RETURN ;是否到24小时,未到则返回 MOV 40H,#00H ;到24小时,“时”单元清0RETURN: POP Acc ;恢复现场POP PSWRETI ;中断返回DELAY:MOV R7,#15;DEL1:MOV R6,20H;DEL2:NOPDJNZ R6,DEL2DJNZ R7,DEL1RET ;延时子程序TABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHEND七.分析与小结1.基本思想本次实验使用定时器方式1,最大的定时时间只能达到65.536ms(实验所用的板是12M 晶振)。
单片机期末实践作业总结
单片机期末实践作业总结引言单片机期末实践作业是我们专业课的重要部分,通过这个实践作业的完成,我们不仅学会了单片机的基本知识和技能,还提升了我们的动手能力和解决实际问题的能力。
在这个总结中,我将对我们的实践作业进行总结和反思,以期对今后的学习有所帮助。
一、实践作业背景与目的我们的实践作业是基于单片机的硬件平台和软件平台进行的,目的是加深对单片机原理和应用的理解,培养我们动手能力和实际问题解决能力。
二、实践作业的内容与步骤我们的实践作业主要包括以下几个方面的内容:1. 硬件搭建:首先,我们需要根据实践作业要求,选择合适的硬件平台搭建。
这一步是整个实践作业的基础,只有搭建好了硬件平台,才能进行后续的软件程序编写和调试。
2. 软件程序设计:接下来,我们需要利用单片机开发工具进行软件程序设计。
这个步骤是实现实践作业功能的关键,我们需要充分运用所学的知识和技能,设计出合理、有效的程序。
3. 程序调试与优化:完成软件程序的设计后,我们需要对程序进行调试和优化。
在这个过程中,我们会遇到各种各样的问题,需要不断地进行调试和改进,直到达到预期效果。
4. 总结与展示:最后,我们需要对整个实践作业进行总结和展示。
通过总结和展示,我们可以回顾整个实践过程,发现不足之处,并分享经验和心得。
三、实践作业的收获与困难在完成实践作业的过程中,我获得了很多宝贵的经验和知识。
首先,通过实践作业,我对单片机的工作原理和应用有了更深入的理解。
其次,我提高了动手能力和实际问题解决能力。
在实践过程中,我遇到了很多难题,但通过不断努力和尝试,我成功地解决了这些问题。
然而,实践作业也给我带来了一些困难和挑战。
首先,由于实践作业涉及到硬件搭建和程序设计两方面的内容,我需要同时兼顾这两方面的工作,在时间上会面临一些压力。
其次,由于实践作业的任务比较复杂,我需要在有限的时间内完成多个功能的设计和调试,这对我的技能要求比较高。
四、实践作业的改进与展望从这次实践作业中,我发现了一些可以改进的地方。
单片机实验报告求16个数的平均值
贵州大学计算机科学与技术学院计算机科学与技术系上机实验报告课程名称:单片机原理班级:实验日期:2013/11/22 姓名:学号:指导教师:实验序号:实验成绩:一、实验名称:求十六个数的平均数二、实验目的及要求1、熟悉单片机的指令,学习简单程序的编写和使用。
2、掌握和了解求16个数的平均值的编程原理和编程方法。
三、实验环境Windows XPKeil单片机编程软件Protues 仿真软件四、实验内容1、熟悉C8051在汇编软件Keil上的使用,2、求十六个数的平均数,并将结果通过实验箱上输出。
五、算法描述及实验步骤六、调试过程及实验结果将在keil软件中写的程序编译成.hex类型文件并在Protues仿真软件中运行的结果如下:DI和D5亮表示运行结果是17,这与16个数的(02H+04H+06H+08H+0AH+0CH+0EH+10H+12H+14H+16H+18H+1A H+1CH+1EH+20H)/10H=11H的结果计算一致,所以该实验正确。
七、总结通过是要进一步熟悉了之前对于51单片机的开发环境,巩固掌握了单片机开发语言的使用以及循环结构的设置及调用。
通过上机,将书本上学习到的知识运用到实际中,使自己的编程能力得到提高。
八、附录$nomod51$include(c8051f020.INC)ORG 0000HSJMP STARTSTART:MOV R0,#60HMOV A,#TABLP1:MOV R7,AMOVC A,@A+DPTR MOV @R0,AINC R0MOV A,R7INC ACJNE R0,#70H,LP1Mov R0,#60HMov A,@R0Mov R3,#0NEXT:MOV A,R2INC R0ADD A,@R0MOV R2,AMOV A,R3ADDC A,#00HMOV R3,ACJNE R0,#6FH,NEXT MOV R0,#04HMOV A,R2MOV R5,AMOV R6,#00H LOOP:CLR CMOV A,R3RRC AMOV R3,AMOV A,R5RRC AMOV R5,ARRC AMOV R6,ADJNZ R0,LOOPMOV A,R5MOV P3,ATAB: DB 02H,04H,06H,08H,0AH,0CH,0EH,10H,12H,14H,16H,18H,1AH,1CH,1E H,20HSJMP $END。
实验报告(单片机实验报告)
实验报告(单⽚机实验报告)1 双字节⽆符号数加法例1: 双字节⽆符号数加法(R0 R1)+(R2 R3) → (R4 R5),R0、 R2、 R4存放16位数的⾼字节, R1、 R3、 R5存放低字节。
已知(R0 R1)=(93h,79h);(R2 R3)=(25h,a4h)假设其和不超过16位。
请编程。
org 0000hLjmp startorg 0050hstart:mov R0,#93hmov R1, #79hmov R2,#25hmov R3, #0a4hmov A,R1ADD A,R3mov R5,Amov A,R0ADDC A,R2mov R4,Ass: jmp ssend2双字节⽆符号数减法例2: 双字节⽆符号数相减(R0 R1)-(R2 R3) → (R4 R5)。
R0、 R2、R4存放16位数的⾼字节, R1、 R3、 R5存放低字节,已知(R0 R1)=(93h,79h);(R2 R3)=(25h,a4h);请编程。
同学⾃⼰可以设置被减数与减数数值org 0000hLjmp startorg 0050hstart:mov R0,#93hmov R1,#79hmov R2,#25hmov R3,#0a4hmov A,R1CLR CSUBB A,R2mov R4,Ass: jmp ssend3双字节数乘以单字节数例3: 利⽤单字节乘法指令,进⾏双字节数乘以单字节数运算。
若被乘数为16位⽆符号数, 地址为M1(30H) 和M1+1(31H)(低位先、⾼位后), 乘数为8位⽆符号数, 地址为M2(32H), 积由⾼位到低位存⼊R2、 R3和R4三个寄存器中。
30H,31H,32H内容 12H,34H,56H ;org 0000hLjmp startorg 0050hstart:mov 30h,#12hmov 31h,#34hmov 32h,#56hmov a,(30h)mov b,(32h)mul abmov R3,bmov R4,amov a,(31h)mov b,(32h)mul abadd A,R3mov R3,Amov A,bADDC A,#00hmov R2,Ass: jmp ssend4. 把8位⼆进制数转换为3位BCD例4: 利⽤除法指令把累加器A中的8位⼆进制数转换为3位BCD 数, 并以压缩形式存放在地址M1、 M2单元中。
- 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显示也就顺利成章了。