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
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
#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
正在阅读:
2013单片机实验指导书(含程序代码)01-31
银行管理学复习题11-23
基于单片机的光控自动窗帘控制系统设计说明书1 - 图文06-18
圆珠笔的自述作文500字06-29
承德避暑山庄 论文05-05
在推进企业复工复产经验交流会上的讲话稿02-23
2018高考语文作文素材:名人事例素材09-24
小叔来我家作文350字07-15
《会计信息系统》习题含答案05-10
单片机原理与应用-第2版-源代码109-20
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 指导书
- 单片机
- 实验
- 代码
- 程序
- 2013