2013单片机实验指导书(含程序代码)

更新时间:2024-01-31 05:06:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验一 单个发光二极管点亮 实验二 单个发光二极管闪烁 实验三 多彩流水灯实验 实验四 按键控制彩灯

实验六 数码管静态显示实验 实验七 数码管动态显示实验 实验七 外部中断的应用 实验八 定时器实验

实验九 单片机与PC机通信的设计 实验十 简易秒表的设计 附录:

I

第一章 HFWH-MT51简介

HFWH-MT51实验系统集单片机学习,仿真,编程,在线下载于一体,集成了学习51单片机众多基本功能:USB接口,图型、字符型液晶显示,红外接发,蜂鸣器,实时钟,温度采集,数码管,LED灯,键盘,串行EEPROM、看门狗,RS232,继电器,步进电机驱动等等。能满足学习51单片机基础知识及提高的需要,也可以作为AVR学习板使用。 ☆.集成USB转232接口(CP2102)

☆.128X64点阵液晶显示模块,内置汉字库 ☆.集成16X2,液晶显示模块

☆.集成红外模块,红外接收,可实现红外摇控解码功能 ☆.集成一路继电器

☆.集成DS1302时钟功能,结合液晶,数码管显示可做时间显示实验 ☆.集成DS18B20温度测量芯片,结合液晶,数码管显示可做温度计实验 ☆.集成32个P口LED灯,可清楚观察IO口输出状态,可做流水灯实验 ☆.集成I2总线串行E2PROM 24C02( 4K bit E2PROM) ☆.集成串行E2PROM 93C46 ☆.集成高达8位的数码管

☆.具有扩展接口,对外扩展所有P口 ☆.集成4个独立键盘 ☆.集成4X4矩阵键盘 ☆.集成1个复位按键

☆.集成RS232串行通讯接口 ☆. 集成电脑键盘接口 ☆.集成步进电机驱动

☆.蜂鸣器,可实现简单电子琴功能

1

第二章 实验系统硬件图

1:编程系统插座。2:编程系统监控芯片。3:实验仿真系统插座。4:PC键盘接口。

5:实验系统晶振1-40M可选。6:AVR芯片复位按键。7:独立按键。 8:红外接收头。9:温度传感器DS18B20。10:51芯片复位按键。 11:4*4键盘。12:外接ISP下载线接口。13:对外仿真2051接口。 14:单片机40P完整外扩。15:继电器。16:蜂鸣器。17:DS1302实时钟芯片。

18:93C46存储器。19:ULN2003步进电机驱动。20:24C02存储器。 21:32P口LED。22:12864液晶接口。23:八位数码管。 24:1602液晶接口。25:USB接口。 26:DC5V电源接口。27:232串行接口。

28:USB C通信模块。29:MAX232通信模块。

2

第三章 HFWH-MT51实验系统说明

一.跳线,接口

1:电源切换按钮,按下去实验系统供电,弹上来编程系统供电。

2:USB通信切换按钮,按下去USB跟实验系统通信,弹上来USB跟编程系统通信。

3:串行通信切换按钮,按下去串口跟实验系统通信,弹上来串口跟编程系统通信。

4:数码管液晶切换按钮,按下去液晶供电,弹上来数码管供电。 5:烧写20P-2051和40P芯片的切换。 6:液晶背光的开关。

7:实验系统IO口连接到PC键盘的开关。

8:实验系统IO口连接到温度传感器18B20的开关。 9:实验系统IO口连接到,93C46或24C02的切换跳线。

10:32P口LED电源的开关,实验系统IO口连接到继电器,蜂鸣器,红外接收头的开关。

11:实验系统IO口连接到,DS1302实时钟或UL2003步进电机驱动的切换。 二.编程系统

实验板上集成了一个编程器,可用USB接口和232串口,可以直接烧写:AT89C51,AT89C52,AT89S51,AT89S52,AT89C2051,AT89C4051,AT24C02,AT93C46等

3

三.ISP下载

用实验板上的232串口可以直接对STC,NXP,华邦公司等,带有串口ISP下载的芯片直接进行下载,也可以配合我公司的ISP下载线对AT公司的S51和AVR芯片进行下载 四.仿真系统

配合SST89E58,SST89E564仿真模块可以对板上实验硬件资源进行仿真,也可以对外部资源进行仿真(具体使用请看文件仿真器的使用方法) 五.实验系统

实验板上集成了十几种实验硬件(具体说明请看第四章),也可以外扩实验

4

第四章 Keil C51软件的使用

Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM 语言和C语言的程序设计,界面友好,易学易用。本次实验主要学习Keil C51软件的使用方法。

进入 Keil C51 后,屏幕如下图所示,几秒钟后出现编辑界。

启动Keil C51时的屏幕

进入Keil C51后的编辑界面

简单程序的调试: 1.建立一个新工程

单击Project菜单,在弹出的下拉菜单中选中New Project选项

2.然后选择你要保存的路径,输入工程文件的名字,比如保存到C51目录里,工程文件的名字为C51,如下图所示,然后点击保存。

5

3.这时会弹出一个对话框,要求你选择单片机的型号,你可以根据你使用

