当前位置: 首页 > >

单片机实验指导书(2011.9)

发布时间:

单片机原理及应用 实验指导书

200 2009 年 10 月

1/41

1 单片机实验板介绍
1.1 板载硬件资源

1 采用 STC8951RC(与标准 51 指令、脚位完全兼容) ,支持在线串行 ISP 下载。 2 供电方式:USB 供电 3 串口 RS232 4 4 个 LED 发光管 5 四位数码管 6 4 个独立式键盘(包含外部中*醇 7 一个蜂鸣器 8 一个 PS2 接口 9 1602 液晶接口(选配件) 10 128*64 液晶接口,单板支持带字库(ST7920)和不带字库(KS0108)两种 128*64 液晶.(选配件) 11 DS18B20 温度传感器(选配件) 12 IrDA 红外接收头(选配件)

1.2 原理图
2/41

3/41

1.3 PCB 图

4/41

1.4 实验箱配置 基础板配置: 基础板配置: 1、STC89C51 支持在线下载程序。. 2、8 位 LED 发光二极管(可做流水灯实验) 。 3、4 位数码管(可做动态扫描及静态显示实验) 。 4、4 *4 矩阵键盘。 (也可将其中的行或列接地,将独立按键实验) 。 5、MAX232 芯片 RS232 通讯接口(可以做为与计算机通迅的接口,同时也可 做为 STC 单片机下载程序的接口,SST 单片机仿真接口) 6、USB 供电系统,直接插接到电脑 USB 口即可提供电源,此时不需另接直流 电源。 7、蜂鸣器(可做单片机发声实验) 。 8、ADC0809 芯片(可做模数转换实验) 。 9、DAC0832 芯片(可做数模转换实验) 。 10、DS18B20 温度传感器接口 11、单片机 32 个 IO 口全部引出,方便自己进行自由扩展。 12、AT24C02 EEROM(可做 IIC 串行总线实验) 。 13.DS1302 实时时钟(可做 IIC 串行总线实验) 。 14、SM0038 一体化红外接收头(可做红外遥*鹘饴胧笛椋 。 15、8155 电路,可做扩展 I/O 口使用。 16、外扩 32K RAM 62256 芯片电路。 17、1602 液晶接口。 仿真配置: 仿真配置: 配置 可选配 SST89E516 仿真芯片,代替 STC89C51,实现在线仿真功能。 1.5 仿真下载使用说明 单片机综合创新实验板的单片机仿真与下载分成由不同的单片机完成。仿真 由单片机 SST89E516 芯片来完成仿真,具体的仿真电路就是相关串口通讯电路, 仿真的实现可见第二章相关内容。单片机的下载由基础板的单片机 STC89C51 完 成。两种单片机引脚完全相同,直接代换。32 个 IO 都由排针引出,方便用户做
5/41

不同的实验。 1.6 电路图

6/41

7/41

8/41

KEIL 软件的使用
KEIL 是 51 单片机开发的最常见的开发软件。 成功安装好 KEIL 软件后,即可看到电脑桌面上 Keil 软件图标,如下图。

1.双击图标,打开软件,出现如下界面。在打开的窗口中,选择“Project” 菜单:

2.点击“New Project”出现一个创建工程对话框,选择工程所建路径,并输 入工程的文件名(建议用英文) ,点击“保存” :

3.之后出现芯片选择界面,如下图:
9/41

4.这里,选取常用 51 芯片即可,选择“Philips”下的“8Xc51RC+”芯片:

5.点击“确定” ,在出现如下对话框时,选择“否” :
10/41

6.至此,已成功建立工程。界面如下图所示:

7.点击“Project”菜单下面的“options for Target‘Target 1’ ”选项,出 现如下选项框:

11/41

8. “output” 选择 页面, “create Hex File” 并可在 选中 , “Name of Executable:” 输入框中, 重新输入生成 HEX 文件的文件名, 然后点 “确定” 以在程序编译时, , 实时生成需下载到单片机中的 HEX 文件。

12/41

9.点击“File” 菜单下面的“New”选项,再点击“File”菜单下面的“Save” 选项,保存文件。输入文件名(C 文件扩展名为“.c” ,汇编文件扩展名为 “.asm”,如下图:取名为 main.c: )

10.在新建的文件里,进行程序编制,如图:

13/41

11.程序编制完成后,保存文件。将源程序文件加载到工程中。加载方法为: 右击“Source Group”,在出现的选项列表中,选择“Add Files to Group ‘source Group 1’”,如下图所示:

14/41

12.在出现的对话框中,选择刚编辑的源文件(main.c),点击“Add”,如图:

13.添加成功后,点击“Project”菜单下面的“Rebuild all target files” 选项。当编译通过之后 HEX 文件才能生成,如下图。如果程序有错误,编译结 果框中会有提示错误。双击对应的错误列表,可定位到源程序的位置,以便快 速寻找错误。

15/41

STC-ISP 下载软件的使用方法 载软件的使用 使用方法
该软件将已生成的 HEX 文件下载到单片机中。具体步骤如下: 1.双击 STC-ISP 图标:

2.然后在“MCU Type”列表中选择单片机型号(应选择单片机板中的 CPU 型号) ,如下图:

16/41

3.点击“Open File”按钮,找到所要下载的 HEX 文件,并选中,选择“打 开” ,如下图:

17/41

4.选择串口的对应端口号, (根据自己的硬件连接端口)(如 COM1)。

5.然后选“MaxBuad”中的波特率,也可以选默认值。

6.点击”Download/下载”,进行文件下载,如图:

18/41

7.稍等几秒,即可下载完成,如图:

19/41

实验一 熟悉 KEIL 软件的使用
一、实验目的 1. 认识单片机实验系统的构成及使用。 2. 学* KEIL 软件和 STC-ISP 下载软件的使用方法。 3. 单片机 I/O 口的使用方法; 实验内容 二、实验内容 1. P23 口做输出口,接发光二极管,编写程序,使其闪烁。 2. P23-P26 口接四只发光二极管 LED1-LED4, P20 口接开关 K1,编写程序,用开关
控制发光二极管上的亮灭。

三、实验步骤 1.设计实验电路,画出电路原理图 2.按照 KEIL 软件的使用步骤,建立工程。 3.编写程序,保存文件,将源程序文件加载到工程中,当编译通过之后生成 HEX 文件。 4. 用 STC-ISP 下载软件下载 HEX 文件到单片机系统。 5.运行、调试程序,观察实验结果。 四、实验参考电路及参考程序 1.参考电路
VCC +5V

P23 LED1 P24 8051 LED2 P25 LED3 P26 LED4 P32 K1 R4 R3 R2 R1

2.参考程序
实验 1: : #include "reg52.h" sbit P23=P2^3; //定义 LED 指示灯的 IO 口 void main() { int i;//计时变量 while(1) { for(i=0;i<30000;i++);//延时 P23=!P23;//指示灯 IO 口反转 } }

20/41

实验 2: : #include "reg52.h" sbit P23=P2^3; //定义 LED 指示灯的 IO 口 sbit P20=P2^0; //定义 key 的 IO 口 void main() { int i;//计时变量 while(1) { for(i=0;i<30000;i++);//延时 if( P20==0) P23=0; // 按键,LED 亮 else P23=1;// LED 亮 } } 五.思考题 1. P23- P26 口做输出口,接发光二极管,编写并调试程序,使其闪烁。

2. P23- P26 口做输出口,接发光二极管,编写并调试跑马灯程序。

21/41

实验 2

Keil C51 程序设计上机练*

一、实验目的 1. 学* KEIL 软件的程序调试方法。 2. 学会 KEIL C 程序设计及调试,重点学会预处理命令、数据类型的定义。 实验内容 二、实验内容 1.单片机 P2 口的 P20 和 P21 各接一个开关 K1、K2,P23、P24、P25 和 P26 各接一只发光二极管。由 K1 和 K2 的不同状态来确定发光二极管的点亮。
K2 0 0 1 1 K1 0 1 0 1 亮的二极管 L1 L2 L3 L4

2.设计一个二进制加 1 计数器,按一次键,加 1,并用 4 个 LED 显示计数结 果,加至 16 时清零重新计数。 三、实验步骤 1.设计实验电路,画出电路原理图 2.按照 KEIL 软件的使用步骤,建立工程。 3.编写程序,保存文件,将源程序文件加载到工程中,当编译通过之后生成 HEX 文件。 4. 用 STC-ISP 下载软件下载 HEX 文件到单片机系统。 5.运行、调试程序,观察实验结果。 实验参考电路及参考程序 四、实验参考电路及参考程序

VCC +5V

P23 LED1 P24 LED2 8051 P25 LED3 P26 LED4 P20 P21 K2 K1 R4 R3 R2 R1

1.实验 1 实验 #include<reg51.h> sbit k1 = P2^0; sbit k2 = P2^1; void main() { while(1)
22/41

{ if(k1 == 0&k2 == 0) { P2 = 0xf7; } if(k1 == 1&k2 == 0) { P2 = 0xef; } if(k1 == 0&k2 == 1) { P2 = 0xdf; } if(k1 == 1&k2 == 1) { P2 = 0xbf; } } }

2.实验 2.实验 2
#include<reg52.h> sbit key = P3^2; unsigned char a ; unsigned char count = 0; void delay(int i) { while(i) i--; } void main() { while(1) { if( key==0 ) { delay(10); if( key==0) { count++; while(!key); if( count==16) count = 0; a = count; a = ~a; a = a<<3; P2 = a; } } } }

五、思考题 1.设计一个二进制减 1 计数器,按一次键,减 1,并用 4 个 LED 显示计数结 果,减至 0 时,重新从 15 开始计数。 2.用 1 个按键控制 LED 的显示,要求显示 3 种以上的不同模式。

23/41

实验 3

单片机中断实验

一、实验目的 1.掌握单片机的中断系统,学会单片机中断系统的初始化。 2.学会单片机外部中断的应用。 实验内容 二、实验内容 1.采用外部中断的方式实现按键控制 1 个 LED 的亮灭。 2.采用外部中断的方式实现 4 个 LED 的轮流亮灭。 三、实验步骤 1.设计实验电路,画出电路原理图 2.按照 KEIL 软件的使用步骤,建立工程。 3.编写程序,保存文件,将源程序文件加载到工程中,当编译通过之后生成 HEX 文件。 4.用 STC-ISP 下载软件下载 HEX 文件到单片机系统。 5.运行、调试程序,观察实验结果。 实验参考电路和 四、实验参考电路和参考程序

VCC +5V

P23 LED1 P24 8051 LED2 P25 LED3 P26 LED4 P32 K1 R4 R3 R2 R1

1.实验 1.实验 1 #include "reg52.h" sbit P23=P2^3; void main() { //外部中断 IT0=1; //外部中断 0 连沿触发方式 //使能外部中断 EX0=1; //使能外部中断 0 //开部中断 EA=1; //开部中断 //指示灯初始为亮 P23=0; //指示灯初始为亮 while(1) while(1) ;
24/41

} //外部中断 void int0() interrupt 0 //外部中断 0 程序入口 { P23=!P23; } 2.实验 2 #include "reg52.h" sbit P32=P3^2; void main() { //外部中断 IT0=1; //外部中断 0 连沿触发方式 //使能外部中断 EX0=1; //使能外部中断 0 //开部中断 EA=1; //开部中断

