《单片机原理及应用》实验指导书适用年级:08 物电信编制人:彭晓珊编制时间:2010.3实验室:嵌入式工程师实训室1《单片机原理及应用》第一次实验实验名:开发环境认识实验主要内容:认识MPLAB 开发软件,熟悉QL200B 实验箱目的要求:熟练掌握MPLAB 开发软件的开发流程,熟悉QL200B 实验箱的组成。
主要仪器:QL200B 实验箱+PC+万用表《单片机原理及应用》第二次实验实验名:跑马灯实验主要内容:进一步认识MPLAB 开发软件,熟悉QL200B 实验箱硬件,熟悉软件延时的设计。
目的要求:实现一个简单的流水灯程序,即轮流点亮 C 口的8 个灯(先点亮RC0,再熄灭RCO 点亮RC1……)。
硬件要求:拨码开关S11 全部置ON,其余全部为OFF。
主要仪器:QL200B 实验箱+PC参考程序如下:#include<p16f877A.inc> ;调用头文件__CONFIG_DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_ WDT_OFF&_HS_OSC;**********************用户寄存器定义********************count equ 20h ;移位次数寄存器2del_va1 equ 0ffh ;外层延时参数del_va2 equ 0afh ;内层延时参数org 00h ;程序人口地址;**********************主程序开始***********************mainnop ;ICD 所需要的一条空指令clrf PORTC ;先清楚C 口所有显示banksel TRISC ;选择I/O 口方向寄存器所在的体clrf TRISC ;设置C 口全为输出clrf STATUS ;返回体0movlw .8movwf count ;装载循环次数8(C 口共8 位)bsf STATUS,C ;置进位标志位为1,因循环移位是带进位循环的looprlf PORTC,1 ;C 口左移1 位call delay3call delayCALL delay ;调用三次延时程序(保证亮度,以及流水灯闪烁速度)bcf STATUS,C ;清0 进位标志位(永远只有一只LED 亮)DECFSZ count,1 ;判断是否一轮循环结束goto loop ;否,继续循环移位GOTO main ;是,程序重头开始;***********************延时程序*************************delaymovlw del_va1 ;延时程序外层参数movwf 30hmovlw del_va2 ;延时程序内层参数movwf 31hdecfsz 31h,1goto $-1decfsz 30h,1goto $-4return;********************程序结束****************************end4《单片机原理及应用》第三次实验实验名:LED 显示控制实验主要内容:进一步认识MPLAB 开发软件,熟悉QL200B 实验箱硬件,熟悉静态和动态显示LED 的设计。
目的要求:1、用静态方式控制LED 显示实验目的:熟悉数码管的静态显示,数码管显示单个数字“0”硬件要求:拨码开关S6 全置ON,S5 第 6 位置ON,其它位和拨码开关置OFF参考程序:#INCLUDE<P16F877A.INC> ;包含头文件__CONFIG_DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_ WDT_OFF&_HS_OSCORG 00H ;程序入口地址NOP ;放置ICD 所需要的空指令MOVLW 0FFHMOVWF PORTAMOVWF PORTD ;清除所有显示BSF STATUS,RP0 ;选择体1MOVLW 1FH ;RA5 为输出,其余各位为输入MOVWF TRISA5CLRF TRISD ;RD 口全部输出MOVLW 06HMOVWF ADCON1 ;A 口设置为普通I/OBCF STATUS,RP0 ;回体0MOVLW 0C0H ;0 的共阳极显示编码MOVWF PORTD ;送数码管显示BCF PORTA,5 ;使能数码管显示LOOPGOTO LOOP ;停机指令END ;源程序结束2、用动态方式控制LED 显示实验目的:熟悉多位数码管动态扫描显示的方法。
六位数码管从左到右显示012345 六位数字。
硬件要求:拨码开关S5、S6 全部置ON。
其他拨码开关全置OFF。
#include<p16f877A.inc> ;包含头文件__CONFIG_DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_ WDT_OFF&_HS_OSCORG 00H ;程序入口地址6NOP ;放置一条ICD 所需要的空指令MOVLW 0FFHMOVWF PORTAMOVWF PORTD ;清除所有显示BSF STATUS,RP0 ;选择体1CLRF TRISA ;设置A 口为输出CLRF TRISD ;设置D 口为输出MOVLW 06HMOVWF ADCON1 ;设置A 口为普通I/O 口BCF STATUS,RP0 ;回体0LOOPMOVLW 0 ;显示0CALL TABLEMOVWF PORTDBCF PORTA,0CALL DELAYBSF PORTA,0MOVLW 1 ;显示1CALL TABLE7MOVWF PORTDBCF PORTA,1CALL DELAYBSF PORTA,1MOVLW 2 ;显示2CALL TABLEMOVWF PORTDBCF PORTA,2CALL DELAYBSF PORTA,2MOVLW 3 ;显示3CALL TABLEMOVWF PORTDBCF PORTA,3CALL DELAYBSF PORTA,3MOVLW 4 ;显示48CALL TABLEMOVWF PORTDBCF PORTA,4CALL DELAYBSF PORTA,4MOVLW 5 ;显示5CALL TABLEMOVWF PORTDBCF PORTA,5CALL DELAYBSF PORTA,5GOTO LOOP ;循环显示;***************查表程序*****************************TABLEADDWF PCL,1 ;加上偏移地址1RETLW 0C0H ;0 的编码(公阳极数码管)RETLW 0F9H ;1 的编码9RETLW 0A4H ;2 的编码RETLW 0B0H ;3 的编码RETLW 99H ;4 的编码RETLW 92H ;5 的编码;**************延时程序*****************************DELAYMOVLW 0FFHMOVWF 20HDECFSZ 20H,1GOTO $-1RETURNEND ;程序结束10实验四:按键判别实验内容:判断有无按键按下硬件要求:拨码开关S1 全部置ON《单片机原理及应用》第四次实验要求:拨码开关S6 全部置ON,S5 第5-6 位置ON,其他位置OFF 其他拨码开关置OFF数码管无按键按下时显示“FF”,有按键时显示编码;1、使用实验箱上的模块是独立按键模块:2、六位数码管模块使用过3、参考程序:#include<p16f877A.inc> ;包含头文件__CONFIG_DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_ WDT_OFF&_HS_OSC;*******************用户寄存器定义*********************DISPLAYVAL1 EQU 20H ;显示高位寄存器DISPLAYVAL2 EQU 21H ;显示低位寄存器;******************程序入口地址************************11ORG 00HNOP ;ICD 所需要的空指令GOTO MAIN ;转主程序;*****************查表程序*****************************TABLEADDWF PCL,1 ;加上偏移地址RETLW 0C0H ;0 的编码RETLW 0F9H ;1 的编码RETLW 0A4H ;2 的编码RETLW 0B0H ;3 的编码RETLW 83H ;b 的编码RETLW 88H ;A 的编码RETLW 8EH ;F 的编码;****************主程序*******************************MAINMOVLW 0FFHMOVWF PORTD ;关闭所有显示BANKSEL TRISA ;选择I/O 口方向寄存器所在的体12MOVLW 0FHMOVWF TRISA ;A 口高2 位输出,低4 位输入MOVWF TRISB ;B 口高4 位输出,低4 位输入CLRF TRISD ;D 口输出BANKSEL ADCON1MOVLW 06HMOVWF ADCON1 ;A 口为普通I/O 口CLRF STATUS ;回体0LOOPMOVLW 6MOVWF DISPLAYVAL1MOVWF DISPLAYVAL2 ;F 的偏移地址BTFSC PORTB,0 ;BO 是否按下?GOTO PB_1 ;否,转判B1CALL DELAY ;延时,清除干扰信号BTFSC PORTB,0 ;再次判断BO 口是否按下?GOTO PB_1 ;否MOVLW 4 ;是,b 的偏移地址MOVWF DISPLAYVAL113MOVLW 0 ;0 的偏移地址MOVWF DISPLAYVAL2GOTO LOOP_END ;转显示部分PB_1BTFSC PORTB,1 ;B1 是否按下?GOTO PB_2 ;否,转判B2CALL DELAY ;延时,清除干扰信号BTFSC PORTB,1 ;再次判断B1 是否按下?GOTO PB_2 ;否MOVLW 4MOVWF DISPLAYVAL1 ;是,b 的偏移地址MOVLW 1MOVWF DISPLAYVAL2 ;1 的偏移地址GOTO LOOP_END ;转显示部分PB_2BTFSC PORTB,2 ;B2 是否按下?GOTO PB_3 ;否,转判B3CALL DELAY ;延时,清除干扰信号BTFSC PORTB,2 ;再次判断B2 是否按下?GOTO PB_3 ;否14MOVLW 4MOVWF DISPLAYVAL1 ;是,b 的偏移地址MOVLW 2MOVWF DISPLAYVAL2 ;2 的偏移地址GOTO LOOP_END ;转显示部分PB_3BTFSC PORTB,3 ;B3 是否按下GOTO PA_0 ;否,转判A0CALL DELAY ;延时,清除干扰信号BTFSC PORTB,3 ;再次判断B3 是否按下?GOTO PA_0 ;否MOVLW 4MOVWF DISPLAYVAL1 ;是,b 的偏移地址MOVLW 3MOVWF DISPLAYVAL2 ;3 的偏移地址GOTO LOOP_END ;转显示部分PA_0BTFSC PORTA,0 ;A0 是否按下GOTO PA_1 ;否,转判A1CALL DELAY ;延时,清除干扰信号15BTFSC PORTA,0 ;再次判断A0 是否按下?GOTO PA_1 ;否MOVLW 5 ;是,A 的偏移地址MOVWF DISPLAYVAL1MOVLW 0MOVWF DISPLAYVAL2 ;0 的偏移地址GOTO LOOP_END ;转显示部分PA_1BTFSC PORTA,1 ;A1 是否按下GOTO PA_2 ;否,转判A2CALL DELAY ;延时,清除干扰信号BTFSC PORTA,1 ;再次判断A1 是否按下?GOTO PA_2 ;否MOVLW 5MOVWF DISPLAYVAL1 ;是,A 的偏移地址MOVLW 1MOVWF DISPLAYVAL2 ;1 的偏移地址GOTO LOOP_END ;转显示部分PA_2BTFSC PORTA,2 ;A2 是否按下16GOTO PA_3 ;否,转判A3CALL DELAY ;延时,清除干扰信号BTFSC PORTA,2 ;再次判断A2 是否按下?GOTO PA_3 ;否MOVLW 5MOVWF DISPLAYVAL1 ;是,A 的偏移地址MOVLW 2MOVWF DISPLAYVAL2 ;1 的偏移地址GOTO LOOP_END ;转显示部分PA_3BTFSC PORTA,3 ;A3 是否按下GOTO LOOP_END ;否,转显示部分CALL DELAY ;延时,清除干扰信号BTFSC PORTA,3 ;再次判断A3 是否按下?GOTO LOOP_END ;否,转显示部分MOVLW 5MOVWF DISPLAYVAL1 ;是,A 的偏移地址MOVLW 3MOVWF DISPLAYVAL2 ;3 的偏移地址GOTO LOOP_END17LOOP_ENDMOVF DISPLAYVAL1,0 ;显示低位CALL TABLE ;查表获取相应的编码MOVWF PORTD ;送数码管显示BCF PORTA,4 ;使能相应数码管显示CALL DELAY ;延时一段时间,以保证足够的亮度BSF PORTA,4 ;关闭显示MOVF DISPLAYVAL2,0 ;显示高位CALL TABLE ;查表获取相应的编码MOVWF PORTD ;送数码管显示BCF PORTA,5 ;使能相应数码管显示CALL DELAY ;延时一段时间BSF PORTA,5 ;关闭显示GOTO LOOP ;循环判断是否有按键按下,并显示;*******************延时程序*************************DELAYMOVLW 0FFHMOVWF 30HDECFSZ 30H,118GOTO $-1RETURN;******************程序结束**************************END《单片机原理及应用》第五次实验:4*4 键盘控制实验实验目的:熟悉键盘矩阵的扫描方法程序中先不考虑做按键去抖,也先不考虑多个键同时按下的情况。