的单片机来选择,keil c51几乎支持所有的51核的单片机,我这里还是以大家用的比较多的Atmel 89C51来说明,如下图所示,选择89C51之后,右边栏是对这个单片机的基本的说明,然后点击确定。

4.完成上一步骤后,屏幕如下图所示

6

5.在下图中单击“File”菜单,再在下拉菜单中单击“New”选项

新建文件后屏幕如下图所示

此时光标在编辑窗口里闪烁,这时可以键入用户的应用程序了,但笔者建议首先保存该空白的文件,单击菜单上的“File”,在下拉菜单中选中“Save As”选项单击,屏幕如下图所示,在“文件名”栏右侧的编辑框中,键入欲使用的文件名,同时,必须键入正确的扩展名。注意,如果用C语言编写程序,则扩展名

7

为(.c);如果用汇编语言编写程序,则扩展名必须为(.asm)。 然后,单击“保存”按钮。

6)回到编辑界面后,单击“Target 1”前面的“+”号,然后在“Source Group 1”上单击右键,弹出如下菜单

然后单击“Add File to Group ‘Source Group 1’” 屏幕如下图所示

选中Test.c,然后单击“Add ”屏幕好下图所示

8

注意到“Source Group 1”文件夹中多了一个子项“Text1.c”了吗?子项的多少与所增加的源程序的多少相同

7)现在,请输入如下的C语言源程序:

#include //包含文件 #include

void main(void) //主函数 { P0=0x00; P1=0xff; P2=0xf0; P3=0x0f; while(1)}

在输入上述程序时,读者已经看到了事先保存待编辑的文件的好处了吧,即Keil c51会自动识别关键字,并以不同的颜色提示用户加以注意,这样会使用户少犯错误,有利于提高编程效率。程序输入完毕后,如下图所示:

9

第五章 单片机实验

实验一 单个发光二极管点亮

一、实验目的

1、熟悉KEIL C软件;

2、熟悉HFWH-MT51实验板;

3、了解I/O口输出的工作状态; 4、掌握顺序程序设计方法。

二、实验内容

1、熟记汇编指令;

2、通过P1口的P1.6口控制1个LED灯点亮; 3、掌握电路工作原理图

图1 I/0接口电路

4、编写实验程序

三、实验器材

电脑一台,单片机实验板

四、实验步骤

1、编写程序保存文件到E盘,扩展名为.asm或者为.c。 2、编译,检察语法错误,修改程序至无错误为止。 3、把实验板上的控制I/0跳线跳到32P口LED电源的开关的位置,电源接通; 4、将编译的可执行文件(后缀 .hex)下载到开发板,观察实验现象。

五、实验中应主意的问题

1、文件的扩展名必须为.asm或者为.c,文件名不可为汉字。

10

2、必须在编译完程序后才可执行程序。

六、参考程序 七、 思考题

1、请想出几种实现以上功能的编程方法。

八、 实验报告要求

1、实验目的 2、实验器材

3、实验内容(实验得到正确程序及实验中出现的验证数据) 4、实验中遇到的问题及解决办法,思考题。 5、实验心得

实验二 单个发光二极管闪烁

一、实验目的

1、了解I/O口输出的工作状态; 2、掌握软件延时的设计及调试方法。 3、掌握循环程序设计方法;

二、实验内容

1、熟记汇编指令;

2、通过P1口的P1.6口控制1个LED灯1秒钟闪烁一次; 3、掌握电路工作原理图; 见实验一图1。 4、编写实验程序

三、实验器材

电脑一台,单片机实验板

四、实验步骤

1、编写程序保存文件到E盘,扩展名为.asm或者为.c; 2、编译,检察语法错误,修改程序至无错误为止;

3、把实验板上I/O跳线跳到32P口LED电源的开关LED的位置,电源接通; 4、将编译的可执行文件(后缀 .hex)下载到开发板,观察实验现象。

五、实验中应主意的问题

11

1、文件的扩展名必须为.asm或者为.c,文件名不可为汉字。 2、必须在编译完程序后才可执行程序。

六、参考程序 七、 思考题

1、请想出几种实现以上功能的编程方法。

2、请思考下,使P1口8个灯同时闪烁程序如何改动?

八、 实验报告要求

1、实验目的 2、实验器材

3、实验内容(实验得到正确程序及实验中出现的验证数据) 4、实验中遇到的问题及解决办法,思考题。 5、实验心得

实验三 多彩流水灯实验

一、实验目的

1、了解I/O口输出的工作状态; 2、熟悉逻辑运算指令及移位指令; 2、掌握查表程序设计方法。

二、实验内容

1、熟记汇编指令;

2、分别利用循环左移指令和查表法,使P0口8个LED轮流点亮,每个LED灯点亮时间为0.5秒。 3、掌握电路工作原理图; 见实验一图1。 4、编写实验程序

三、实验器材

电脑一台,单片机实验板

四、实验步骤

1、编写程序保存文件到E盘,扩展名为.asm或者为.c; 2、编译,检察语法错误,修改程序至无错误为止;