while(1) ; } //外部中断 void int0() interrupt 0 //外部中断 0 程序入口 { static unsigned char Bit=0; Bit++; if(Bit>=4)Bit =0; switch(Bit) { case 0: P2 = 0xf7; break; case 1:P2 = 0xef; break; case 2:P2 = 0xdf; break; case 3:P2 = 0xbf; break; } } 五、思考题 1. 采用外部中断的方式实现一个二进制减 1 计数器,按一次键,减 1,并 用 4 个 LED 显示计数结果,减至 0 时,重新从 15 开始计数。 2. 采用外部中断的方式实现用 1 个按键控制 LED 的显示,要求显示 3 种以 上的不同模式。

25/41

实验 4

中断及定时器∕计数器实验 中断及定时器∕

一、实验目的 1.掌握单片机的中断系统、定时器的工作原理。 2.学会单片机中断系统、定时器的应用。 二、实验内容 实验内容 1.采用单片机定时器实现 1 个 LED 的亮灭,周期为 1s。 2. 采用单片机定时器实现实现 4 个 LED 的轮流亮灭,每个 LED 点亮时间为 1s。 三、实验步骤 1.设计实验电路,画出电路原理图 2.按照 KEIL 软件的使用步骤,建立工程。 3.编写程序,保存文件,将源程序文件加载到工程中,当编译通过之后生成 HEX 文件。 4.用 STC-ISP 下载软件下载 HEX 文件到单片机系统。 5.运行、调试程序,观察实验结果。 实验参考电路和参考程序 四、实验参考电路和参考程序
VCC +5V

