实验数码管基本输入输出实验.docx
《实验数码管基本输入输出实验.docx》由会员分享,可在线阅读,更多相关《实验数码管基本输入输出实验.docx(14页珍藏版)》请在冰豆网上搜索。
实验数码管基本输入输出实验
实验报告
课程名称:
PIC单片机实验
任课教师:
周燕
云南大学信息学院
一、实验目的
1.掌握输入、输出口的基本输入、输出功能的操作使用方法;
2.掌握B口的弱上拉功能的原理和使用方法;
3.看懂电路原理图,掌握将按键和显示电路连接到输入、输出口的连接方法;
4.进一步熟练集成开发环境的使用方法;
二、实验功能内容
一、基本输入/输出实验
功能:
本实验要求用PIC16F877A的PORTB0-5监控与之相连的六个按键KEY0-KEY5,用PORTD0-5控制与之相连的六个发光二极管LED0-LED5。
每当有按键被按下时就点亮该按键对应的发光二极管,按键被释放后就熄灭所有的发光二极管。
运行程序,不断按击KEY0-KEY5键,看LED变化情况
二、数码管显示实验
功能:
用PIC中档单片机的I/O口控制两位共阴极的数码管,显示小数“2.3”.其中数码管的7个笔段和小数点位分别用一;个的完整I/O口的8个引脚来控制,两位数码管的位选信号则用另外两个I/O口来控制。
运行程序,观察两只数码管的变化情况
三、实现功能用到的硬件电路设计和电路板的链接方法
1.基本输入输出实验
参看电路原理图
说明:
将跳线器JP_RB与KEY0-KEY5,JP_RD的LED0-LED7短接。
2.数码管实验
参看电路原理图
说明:
将跳线器JP_RB的KEY0,JP_RD的SEG_A~DP短接
四、软件设计
流程图设计
流程:
将p16f877a.inc包含进来
定义段码寄存器
定义COUNT1寄存器用于延时常数
定义COUNT2寄存器用于延时常数
定义程序其实
空指令
跳转到MAIN主程序
转到体1
将PORTE0设置为输出端口
将PORTE1设置为输出端口
将PORTD设置为输出端口
转到体0
将PORTD清零
将PORTE0清零
将PORTE1清零
将2存入W
与0FH相与屏蔽高4位
调用查表子程序获得笔段码
将断码值存入ONE_BIT
与80H相加,加入小数点段码
送出个位段码
关闭小数点后1位
选通个位显示位
调用延时子程序
将3与0FH相与屏蔽高4位
调用查表指令获得笔段码
送出3的段码
关闭个位显示位码和小数点
选通小数位显示位码
调用延时
跳回重复显示
3.程序设计和注释
基本输入输出
;****************************************Copyright(c)***************************************************
;**SchoolofInformationScienceandEngineering,
;**YunnanUniversity
;**
;**--------------FileInfo-------------------------------------------------------------------------------
;**Filename:
1.asm
;**LastmodifiedDate:
2010-09-15
;**LastVersion:
1.0
;**Descriptions:
;**
;**------------------------------------------------------------------------------------------------------
;**Createdby:
Zoujin
;**Createddate:
2010-09-15
;**Version:
1.0
;**Descriptions:
Theoriginalversion
;**
;********************************************************************************************************
;********************************************************************************************************
;**功能:
本实验要求用PIC16F877A的PORTB0~5监控与之相连的六个按键KEY0~KEY5,用PORTD0~5控制与之相连的六个发光
;二极管LED0~LED5。
每当有按键被按下时就点亮该按键对应的发光二极管,按键被释放后就熄灭所有的发光二极
;管。
;**说明:
将跳线器JP_RB的KEY0~KEY5,JP_RD的LED0~LED7短接。
;运行程序,不断按击KEY0~KEY5键,看LED变化情况。
;********************************************************************************************************
;**
#includep16f877a.inc
TEMPEQU20H;定义TEMP寄存器
;********************************************************************************************************
;**
ORG00H
NOP;空指令
GOTOMAIN
;**
;********************************************************************************************************
;**函数名称:
main
;**函数功能:
获取RB端口的值,判断哪个按键被按击,病点亮对应的LED,松开按键熄灭所有LED。
;**使用说明:
;********************************************************************************************************
;**
MAIN
BCFSTATUS,RP1
BSFSTATUS,RP0;转到体
CLRFOPTION_REG;开启内部弱上拉
CLRFTRISD;将PORTD设置为输出端口
MOVLWB'00111111'
MOVWFTRISB;将RB0-RB5设置为输入端口
BCFSTATUS,RP0;转到体
CLRFPORTD;将PORTD清零
LOOP
MOVFPORTB,0;是,把PORTB存到TEMP
MOVWFTEMP
COMFTEMP,1;TEMP取反
MOVLW0x3F;将F存到W寄存器
ANDWFTEMP,1
MOVFTEMP,0;将TEMP送到W寄存器
MOVWFPORTD;点亮按键有变化对应的LED
GOTOLOOP;子程序返回
;*********************************************************************************************************
END
;*********************************************************************************************************
;**EndOfFile
;*********************************************************************************************************
数码管显示:
;****************************************Copyright(c)***************************************************
;**SchoolofInformationScienceandEngineering,
;**YunnanUniversity
;**
;**--------------FileInfo-------------------------------------------------------------------------------
;**Filename:
2.asm
;**LastmodifiedDate:
2010-09-15
;**LastVersion:
1.0
;**Descriptions:
;**
;**------------------------------------------------------------------------------------------------------
;**Createdby:
Zoujin
;**Createddate:
2010-09-15
;**Version:
1.0
;**Descriptions:
Theoriginalversion
;**
;********************************************************************************************************
;********************************************************************************************************
;**功能:
用PIC中档单片机的I/O口控制两位共阴极的数码管,显示小数“.3”.其中数码管的个笔段和小数点位分别用一
;个的完整I/O口的个引脚来控制,两位数码管的位选信号则用另外两个I/O口来控制。
;**说明:
将跳线器JP_RB的KEY0,JP_RD的SEG_A~DP短接。
;运行程序,观察两只数码管的变化情况。
;********************************************************************************************************
;**
#includep16f877a.inc
ONE_BITEQU20H;定义TEMP寄存器
COUNT1EQU21H;定义COUNT1寄存器
COUNT2EQU22H;定义COUNT2寄存器
;********************************************************************************************************
;**
ORG00H
NOP;空指令
GOTOMAIN
;**
;********************************************************************************************************
;**函数名称:
main
;**函数功能:
通过RE端口来控制选通哪一只数码管,通过RD端口来控制数码管输出结果。
;**使用说明:
;********************************************************************************************************
;**
MAIN
BCFSTATUS,RP1
BSFSTATUS,RP0;转到体
BCFTRISE,0;将PORTE0设置为输出端口
BCFTRISE,1;将PORTE1设置为输出端口
CLRFTRISD;将PORTD设置为输出端口
BCFSTATUS,RP0;转到体
CLRFPORTD;将PORTD清零
BCFPORTE,0;将PORTE0清零
BCFPORTE,1;将PORTE1清零
LOOP
MOVLW.2
ANDLW0FH
CALLTABLE;调用查表指令
MOVWFONE_BIT
MOVLW80H
ADDWFONE_BIT,0
MOVWFPORTD;显示个位段码和小数点
BCFPORTE,0;关闭小数点后位显示位码
BSFPORTE,1;选通个位显示位码
CALLDELAY_20ms
MOVLW.3
ANDLW0FH
CALLTABLE;调用查表指令
MOVWFPORTD;显示小数段码
BCFPORTE,1;关闭个位显示位码和小数点
BSFPORTE,0;选通小数位显示位码
CALLDELAY_20ms
GOTOLOOP
;**
;********************************************************************************************************
;查表子程序,用于显示段码数字
;数码管为共阴数码管
;********************************************************************************************************
;**
TABLE
ADDWFPCL,1
RETLW3FH;"0"
RETLW06H;"1"
RETLW5BH;"2"
RETLW4FH;"3"
RETLW66H;"4"
RETLW6DH;"5"
RETLW7DH;"6"
RETLW07H;"7"
RETLW7FH;"8"
RETLW6FH;"9"
;**
;********************************************************************************************************
;**函数名称:
DELAY_20ms
;**函数功能:
延时ms
;**入口参数:
无
;**出口参数:
无
;********************************************************************************************************
;**
DELAY_20ms
MOVLWD'28';设置外部循环次数
MOVWFCOUNT1;
LOOP1
MOVLWD'237';设置内部循环次数
MOVWFCOUNT2;
DECFSZCOUNT2,1;内部循环变量自减,为则跳转
GOTO$-1;
DECFSZCOUNT1,1;外部循环变量自减,为则跳转
GOTOLOOP1;
RETURN;返回主程序
;*********************************************************************************************************
END
;*********************************************************************************************************
;**EndOfFile
;*********************************************************************************************************
五、实验结果与分析
六、实验小结(碰到的问题及解决方法)
1.在实验中,开始无法使LED管发光,最后发现是跳线器没有接对
2注意弱上拉的开启设置,数码管的表的设置;
3注意在数码管实验中的公共端的设置;
4实验前先检查电路是否连接完好,若没有,用跳脱线将所要用的电路连接起来,否则无法显示连接状态和显示结果;