3、把实验板上I/O跳线跳到32P口LED电源的开关LED的位置,电源接通; 4、将编译的可执行文件(后缀 .hex)下载到开发板,观察实验现象。

五、实验中应主意的问题

1、文件的扩展名必须为.asm或者为.c,文件名不可为汉字。

12

2、必须在编译完程序后才可执行程序。

六、参考程序 七、 思考题

1、如何实现8个LED灯复杂点亮?

2、请思考下,如何实现8个LED灯循环右移?

八、 实验报告要求

1、实验目的 2、实验器材

3、实验内容(实验得到正确程序及实验中出现的验证数据) 4、实验中遇到的问题及解决办法,思考题。 5、实验心得

实验四 键控彩灯实验

一、实验目的

1、理解独立按键的构成和工作原理,设计接口电路; 2、利用独立按键控制LED灯; 3、掌握软件去抖动的方法

二、实验内容

13

1、熟记汇编指令(跳转指令和查表指令、位操作类指令);

2、按键K01输入,P0.0口LED交替亮灭;按键K02输入,P0.1口LED灯交替亮灭;按键K03输入,P0.2口LED灯交替亮灭; 3、电路工作原理图

4、编写实验程序

三、实验器材

电脑一台,单片机实验板

四、实验步骤

1、在单片机实验板上找到K01,K02,K03分别对应的位置;

2、把实验板上把实验板上I/O跳线跳到32P口LED电源的开关LED的位置,电源接通;

3、保存文件到E盘,扩展名为.asm或者为.c。 4、编译,检察语法错误,修改程序至无错误为止。

5、将编译的可执行文件(后缀 .hex)下载到开发板,观察实验现象。

五、实验中应主意的问题

1、文件的扩展名必须为.ASM,文件名不可为汉字。 2、必须在编译完程序后才可执行程序。

六、参考程序 七、 思考题

1、按键K01按下P0.0口LED灯亮,松开灭;按键K02按下P0.1口LED灯亮,

14

松开灭;按键K03按下P0.2口LED灯亮,松开灭;

八、 实验报告要求

1、实验目的 2、实验器材

3、实验内容(实验得到正确程序及实验中出现的验证数据) 4、实验中遇到的问题及解决办法,思考题。 5、实验心得

实验四 外部中断的应用

一、实验目的

1、结合上课内容对外部中断有一个大致的了解 2、锻炼学生的动手能力和实际应用能力

15

二、实验内容

1、阅读本次实验各项内容,熟悉实验电路图,了解各仪器仪表的使用方法 2、关于中断的几个控制寄存器各位具体意义的复习

3、没有键按下时,P2口接的LED循环左移点亮,有键按下时,P2口接的LED全部点亮,按键接在P3.2口上(外部中断0),编写程序实现要求。 4、电路工作原理图

VCCD1D2D3D4D5D6D7D8LEDLEDLEDLEDLEDLEDLEDLEDR21KU1123456781312151431191891716P10/TP11/TP12P13P14P15P16P17INT1INT0T1T0EA/VPX1X2RESETRDWR80C52RXDTXDALE/PPSEN10113029P00P01P02P03P04P05P06P07P20P21P22P23P24P25P26P2739383736353433322122232425262728R31KR41KR51KR61KR71KR81KR91KVCCR110KS1SW-PB 三、实验器材

电脑一台,单片机实验板

四、实验步骤

1、把实验板上的32P口LED的跳线跳到32P口LED的位置,电源接通 2、保存文件到E盘,扩展名为.asm或者为.c。 3、编译,检察语法错误,修改程序至无错误为止。

4、将编译的可执行文件(后缀 .hex)下载到开发板,观察实验现象。

五、实验中应主意的问题

1、连线时应注意不带电操作。

六、参考程序

1、汇编程序

ORG 0000H ;开始 AJMP MAIN ORG 0003H

16

AJMP INT_0 ORG 0100H

MAIN: MOV SP,#60H ; SETB EX0 SETB EA CLR IT0 MOV A,#0FEH MAIN1: MOV P2,A ACALL DELAY RL A SJMP MAIN1

INT_0: CLR EA

MOV P2,#00H LCALL DELAY SETB EA RETI

DELAY: MOV R7,#30 DL1: MOV R6,#50 DL2: MOV R5,#50 DJNZ R5,$ DJNZ R6,DL2 DJNZ R7,DL1 RET END

2、C语言程序

#include\ //延时函数

void Delay(void) {

unsigned char i,j,k; for(i=0;i<30;i++) for(j=0;j<50;j++) for(k=0;k<100;k++); }

void INT_0 (void)interrupt 0 {

EA=0; P2=0x00;

17

Delay(); EA=1; }

//主函数

void main(void) {

unsigned char i=0x01;

EX0=1; EA=1;

IT0=0; while(1) {

P2=~i; Delay(); i=i<<1;

if(i==0)i=0x01; } }

七、思考题

1、如果换成外部中断0该怎么实现 2、如何设计多个外部中断请求响应程序

八、实验报告要求

1、实验目的 2、实验器材

3、实验中遇到的问题及解决办法,并回答思考题 4、实验心得

实验五 I2 C总线串行E2PROM 24C02实验