P23 LED1 P24 LED2 8051 P25 LED3 P26 LED4 R4 R3 R2 R1

1.实验 1 #include<reg51.h> #define THC0 0xee #define TLC0 0x00 sbit led0=P2^3; void main() { TMOD=0x01;
26/41

TH0=THC0; TL0=TLC0; TR0=1; ET0=1; EA=1; while(1); } void timer0_ISR(void) interrupt 1 { static unsigned char count=0; TL0=TLC0; TH0=THC0; count++; if(count>=200) { count=0; led0=!led0; } } 2.实验 2 #include<reg51.h> #define THC0 0xee #define TLC0 0x00 sbit led0=P2^3; sbit led1=P2^4; sbit led2=P2^5; sbit led3=P2^6; void main() { TMOD=0x01; TL0=TLC0; TH0=THC0; TR0=1; ET0=1; EA=1; while(1); } void timer0_ISR(void) interrupt 1 { static unsigned char count=0,Bit=0; TL0=THC0; TH0=TLC0; count++; if(count>=200)
27/41

{ count=0; Bit++; if(Bit>=4) Bit=0; P2=P2|0x78; switch(Bit) { case 0:led0=0;break; case 1:led1=0;break; case 2:led2=0;break; case 3:led3=0;break; } } } 五、思考题 1.设计 1 个秒计数器,每秒计 1 次数,在 LED 上显示出来,计至 16 清零后重新 计数。 2.在上题基础上用按键控制秒计数器的启停,按一次键开始计数,按 2 次停止计 数,按 3 次又开始计数…。

