实验指导书
梁应选 王楠
(适应于技术与仪器专业) 陕西理工大学机械工程学院
实验中心
实验一 数码管驱动显示实验
一、实验目的
了解数码管显示原理;掌握读表程序的编写。 二、实验设备和器件
PC机 一台 PROTEUS仿真软件 一套 实验箱 一台 ISP下载器 一台
51仿真器 一台(可选) 三、实验内容 1、硬件电路
图:8位共阳数码管
2、硬件连接表
MCU-AT89S52 P00~P07 P20~P27 8位共阳数码管 SA~SH C0~C7 四、实验要求 利用IO口实现动态扫描数码管,数码管显示“12345678“。 五、实验步骤 1、新建工程:
打开Proteus 8环境,在快捷工具栏中点击源代码按纽,然后点击源码选择新建工程,出现新固件项目对话框,在系列一栏中选择8051,在控制器一栏选择AT89C52,编译器一栏中选择ASEM—51(Proteus),然后点击确定,新工程创建完成。 2、汇编程序输入:
将需要编译的程序代码输入到main.asm文件中,输入好程序代码后,然后在工程中,右键单击AT89C52,在出现的下拉列表中选中构建工程,编译完成返回LINK/LOCATE RUN COMPLETE. 0 WARNING(S), 0 ERROR(S)
编译成功。表示工程编译成功。
3、编译成功后,切换到原理图状态下点击运行按纽,可通过人机接口观察程序的仿真结果。 4、连接ISP下载器一端到USB接口,另一端连到目标板。打开实验台电源,参考产品说明书中的ISP下载软件使用方法对程序进行下载。
5、接下来大家就可以按照硬件连接表连线了,然后测试程序,观察实验现象,理解程序,最后自己修改程序提高编程能力。 六、实验预习要求
1、LED数码显示原理:七段LED显示器内部由七个条形发光二极管和一个小圆点发光二极管组成,根据各管的极管的接线形式,可分成共阴极型和共阳极型。LED数码管的g~a七个发光二极管因加正电压而发亮,因加零电压而不以发亮,不同亮暗的组合就能形成不同的字形,这种组合称之为字形码。 2、由于显示的数字0-9的字形码没有规律可循,只能采用查表的方式来完成我们所需的要求了。这样我们按着数字0-9的顺序,把每个数字的笔段代码按顺序排好!建立的表格如下所示:TABLE DB 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h 七、参考程序 参考程序见光盘 八、实验现象
烧录程序后运行,数码管显示“12345678”。 九、实验思考题
1、编写代码实现数字“12345678”和“87654321”交替显示。
2、编写代码实现数码管环形流动,流动的方向、速度有规律有节奏的变化;
实验十三 ADC0809模数转换实验
一、实验目的
了解A/D转换与单片机的接口;了解ADC0809转换性能及编程方法;通过实验了解单片机如何进行数据采集。 二、实验设备和器件
PC机 一台 PROTEUS仿真软件 一套 实验箱 一台 ISP下载器 一台
51仿真器 一台(可选) 三、实验内容 1、硬件电路
图:8位共阳数码管
图:ADC0809模数转换
2、硬件连接表
MCU-AT89S52 P37 P36 P27 ALE P30 P00~P07 P10~P17 P20~P23 GND 模数转换 RD WR CS CLK EOC DB0~DB7 IN0接100K电位器 A、B、C 8位共阳数码管 SA~SH C0~C3 注:ALE接口在AT89S52的核心板上 四、实验要求
利用ADC0808/(0809)做A/D转换器,由实验板上的电位器提供模拟量输入,编写程序将模拟量转换成二进制数字量,用P1口输出到发光二极管显示,或通过八段码数码管将数值显示出来。实物板中使用ADC0809芯片,它与ADC0808是全兼容的。
五、实验步骤 1、新建工程:
打开Proteus 8环境,在快捷工具栏中点击源代码按纽,然后点击源码选择新建工程,出现新固件项目对话框,在系列一栏中选择8051,在控制器一栏选择AT89C52,编译器一栏中选择ASEM—51(Proteus),然后点击确定,新工程创建完成。 2、汇编程序输入:
将需要编译的程序代码输入到main.asm文件中,输入好程序代码后,然后在工程中,右键单击AT89C52,在出现的下拉列表中选中构建工程,编译完成返回LINK/LOCATE RUN COMPLETE. 0 WARNING(S), 0 ERROR(S)
编译成功。表示工程编译成功。
3、编译成功后,切换到原理图状态下点击运行按纽,可通过人机接口观察程序的仿真结果。 4、连接ISP下载器一端到USB接口,另一端连到目标板。打开实验台电源,参考产品说明书中的ISP下载软件使用方法对程序进行下载。
5、接下来大家就可以按照硬件连接表连线了,然后测试程序,观察实验现象,理解程序,最后自己修改程序提高编程能力。 六、实验预习要求
1、主要知识点概述:A/D转换器大致有三类:一是双积分A/D转换器,优点是精度高,抗干扰性好,价格便宜,但速度慢;二是逐次逼近A/D转换器,精度、速度、价格适中;三是并行A/D转换器,速度快,价格也昂贵。
实验用的ADC0808属第二类,是8位A/D转换器,每采集一次一般需100s。本实验可采用延时方式或查询方式读入A/D转换结果,也可以采用中断方式读入结果,在中断方式下,A/D转换结束后会自动产生EOC信号,将其与CPU的外部中断相接。
2、实验结果说明:调整电位计,得到不同的电压值,转换后的数据通过发光二级管输出。 七、参考程序 参考程序见附录 八、实验现象
烧录程序后运行,数码管显示当前电压值,旋转旋钮在0—5V调节电压,数码管跟随显示。 九、实验思考题
1、编程控制八通道轮流采用,经过转换后显示
附录一:原理图 实验一原理图
实验二原理图
附录二:软件参考程序 实验一:参考程序
;********************功能说明******************************* ;用AT89S52的MCU八位共阳数码管显示 ;程序启动时,数码管显示1,2,3,4,5,6,7,8,
;*********************************************************** ORG 00H LJMP START ;跳至主程序 ORG 000BH ;中断子程序起始地址 T0INT: PUSH PSW ;状态保护 MOV TH0,#0FCH ;置定时器初值 MOV TL0,#17H MOV A,#0FFH MOV P0,A MOV A,P2 RL A MOV P2,A CJNE A,#00000001B,N_LOOP1 ;相等就不跳转 MOV DPTR,#TABLE ;指针指向表头地址 MOV A,#01H ;设置地址偏移量 MOVC A,@A+DPTR ;查表取得段码,送A存储 MOV P0,A ;段码送LED显示 JMP EXIT
N_LOOP1: CJNE A,#00000010B,N_LOOP2 ;相等就不跳转 MOV DPTR,#TABLE ;指针指向表头地址 MOV A,#02H ;设置地址偏移量 MOVC A,@A+DPTR ;查表取得段码,送A存储 MOV P0,A JMP EXIT
N_LOOP2: CJNE A,#00000100B,N_LOOP3 ;相等就不跳转 MOV DPTR,#TABLE ;指针指向表头地址 MOV A,#03H ;设置地址偏移量 MOVC A,@A+DPTR ;查表取得段码,送A存储 MOV P0,A JMP EXIT
N_LOOP3: CJNE A,#00001000B,N_LOOP4 ;相等就不跳转 MOV DPTR,#TABLE ;指针指向表头地址 MOV A,#04H ;设置地址偏移量 MOVC A,@A+DPTR ;查表取得段码,送A存储 MOV P0,A JMP EXIT
N_LOOP4: CJNE A,#00010000B,N_LOOP5 ;相等就不跳转 MOV DPTR,#TABLE ;指针指向表头地址 MOV A,#05H ;设置地址偏移量
MOVC A,@A+DPTR ;查表取得段码,送A存储 MOV P0,A JMP EXIT
N_LOOP5: CJNE A,#00100000B,N_LOOP6 ;相等就不跳转 MOV DPTR,#TABLE ;指针指向表头地址 MOV A,#06H ;设置地址偏移量 MOVC A,@A+DPTR ;查表取得段码,送A存储 MOV P0,A JMP EXIT
N_LOOP6: CJNE A,#01000000B,N_LOOP7 ;相等就不跳转 MOV DPTR,#TABLE ;指针指向表头地址 MOV A,#07H ;设置地址偏移量 MOVC A,@A+DPTR ;查表取得段码,送A存储 MOV P0,A JMP EXIT
N_LOOP7: CJNE A,#10000000B,EXIT ;相等就不跳转 MOV DPTR,#TABLE ;指针指向表头地址 MOV A,#08H ;设置地址偏移量 MOVC A,@A+DPTR ;查表取得段码,送A存储 MOV P0,A EXIT: POP PSW RETI ORG 0100H START: MOV P0,#0FFH MOV P2,#01H MOV TMOD,#01H ;方式1,定时器 MOV TH0,#0FCH ;置定时器初值 MOV TL0,#17H MOV IE,#10000010B ;EA=1,IT0=1 SETB TR0 ;开始定时 JMP $ TABLE: DB 0c0H,0f9H,0a4H,0b0H,99H,92H,82H,0f8H,80H,90H,0ffH; (0-9,off) END
实验二:参考程序
;********************功能说明******************************* ;用AT89S52的MCU驱动ADC0809进行模数转换,将得到的信号再次转换为模拟信号显示出来
;程序启动时,就即刻显示AD0809通道0的电压值
;*********************************************************** ;************* IO口定义 **************/ EOC BIT P3.0 CS BIT P2.7
;/****************************** 用户定义宏 ***********************************/
LED_0 DATA 30H ;显示缓冲区 LED_1 DATA 31H LED_2 DATA 32H LED_3 DATA 33H ADC DATA 34H ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV A,#0FFH MOV P0,A MOV A,#00H MOV P2,A
MAIN1: MOV DPTR,#7FFFH MOV A,#0FH MOVX @DPTR,A LOOP: JNB EOC,LOOP ;等待转换结束 MOVX A,@DPTR MOV ADC,A
;------数据处理,已备显示------------------------
MOV A,ADC ;将AD转换结果转换成BCD码 MOV B,#0C3H ;乘以19.5MV MUL AB MOV R7,A MOV R6,B
HB2: CLR A ;BCD码初始化 CLR C MOV R3,A MOV R4,A MOV R5,A
MOV R2,#10H ;转换双字节十六进制整数
HB3: MOV A,R7 ;从高端移出待转换数的一位到CY中 RLC A MOV R7,A MOV A,R6 RLC A MOV R6,A
MOV A,R5 ;BCD码带进位自身相加,相当于乘2 ADDC A,R5
DA A ;十进制调整 MOV R5,A MOV A,R4 ADDC A,R4 DA A
MOV R4,A MOV A,R3 ADDC A,R3
MOV R3,A ;双字节十六进制数的万位数不超过6,不用调整 DJNZ R2,HB3 MOV A,R5 SWAP A ANL A,#0FH MOV LED_0,A MOV A,R4 ANL A,#0FH MOV LED_1,A MOV A,R4 SWAP A ANL A,#0FH MOV LED_2,A MOV A,R3 ANL A,#0FH MOV LED_3,A
LCALL DISP ;调用显示子程序 ;LCALL DELAY LJMP MAIN1
;//////数码管显示子程序/////////////////////////////////////////////// DISP: MOV DPTR,#TABLE ;送字型码表首地址 MOV A,LED_0 ;数码显示子程序 MOVC A,@A+DPTR MOV P1,A SETB P2.3 LCALL DELAY CLR P2.3 MOV A,LED_1 MOVC A,@A+DPTR MOV P1,A SETB P2.2 LCALL DELAY CLR P2.2 MOV A,LED_2 MOVC A,@A+DPTR MOV P1,A SETB P2.1 LCALL DELAY CLR P2.1 MOV A,LED_3
MOVC A,@A+DPTR MOV P1,A CLR P1.7 SETB P2.0 LCALL DELAY CLR P2.0 RET
;//////延时子程序//////////////////////////////////// DELAY: MOV R6,#0AH ;延时5毫秒 D1: MOV R7,#0FAH DJNZ R7,$ DJNZ R6,D1 RET
;//////数码管字形码表///////////////////////////////// TABLE: DB 0C0H;0 DB 0F9H;1 DB 0A4H;2 DB 0B0H;3 DB 099H;4 DB 092H;5 DB 082H;6 DB 0F8H;7 DB 080H;8 DB 090H;9
;/////程序结束//////////////////////////////////////// END
因篇幅问题不能全部显示,请点此查看更多更全内容