一、实验目的

1、熟悉24C02的原理,掌握串行E2PROM工作原理 2、学会使用24C02进行数据读/写和连续读/写方式

18

二、实验内容

1、使用24C02进行数据读/写,并检验写入数据是否正确

2、24C02存储数码管显示,将数码管显示代码写入到24C02中,然后读出

来通过数码管显示。 3、电路工作原理图

三、实验器材

电脑一台,单片机实验板

四、实验步骤

1、把实验板上的24C02---93C46的4个跳线全部跳到24C02的位置。 2、按钮切换到数码管显示模式。

3、编译,检察语法错误,修改程序至无错误为止。

4、将编译的可执行文件(后缀 .hex)下载到开发板,观察实验现象。

五、实验中应主意的问题

1、连线时应注意不带电操作。

六、参考程序

1、C语言程序

#include #include

#define OP_READ 0xa1 // 器件地址以及读取操作 #define OP_WRITE 0xa0 // 器件地址以及写入操作 #define MAX_ADDR 0x7f // AT24C02最大地址

// 写入到AT24C01的数据串

Unsigned char code dis_code[11]={ 0xc0,0xf9,0xa4,0xb0,0x99,

0x92,0x82,0xf8,0x80,0x90, 0xff};// 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, off

19

sbit SDA = P3^4; sbit SCL = P3^3;

void start(); void stop();

unsigned char shin();

bit shout(unsigned char write_data);

unsigned char read_random(unsigned char random_addr);

void write_byte( unsigned char addr, unsigned char write_data); void fill_byte(unsigned char fill_data); void delayms(unsigned char ms);

main(void) {

unsigned char i; SDA = 1; SCL = 1;

fill_byte(0xff); // 全部填充0xff

for(i = 0 ; i < 8; i++) //写入显示代码到AT24Cxx {

write_byte(i, dis_code[i]); }

i = 0; while(1) {

P2=0x00; // 8个数码管位选 全部选中 P0 = read_random(i); // 循环读取24Cxx内容,并输出到P0口

i++;

i &= 0x07; // 循环读取范围为0x00~0x07 delayms(250); } }

void start() // 开始位 {

SDA = 1; SCL = 1; _nop_();

20

_nop_(); SDA = 0; _nop_(); _nop_(); _nop_(); _nop_(); SCL = 0; }

void stop() // 停止位 {

SDA = 0; _nop_(); _nop_(); SCL = 1; _nop_(); _nop_(); _nop_(); _nop_(); SDA = 1; }

unsigned char shin()

// 从AT24Cxx移入数据到MCU {

unsigned char i,read_data; for(i = 0; i < 8; i++) {

SCL = 1;

read_data <<= 1;

read_data |= (unsigned char)SDA; SCL = 0; }

return(read_data); }

bit shout(unsigned char write_data) // 从MCU移出数据到AT24Cxx {

unsigned char i; bit ack_bit;

for(i = 0; i < 8; i++) // 循环移入8个位 {

SDA = (bit)(write_data & 0x80);

21

_nop_(); SCL = 1; _nop_(); _nop_(); SCL = 0;

write_data <<= 1; }

SDA = 1; // 读取应答 _nop_(); _nop_(); SCL = 1; _nop_(); _nop_(); _nop_(); _nop_();

ack_bit = SDA; SCL = 0;

return ack_bit; // 返回AT24Cxx应答位 }

void write_byte(unsigned char addr, unsigned char write_data) // 在指定地址addr处写入数据write_data {

start();

shout(OP_WRITE); shout(addr);

shout(write_data); stop();

delayms(10); // 写入周期 }

void fill_byte(unsigned char fill_data) // 填充数据fill_data到EEPROM内 {

unsigned char i;

for(i = 0; i < MAX_ADDR; i++) {

write_byte(i, fill_data); } }

unsigned char read_current() // 在当前地址读取

22

{

unsigned char read_data; start();

shout(OP_READ); read_data = shin(); stop();

return read_data; }

unsigned char read_random(unsigned char random_addr) // 在指定地址读取 {

start();

shout(OP_WRITE); shout(random_addr);

return(read_current()); }

void delayms(unsigned char ms) // 延时子程序 {

unsigned char i; while(ms--) {

for(i = 0; i < 120; i++); } }

七、思考题

1、如何连续向24C02写入32字节数据?

八、实验报告要求

1、实验目的 2、实验器材

3、实验中遇到的问题及解决办法,并回答思考题 4、实验心得

实验六 继电器实验

一、实验目的

1、掌握电子开关原理。

二、实验内容

23

1、实现电子开关的控制。

2、用P1.3控制继电器的吸合和断开。 3、电路工作原理图。

三、实验器材

电脑一台,单片机实验板

四、实验步骤

1、把实验板上的继电器跳线跳到继电器的位置。 2、编译,检察语法错误,修改程序至无错误为止。

3、将编译的可执行文件(后缀 .hex)下载到开发板,观察实验现象。

五、实验中应主意的问题

1、连线时应注意不带电操作。

六、参考程序

1、C语言程序

#include \

sbit OUT=P1^3;//继电器控制管脚

void delay(void);

void main(void) {

while(1) {

OUT=0; //打开继电器 delay(); //延时

OUT=1; //关闭继电器 delay(); //延时

24

} }

//延时函数

void delay(void) {

unsigned char i,j,k;

for(i=0;i<100;i++) for(j=0;j<100;j++) for(k=0;k<20;k++); }

七、思考题:

1、如何利用继电器控制强电?

八、实验报告要求:

1、实验目的 2、实验器材

3、实验中遇到的问题及解决办法,并回答思考题 4、实验心得

实验七 单片机与PC机的RS232串行通信实验

一、实验目的

1.了解RS232串行通讯和全双工工作原理 2.掌握RS232串行通讯功能

3. 学习使用上位机软件“串行调试助手”。

25

二、实验仪器

1.单片机开发板一套 2.电脑一台

三、实验预备知识

1、熟记汇编指令(跳转指令和查表指令、位操作类指令)。 2、根据实验目的将程序编写出来。 3、硬件连接图 (1)MAX202

(a)传输距离≤15m,最大传输率≤20kbps (b)全双工工作方式

VCC—电源电压 GND—地 T1IN、T1OUT—第1路发送通道 R1IN、R1OUT—第1路接收通道 T2IN、T2OUT—第2路发送通道 R2IN、R2OUT—第2路接收通道 (2)电路工作原理图

+5VP10P11P12P13P14P15P16P17123456789U1P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7RST/VPDVCCP0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7403938373635343332AD0AD1AD2AD3AD4AD5AD6AD7

图9.1 MAX202引脚图

J2816T1OUT27R1IN38495C51uF++C41uFU312345678C1+VccV+GNDC1-T1OUTC2+R1INC2-R1OUTV-T1INT2OUTT2INR2INR2OUTMAX232161514131211109+5V+C61uFT1OUTR1INR1OUTT1INC71uFR1OUT10T1IN11INT012INT113T014T115WR16RD17181920P3.0/RXDEA/VPPP3.1/TXDALE/PROGP3.2/INT0PSENP3.3/INT1P3.4/T0P2.7P3.5/T1P2.6P3.6/WRP2.5P3.7/RDP2.4P2.3XTAL2P2.2XTAL1P2.1VSSP2.089C513130ALE292827262524232221A15A14A13A12A11A10A9A8+ 图1.2 RS232工作电路原理图

四、实验内容

1、MAX232将单片机发出的TTL电平信号转化为RS232电平信号。收发信号从9芯插座通过RS232电缆传送到PC机。

2、编写一段程序,利用单片机的串行口向PC机发送MCS-51字符,通过在PC机的接收软件上看到不停的显示”MCS-51”。

3、程序框图

26

开始设置波特率为9600的定时器1方式和初始值设置串行口方式发送字符串计数值为0计数值对应的字符串装入SBUF判断发送的字符串是否为0x00N发送字符串Y发送中断标志是否为1Y清除中断标志位,发送字符串计数值加1N延时 3、C语言程序

#include

#define uchar unsigned char #define uint unsigned int

uchar idata trdata[10]={'M','C','S','-','5','1',0x0d,0x0a,0x00}; main() {

uchar i; uint j;

TMOD=0x20; //设置波特率为9600的定时器1方式和初始值 TL1=0xfd; TH1=0xfd;

SCON=0xd8; //定义方式3 PCON=0x00; TR1=1;

27

}

while(1) {

i=0;

while(trdata[i]!=0x00) //发送字符串 {

SBUF=trdata[i]; while(TI==0); TI=0; i++; }

for(j=0;j<12500;j++); //延时 }

五、实验步骤

1、把实验板上的PROGRAM-DEBUGGER的3个跳线全部跳到DEBUGGER位置,通过RS232连机线,使RS232与PC相连,设置PC将收到RS232的数据再发回去。

2、利用串口线将单片机开发板和PC机的串口相连; 3、运行Keil C51软件,新建一个工程(如93C46),新建一个文件93c46.c。将文件添加到工程中并编译,如有错,请更改直到编译成功;

4、用编程器将生成的HEX文件烧写到单片机中,或用仿真器来执行程序,将程序下载到仿真器中,具体方法请参考仿真器的使用一节。用编程器将生成的HEX文件烧写到单片机中。

5、在PC机上,打开串口调试小助手。在串行调试助手软件中,设置波特率为9600,无校验,8数据位,1停止位,打开串口。在串口调试小助手的接收区不停的显示“MCS-51”。

六、实验注意事项

1.带电不能拔插串口线,否则容易损坏串口芯片;

2. 若PC机没有串口,可以通过USB转串口设备将PC机的USB口配置为串口。

七、思考题

1.请用户考虑下怎样编写一个单片机串行口发送和接收的程序。 2.请用户思考下,如果是单片机与单片机之间进行串行口通讯应如何进行。

八、实验报告要求

1、实验目的 2、实验器材

3、实验内容(实验得到正确程序及实验中出现的验证数据) 4、实验中遇到的问题及解决办法,思考题。 5、实验心得

28

实验八 数码管静态显示实验

一、实验目的

1.正确理解静态数码管显示电路的构成、工作原理和电路中各元器件的作

用,并对电路进行分析;

29

2.掌握数码管的动态扫描

二、实验仪器

1.单片机开发板一套 2.电脑一台

三、实验预备知识

1、熟记汇编指令(跳转指令和查表指令、位操作类指令)。 2、硬件连接图。

四、实验内容

1、实现两位数码管计数,两段数码管顺序显示0,1,2?99,大于99后,从0开始。相邻两个数的刷新时间为2ms。。

2、汇编语言程序

30

A_BIT EQU 20H ;个位数存放处 B_BIT EQU 21H ;十位数存放处 TEMP EQU 22H ;计数器寄存处 STAR: MOV TEMP,#0 ;初始化计数器 STLOP: ACALL DISPLAY ; INC TEMP MOV A,TEMP

CJNE A,#100,NEXT ;等于100重来 MOV TEMP,#0

NEXT: LJMP STLOP

;显示子程序

DISPLAY: MOV A,TEMP MOV B,#10 DIV AB MOV B_BIT,A MOV A_BIT,B

MOV DPTR,#NUMTAB MOV R0,#4

DPL1: MOV R1,#5 DPLOP: MOV A,A_BIT MOVC A,@A+DPTR MOV P0,A CLR P2.7 ACALL D1MS SETB P2.7 MOV A,B_BIT MOVC A,@A+DPTR MOV P0,A CLR P2.6 ACALL D1MS SETB P2.6 DJNZ R1,DPLOP DJNZ R0,DPL1 RET D1MS:

MOV R7,#50 D1: MOV R6,#20 D2: DJNZ R6,$ DJNZ R7,D1 RET

31

NUMTAB:

DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;013456789字形码

END

五、实验步骤

1、把实验板上的数码管液晶屏切换的按钮开关切换到数码管的位置; 2、通过USB连接线接通开发板电源; 3、运行Keil C51软件,新建一个工程(如93C46),新建一个文件93c46.c。将文件添加到工程中并编译,如有错,请更改直到编译成功;

4、用编程器将生成的HEX文件烧写到单片机中,或用仿真器来执行程序,将程序下载到仿真器中,具体方法请参考仿真器的使用一节。用编程器将生成的HEX文件烧写到单片机中。

5、运行程序,观察结果。

六、实验注意事项

1.给单片机编程过程中,不要拔插单片机; 2.检查实验板上跳线是否正确。

七、思考题

1.请用户考虑下怎样编写一个4位数码管计数程序。 2.请用户思考下,怎样编写一个2位数码管减数程序。

八、实验报告要求

1、实验目的 2、实验器材

3、实验内容(实验得到正确程序及实验中出现的验证数据) 4、实验中遇到的问题及解决办法,思考题。 5、实验心得

实验九 蜂鸣器播放歌曲实验

一、实验目的

1.了解蜂鸣器发音的原理

32

2.掌握蜂鸣器运用和简单音乐的播放

二、实验仪器

1.单片机开发板一套 2.电脑一台

三、实验预备知识

1、熟记汇编指令(跳转指令和查表指令、位操作类指令)。 2.工作原理:通过高低电平控制蜂鸣器 3、硬件连接图。

图2.7 蜂鸣器工作电路原理图

4.控制端口 控制端口:P3.7 开启命令:低电平开

四、实验内容

1、实现蜂鸣器演奏歌曲功能, 乐曲名称为《生日快乐》。利用单片机产生音符,再把乐曲音符翻译成计算机音乐语言,由单片机进行信息处理,再通过蜂鸣器放出音乐。

2、汇编语言程序 BUZZER EQU P3.7 org 0000h ;主程序起始地址 ajmp main ;跳至主程序 org 000bh ;timer0中断起始地址 jmp tim0 ;跳至timer0中断子程序

33

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; org 0030h main: mov tmod,#01h ;设timer0在MODE1 mov ie,#82h ;中断使能 start0: mov 30h,#00h ;取简谱码指针 next: mov a,30h ;简谱码指针载入A mov dptr,#table ;至table取简谱码 movc a,@a+dptr mov r2,a ;取到的简谱码暂存于R2 jz end0 ;是否取到00(结束码)? anl a,#0fh ;不是,则取低4位(节拍码) mov r5,a ;将节拍码存入R5 mov a,r2 ;将取到的简谱码再载入A swap a ;高低四位交换 anl a,#0fh ;取低四位(音符码) jnz sing ;取到的音符码是否为零? clr tr0 ;是,则不发音 jmp d1 sing: dec a ;取到的音符码减1(不含0). mov 22h,a ;存入(22H). rl a ;乘2 mov dptr,#table1 ;至table1取相对的高位字节计数值 movc a,@a+dptr mov th0,a ;取到的高位字节存入TH0 mov 21h,a ;取到的高位字节存入(21H) mov a,22h ;再载入取的的音符码 rl a ;乘2 inc a ;加1

movc a,@a+dptr ;至table1取相对的低位字节计数值 mov tl0,a ;取到的高位字节存入TL0 mov 20h,a ;取到的高位字节存入(20H) setb tr0 ;启动timer0

d1: call delay ;基本单位时间1/4拍187毫秒 inc 30h ;取简谱码指针加1 jmp next ;取下一个码 end0: clr tr0 ;停止timer0 jmp start0 ;重复循环

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;time0中断服务子程序用来产生相应的音调脉冲频率。 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; tim0:

push acc ;将A的值暂存于堆栈

34

4h

push psw ;将psw的值暂存于堆栈 mov tl0,20h ;重设计数值 mov th0,21h cpl BUZZER ;将蜂鸣器反相 pop psw ;至堆栈取回psw的值 pop acc ;至堆栈取回a的值 reti ;返回主程序

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

delay: mov r7,#02h ;187毫秒 d2: mov r4,#187 d3: mov r3,#248 djnz r3,$ djnz r4,d3 djnz r7,d2

djnz r5,delay ;决定节拍 ret

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

table1:

dw 64260,64400,64524,64580 dw 64684,64777,64820,64898 dw 64968,65030,65058,65110 dw 65157,65178,65217

table: ;1 db

82h,01h,81h,94h,84h,0b4h,0a4h,04h,82h,01h,81h,94h,84h,0c4h,0b4h,0

;2 db

82h,01h,81h,0f4h,0d4h,0b4h,0a4h,94h,0e2h,01h,0e1h,0d4h,0b4h,0c4h,0b4h,04h

;3 db

82h,01h,81h,94h,84h,0b4h,0a4h,04h,82h,01h,81h,94h,84h,0c4h,0b4h,04h

;4 db

82h,01h,81h,0f4h,0d4h,0b4h,0a4h,94h,0e2h,01h,0e1h,0d4h,0b4h,0c4h,0b4h,04h,00

end

35

五、实验步骤

1、把实验板上的小喇叭的跳线跳到小喇叭的位置; 2、通过USB连接线接通开发板电源; 3、运行Keil C51软件,新建一个工程(如93C46),新建一个文件93c46.c。将文件添加到工程中并编译,如有错,请更改直到编译成功;

4、用编程器将生成的HEX文件烧写到单片机中,或用仿真器来执行程序,将程序下载到仿真器中,具体方法请参考仿真器的使用一节。用编程器将生成的HEX文件烧写到单片机中。

5、运行程序,观察结果。

六、实验注意事项

1.给单片机编程过程中,不要拔插单片机; 2.检查实验板上跳线是否正确。

七、思考题

1.请用户考虑下,单片机如何产生音乐基调和节拍。 2.请用户思考下,如果将歌曲名称换为《祝你平安》,程序怎么实现。

八、实验报告要求

1、实验目的 2、实验器材

3、实验内容(实验得到正确程序及实验中出现的验证数据) 4、实验中遇到的问题及解决办法,思考题。 5、实验心得

实验十 红外接收实验

一、实验目的

1.了解红外通讯工作原理

36

2.了解红外遥控器的工作原理

二、实验仪器

1.单片机开发板一套 2.电脑一台

三、实验预备知识

1、熟记汇编指令(跳转指令和查表指令、位操作类指令)。 2、TSAL6200红外发光管 (1)峰值波长940nm 3、HS0038B红外接收管 (1)连续传输率800 bit/s (2)接收距离≤35M 4、电路工作原理图

图2.1 红外接收原理图

图2.2 红外收发工作电路原理图

四、实验内容

1、 红外遥控键值解码8888数码管显示。 2、汇编语言程序

;-----------------------------------------------

37

IRCOM EQU 20H ;20H-23H IR使用

IRIN EQU P3.2 BEEP EQU P3.7 RELAY EQU P1.3

;------------------------------------------------ ORG 0000H JMP MAIN

ORG 0003H ;外部中断INT0入口地址 JMP IR_IN

;------------------------------------------------ MAIN:

MOV SP,#60H MOV A,#00H MOV R0,#20H

LOOP0: MOV @R0,A ;20H-27H清零 INC R0

CJNE R0,#28H,LOOP0

MOV IE,#81H ;允许总中断中断,使能 INT0 外部中断 MOV TCON,#01H ;触发方式为脉冲负边沿触发

SETB IRIN SETB BEEP SETB RELAY CALL IR_SHOW

LOOP1:

CALL IR_SHOW MOV A,22H

CJNE A,#40H,LOOP2 ;K17键按下 CLR RELAY ;继电器吸合 LOOP2: CJNE A,#04H,LOOP3 ;K19键按下 SETB RELAY ;继电器关闭 LOOP3: JMP LOOP1

;--------------------------------------------------- ; IR 译码子程序

;--------------------------------------------------- IR_IN:

CLR EA ;暂时关闭CPU的所有中断请求 PUSH ACC PUSH PSW

SETB PSW.3 ;选择工作寄存器组1

38

CLR PSW.4 MOV R2,#04H MOV R0,#IRCOM

I1: JNB IRIN,I2 ;等待 IR 信号出现 DJNZ R2,I1

JMP IR_OUT ;IR信号没出现,退出。 I2: MOV R4,#20 I20: CALL DEL DJNZ R4,I20

JB IRIN,I1 ; I21: JB IRIN,I3 ; CALL DEL JMP I21