实验 5

数码管显示器实验 数码管显示器实验

一、实验目的 1.掌握单片机的按键、数码管显示器的工作原理。 2.学会单片机独立式按键、数码管显示器的应用。 实验内容 二、实验内容 1.在一个数码管上显示字符“1” 。 2.在 4 个数码管上显示字符“1”“2”“3”“4” 、 、 、 。 3.设计一个 2 位 10 进制计数器,每秒加 1,在 LED 上显示。 三、实验步骤 1.设计实验电路,画出电路原理图 2.按照 KEIL 软件的使用步骤,建立工程。 3.编写程序,保存文件,将源程序文件加载到工程中,当编译通过之后生成 HEX 文件。
28/41

4.用 STC-ISP 下载软件下载 HEX 文件到单片机系统。 5.运行、调试程序,观察实验结果。 实验参考电路和参考程序 四、实验参考电路和参考程序
1.参考电路 A/D 转换实验

2.参考程序

#include "reg52.h" #define THCO #define TLCO 0xee 0x0

unsigned char code Duan[]={0x3F, 0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //共阴极数码管,0-9 段码表 unsigned char Data_Buffer[4]={1,2,3,4};//四个数码管显示数值,数组变量 定义 sbit sbit sbit sbit P10=P1^0; P11=P1^1; P12=P1^2; P13=P1^3; //四个数码管的位码口定义

void main() { TMOD=0x11; TH0=THCO; TL0=TLCO; TR0=1; ET0=1; EA=1; while(1) } ;

//定时器 0 初始化

void timer0() interrupt 1
29/41

{ static unsigned char Bit=0; TH0=THCO; TL0=TLCO; Bit++; if(Bit>=4)Bit=0; P1|=0x0f; //先关位码 P0=Duan[Data_Buffer[Bit]]; //开段码 switch(Bit) //送位码 { case 0: P10=0;break; case 1: P11=0;break; case 2: P12=0;break; case 3: P13=0;break; } } 五、思考题 用按键进行显示模式选择键,实现上述实验中 3 个显示画面的切换。 //静态变量,退出程序后,值保留

实验 6 ADC0809 实验
1.实验目的 1.实验目的 实验目 掌握 A/D 芯片 ADC0809 与单片机的接口方法及 ADC0809 芯片性能;了解单片 机实现数据采集的方法。 2.实验设备及器件 2.实验设备及器件 PC 机 一台 SL-51HP 单片机综合创新实验箱 一台 8 孔排线 两根 杜邦线 若干根 3.ADC0809 简介
30/41

IN7~IN0:8 路模拟量输入端,在多路开关控制下,任一时刻只能有一路模 拟量实现 A/D 转换。 A、B、C:多路开关地址选择输入端,当取值 000~111 时与 A/D 转换对应的 通道为 IN0~IN7。 ALE:地址锁存输入线,该信号的上升沿可将地址选择信号 A、B、C 锁入地址 寄存器。 START:启动转换输入线,其上升沿用以清除 A/D 内部寄存器,其下降沿用以 启动内部控制逻辑,开始 A/D 转换工作。 EOC:转换完毕输出线,其上出现高电*时表示 A/D 转换结束。 2-1~2-8(D7~D0) :为 8 位数据输出端,可直接接入单片机的数据总线。 ENABLE:允许输出控制端,高电*有效。低电*时,数据输出端为高阻态; 高电*时,将 A/D 转换后的 8 位数据送出。 CLOCK:转换定时脉冲输入端。它的频率决定了 A/D 转换器的转换速度。使用 频率小于等于 640KHZ,对应转换速度大于等于 100μs。 REF+,REF-:是内部 D/A 转换器的参考电压输入端。 VCC 为+5V,GND 为地。

图 3.9 ADC0809 引脚图
ALE
_ D 74LS Q CK 74 Q G _ D 74LS Q CK 74 Q
A7 . . . A2 A1 A0

P0
AT89S52

74LS 373 E

IN0 CLK . . . ADC . . 0809 . IN7 C B A REF+ D7~D0 VCC

+5V C15

WR

1

P2.7
RD

74LS02
1

GND START REFALE

OE EOC

图 3.10 ADC0809 的接口电路 4.实验内容 4.实验内容 编写一段程序,通过 ADC0809 实现单片机对模拟输入通道电压 0 通道数据的 采集,使采集到的数据显示在数码管上。参考流程图如图所示。

通道、 数据区地址初始化
31/41

启动 ADC0809

5.实验步骤 ①短接 J37,为 AD 芯片供电 ② 数码管位选接 P3 口高四位,J8 端接 P37,数码管段选接 P2 口,低位接 J7 端; ③ADC0808 数据线已接入 P0 口(不需外接线).JCON4 端口的 CS、RS、WR、 EOC 分别接 P12,P11,P10,P16;J27 的 ABC 端分别接 P13,P14,P15;J25(串 口旁边的电位器)的 NC 端接 J5(ADC0809 的模拟输入端)的 CH0 运行编写好的软件程序,完成温度数据的采集和显示功能。仿真观看运 行结果。 6.参考例程 #include "reg52.h" #define THCO #define TLCO unsigned //共阴极数码管-9 段码表 0xee 0x0 char code

Duan[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};

32/41

unsigned char Data_Buffer[4]={10,0,0,0}; float AdValue; sbit P34=P3^4; sbit P35=P3^5; sbit P36=P3^6; sbit P37=P3^7; sbit TEST=P3^0; /**************************************************/ sbit ADWR=P1^0; sbit RS=P1^1; sbit CS=P1^2; sbit Add1=P1^3; sbit Add2=P1^4; sbit Add3=P1^5; sbit EOC=P1^6; sbit LED=P1^7; /**************************************************/ void Sysinit(); void AD_Start(void); void LED_Fresh(); void delay_ms(unsigned int x); void main() { unsigned int i; Sysinit(); Add1=0; Add2=0; Add3=0; while(1) { AD_Start(); while(!EOC);
33/41

//四个数码管的位码口定义

//模拟量通道输入选择

LED=!LED; RS=0; AdValue=P0; LED_Fresh(); RS=1; for(i=0;i<40000;i++); } } void Timer0_ISR() interrupt 1 { static unsigned char Bit=0; TH0=THCO; TL0=TLCO; Bit++; if(Bit>=4)Bit=0; P3&=0x0f; if(Bit==1) switch(Bit) { case 0: P34=1;break; case 1: P35=1;break; case 2: P36=1;break; case 3: P37=1;break; } } void LED_Fresh() {unsigned int temp; AdValue=AdValue*19.5; temp=AdValue; Data_Buffer[1]=temp/1000; Data_Buffer[2]=temp/100%10; Data_Buffer[3]=temp/10%10; } void Sysinit()
34/41

P2=Duan[Data_Buffer[Bit]]|0x80;

else P2=Duan[Data_Buffer[Bit]];

{ TMOD=0x11; TH0=THCO; TL0=TLCO; TR0=1; ET0=1; EA=1; TEST=0; } void AD_Start(void) { ADWR=1; CS=0; delay_ms(1); ADWR=0; delay_ms(1); ADWR=1; } void delay_ms(unsigned int x) { unsigned char y; for(x;x>0;x--) for(y=110;y>0;y--); } 七、思考题 1.
2.

//定时器 0 初始化

采样 1 通道的数据,如何实现? 请用查询方式实现上述功能。

实验七 DAC0832 实验 1.实验目的 1.实验目的 掌握 D/A 芯片 DAC0832 与单片机的接口方法及 DAC0832 芯片的性能;了解单 片机系统中扩展 D/A 转换的基本方法。
35/41

2.实验设备及器件 2.实验设备及器件 PC 机 一台 SL-51HP 单片机综合创新实验箱 一台 杜邦线 若干 示波器 一台 3. DAC0832 简介 D0~D7:8 位数据输入端; ILE:数据允许锁存信号; CS: 输入寄存器选择信号; WR1:输入寄存器写选通信号; XFER:数据传送信号; WR2:DAC 寄存器的写选通信号; VREF:基准电源输入端; Rfb:反馈电源输入端; Iout1,Iout2:电源输入 1、2; AGND:模拟地; DGND:数字地。

1 2 3 4 5 6 7 8 9 10

CS VCC WR1 ILE AGND WR2 D3 XFER D2 D4 D1 D5 D0 D6 VREF D7 IOUT2 Rfb DGND IOUT1

20 19 18 17 16 15 14 13 12 11

图 3.12 DAC0832 引脚图 4.实验内容 4.实验内容 ① 由 于 DAC0832 为 电 流 输 出 , 为 了 取 得 电 压 输 出 , 需 在 电 流 输 出 端 Iout1,Iout2 分别接上运算放大器 UA741 的 B-、B+。使 Rfb 与运算放大器的输出 端 OUT 连接。 ② 正确连接硬件电路后编写程序,使用查表的方法使单片机控制 DAC0832 产生一个电压值在 0~-5V 之间的方波。电路原理如图 17 所示。
DAC0832 -V 2 3
+

P2.7
WR
8031

XFER CS WR1 WR2
D0~D7
+ 5V + 5V

IOU T1 IOU T2
Rfb

4 6 UA741 +V

OUT

P0
EA VCC VSS

VCC ILE VREF

图 3.13 DAC0832 的接口电路
5.实验步骤 5.实验步骤 ①短接 J38 为 DA 芯片供电;J2 的 CS,WR 分别接 P36,P37 ②DA 数据线已接入 P0 口(不需外接线) 。J20 的 DA 端接示波器。 ③运行编写好的软件程序,仿真观看运行结果。 6.参考例程 6.参考例程 #include "reg52.h" #define uchar unsigned char #define uint unsigned int sbit DA_CS =P3^6;
36/41

7

sbit DA_WR

=P3^7;

void DA_init(); void DA_datasend(uchar DA_value); void main() { unsigned int i,count=0; DA_init(); while(1) { for(i=0;i<200;i++) DA_datasend(0); for(i=0;i<200;i++) DA_datasend(255); } } void DA_init() { EA=1; TMOD=0x01; TH0=0xee; TL0=0x00; ET0=1; TR0=1; DA_CS=0; DA_WR=0; } void DA_datasend(uchar DA_value) { P0=DA_value; }
37/41

7.思考题 用单片机控制 DAC0832 分别电压值在 0~-5V 之间的锯齿波、三角波。

38/41

实验八

串口通信实验

1.实验目的 1.实验目的 利用单片机的 TXD、RXD 口,使用户学会单片机的串行口的使用。 2.实验设备及器件 2.实验设备及器件 PC 机 一台 SL-51HP 单片机综合创新实验箱 一台 3.实验内容 编写一段程序,使数码管显示从上位机接收到的对应数值(0-9),并将此值发送给上 位机。 (注:此实验只能用 STC 芯片,将 HEX 文件下载进去才能观看运行结果) 4.实验步骤 4.实验步骤 ①P1 口接数码管位码,J8 端接低位。P2 口接数码管段码,J7 端接低位 ② 编写程序。仿真程序并运行查看结果。 5.参考例程 5.参考例程 #include "reg52.h" #define THCO #define TLCO unsigned 0xee 0x0 char code Duan[]={0x3F,

0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //共阴极数码管,0-9 段码表 unsigned char Data_Buffer[4]={1,2,3,4}; //四个数码管显示数值,数组变量定义 sbit P10=P1^0; sbit P11=P1^1; sbit P12=P1^2; sbit P13=P1^3; sbit P20=P2^0; void main() { TMOD=0x20; //方式控制字 SCON=0x50; TH1=0xfd; //设置波特率为 9600 TL1=0xfd; TR1=1; ES=1; TH0=THCO; //开定时器 1 //四个数码管的位码口定义

39/41

TL0=TLCO; TR0=1; ET0=1; EA=1; while(1); } void timer0() interrupt 1 { static unsigned char Bit=0; //静态变量,退出程序后,值保留 TH0=THCO; TL0=TLCO; Bit++; if(Bit>=4)Bit=0; P1|=0x0f; switch(Bit) { case 0: P10=0;break; case 1: P11=0;break; case 2: P12=0;break; case 3: P13=0;break; } } void seri()interrupt 4 { unsigned char temp; if(RI==1) { temp=SBUF; RI=0; if(temp>=0&&temp<=9)//接收到的数据为 0-9 时显示到最后一位数码管上 { Data_Buffer[0]=temp;
40/41

//先关位码 //送位码

P2=Duan[Data_Buffer[Bit]]; //开段码

Data_Buffer[1]=temp; Data_Buffer[2]=temp; Data_Buffer[3]=temp; P20=!P20; } TI=0; SBUF=temp; while(TI==0); TI=0; } } 7.思考题 7.思考题 利用单片机的串行口向 PC 机发送数据 0x55。 运行结果可以通过在 PC 的接收软件上看见, 验证接收数据是否正确。

41/41




友情链接: