西华大学实验报告(理工类)
开课学院及实验室:机械学院机械工程专业实验中心
实验时间:年月日至月日
1.实验目的
(1)学习Keil编译软件的使用、调试、程序下载的方法;
(2)掌握PWM调节LED指示灯亮度的原理及编程方法;
(3)掌握STC89C52单片机I/O端口的控制和使用方法;
(4)掌握单片机与上位机串口通讯的原理及程序实现;
(5)掌握AD转换、LCD显示的编程实现;
(6)对单片机的串口通讯、PWM控制、AD转换、LED指示灯、LED数码管,及按键、定时器/计数器进行综合应用。
2.实验设备
PC机、keil编译软件、proteus仿真软件,单片机实验板。
3.实验内容
在LCD上显示光电开关的计数值,要求采用计数器T0,计数初值为200,计到256时报警(蜂鸣器响,蜂鸣器对应端口为P2.7),并通过串口通讯,把数据传到上位机进行显示;
4.实验电路
计数器的电路原理图如图4.1所示,把与电压比较器+端连接的电位器调到5V,当光电开关中的发光二极管和光敏二极管之间没有遮挡物时,光敏二极管导通,A点连到地,为低电平,经电压比较器后,B 点为高电平;当发光二极管和光敏二极管被物体遮挡时,光敏二极管截止,A点被拉到高电平,B点为低电平。
其中B点连到单片机的计数器T1端口,比较器主要用于信号整形的作用,实验板上光电开关的位置如图4.2所示。
图4.1 计数器电路原理图
图4.2 光电开关在实验板上的位置图
图4.3 STC89C52主控芯片5.实验程序
实验程序流程图和实验代码分别如下:
主程序
#include<reg52.h>
#include<lcd1602.h>
unsigned char a[3];
sbit fm=P2^7;//蜂鸣器引脚定义
void UsartConfiguration()
{
SCON=0X50; //设置为工作方式1
TMOD=0x26; //设置计数器1工作方式2 ; 设置计数器0工作方式2并打开外部计数TL0=200;//t0初值200
TH0=200;
TH1=0Xfd; //计数器初始值设置,波特率9600
TL1=0Xfd;
TR1=1; //打开计数器1
TR0=1; //打开计数器0
ET0=1;//允许中断溢出
EA=1;//中断总开关
}
void chuankou()
{int i;
for(i=0;i<=2;i++)
{
SBUF=a[i]; //将数据放入发送缓存器
while(!TI); //等待发送数据完成
TI = 0; //清除发送中断标志位
}
}
void delay1(unsigned long delay_count)
{
while(delay_count--);
}
void main()
{
UsartConfiguration();//单片机初始化设置
InitialLCD();//lcd1602初始化
while(1)
{
a[0]=0x30+TL0/100;//数据转换
a[1]=0x30+TL0/10%10;
a[2]=0x30+TL0%10;
WriteStrToLCD(a);//显示
chuankou();//串口通信
}
}
void t0() interrupt 1
{
fm=0;
delay1(1000);//不能用延时程序delay(),应另写fm=1;
}
lcd1602.h
#ifndef _1602_H_
#define _1602_H_
sbit RS=P3^6;
sbit EN=P2^4;
void delay(unsigned long delay_count)
{
while(delay_count--);
}
void enable(char c)
{
RS=0;EN=0;
P0=c;
delay(20);
RS=0;EN=1;
delay(20);
EN=0;
}
void WriteCharToLCD(unsigned char c2)
{
RS=1;EN=0;
P0=c2;
delay(20);
RS=1;EN=1;
delay(20);
EN=0;
}
void InitialLCD(void)
{
enable(0x01);delay(200);
enable(0x38);
enable(0x0c);
enable(0x14);
delay(2000);
}
void ClearLCD(void)
{
enable(0x01);
delay(200);
enable(0x0c);
}
void WriteStrToLCD(unsigned char tab1[])
{
unsigned char j,len;
//InitialLCD();
//delay(100);
//ClearLCD();
//delay(100);
enable(0x80);
len=sizeof(tab1);
for(j=0;j<len;j++)
{
WriteCharToLCD(tab1[j]);
delay(2);
}
}
#endif
keli结果如图5.1所示:
图5.1 keil项目截图
6.实验结果
初始值为200,当计数器计到205时,下位机结果如图6.1所示。
此时,上位机的结果如图6.2所示,刷新频率为1S。
图6.1 下位机截图
图6.2 上位机截图
7.实验步骤
(1)在Proteus画出实验原理图或者使用实验板,用Keil编写程序并进行编译,如未通过,修改程序,直至通过;
(2)运行程序,观看运行结果,如果不符合要求,改写程序,直至成功。
8.思考题
(1)串口控制寄存器SCON各位表示含义?
(2)如何计算串口通讯的波特率?
(3)简述PWM调节的工作原理,并说明在工业中主要应用在哪些方面。
(4)在设计中选择A/D转换器时的主要考虑哪些参数?
(5)如何计算单片机定时器的初值?
西华大学实验报告附录:西华大学51单片机原理图。