I3: MOV R3,#0 ;8 LL: JNB IRIN,I4 ; CALL DEL JMP LL

I4: JB IRIN,I5 ; CALL DEL JMP I4

I5: MOV R2,#0 ;0.14ms L1: CALL DEL

JB IRIN, N1 ; ;IR=0 MOV A,#8 CLR C

SUBB A,R2 ; ;IF C=0 BIT=0 MOV A,@R0 RRC A

MOV @R0,A ; INC R3

CJNE R3,#8,LL ; MOV R3,#0 INC R0

CJNE R0,#24H,LL ; JMP IR_COMP N1: INC R2

CJNE R2,#30,L1 ;0.14ms

IR_OUT: POP PSW POP ACC SETB EA RETI

确认IR信号出现 等 IR 变为高电平 位数清为0

等 IR 变为低电平 等 IR 变为高电平 计数 等 IR 变为高电平

,检查R2中的计数值 判断高低位 处理完一位 需处理完8位 收集到4字节了 计数过长则时间到自动离开39

;--------------------------------------------------------------- ;键值比较与键值数据处理

;22H存入用户编码,23H存入用户编码的反码

;--------------------------------------------------------------- IR_COMP:

MOV A,22H

CPL A ;将22H取反后和23H比较

CJNE A,23H,IR_OUT ;如果不等表示接收数据发生错误,放弃 IR_CHULI:

MOV A,22H ANL A,#0FH

MOV 25H,A ;送个位显示单元 MOV A,22H ANL A,#0F0H SWAP A

MOV 26H,A ;送十位显示单元 CALL IR_SHOW ;显示键值

CALL BEEP_BL ;蜂鸣器鸣响表示解码成功 JMP IR_OUT

;======================================================= ;键值显示

;======================================================= IR_SHOW:

MOV A,25H ;取显示数据到A MOV DPTR,#TAB ;取段码表地址

MOVC A,@A+DPTR ;查显示数据对应段码 MOV P0,A ;段码放入P0口 CLR P2.7 SETB P2.6 LCALL DELAY1

MOV A,26H ;取显示数据到A MOV DPTR,#TAB ;取段码表地址

MOVC A,@A+DPTR ;查显示数据对应段码 MOV P0,A ;段码放入P0口 CLR P2.6 SETB P2.7 LCALL DELAY1 RET

;----------------------------------------------------- TAB:

DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H

DB 80H,90H,88h,83h,0c6h,0a1h,86h,8eh ;0-F ;-----------------------------------------------------

40

;-------------------------------------------------------- ;蜂鸣器响一声子程序

;-------------------------------------------------------- BEEP_BL:

MOV R6,#100 BL1: CALL DEX1 CPL BEEP DJNZ R6,BL1 MOV R5,#20 CALL DELAY RET

DEX1: MOV R7,#180 DEX2: NOP

DJNZ R7,DEX2 RET

DELAY: ;延时R5×10MS MOV R6,#25 D1: MOV R7,#100 DJNZ R7,$ DJNZ R6,D1 DJNZ R5,DELAY RET

;------------------------------------------------ ; DELAY R5*0.14MS DEL:

MOV R5,#1 ;IR解码使用 DEL0: MOV R6,#2 DEL1: MOV R7,#32 DEL2: DJNZ R7,DEL2 DJNZ R6,DEL1 DJNZ R5,DEL0 RET

;------------------------------------------------- DELAY1: ;数码管延时4MS

MOV R6,#20 DL2: MOV R7,#100 DJNZ R7,$ DJNZ R6,DL2 RET

;------------------------------------------------- END ;结束 ;================================

41

;****** 红外遥控器键值表 ******

; 10 03 01 06 ; 09 1D 1F 0D ; 19 1B 11 15 ; 17 12 16 4C ; 40 48 04 00 ; 02 05 54 4D ; 0A 1E 0E 1A ; 1C 14 0F 0C

;================================

五、实验步骤

1、把实验板上的遥控接收的跳线跳到遥控接收的位置;

2、用现有的遥控器(如电视遥控)发送,通过红外管接收至单片机解码 3、通过USB连接线接通开发板电源; 4、运行Keil C51软件,新建一个工程(如93C46),新建一个文件93c46.c。将文件添加到工程中并编译,如有错,请更改直到编译成功;

5、用编程器将生成的HEX文件烧写到单片机中,或用仿真器来执行程序,将程序下载到仿真器中,具体方法请参考仿真器的使用一节。用编程器将生成的HEX文件烧写到单片机中。

6、运行程序,观察结果。

六、实验注意事项

1.给单片机编程过程中,不要拔插单片机; 2.检查实验板上跳线是否正确。

七、思考题

1.请用户考虑下,单片机如何产生音乐基调和节拍。 2.请用户思考下,如果将歌曲名称换为《祝你平安》,程序怎么实现。

八、实验报告要求

1、实验目的 2、实验器材

3、实验内容(实验得到正确程序及实验中出现的验证数据) 4、实验中遇到的问题及解决办法,思考题。 5、实验心得

42

本文来源:https://www.bwwdw.com/article/q5jw.html

Top