计数器实验报告 - 图文 联系客服

发布时间 : 星期五 文章计数器实验报告 - 图文更新完毕开始阅读60f7651d42323968011ca300a6c30c225901f07f

西华大学实验报告

西华大学实验报告(理工类)

开课学院及实验室:机械学院 机械工程专业实验中心 实验时间 : 年 月 日至 月 日

学 生 姓 名 学生所在学院 课 程 名 称 实验项目名称 指 导 教 师 非常繁华的5舍514 学 号 成 绩 年级/专业/班 课 程 代 码 项 目 代 码 项 目 学 分 106003659 机械工程学院 微机测控实验 微机测控综合实验 韦兴平 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所示。

1

西华大学实验报告

5.实验程序

图4.1 计数器电路原理图

图4.2 光电开关在实验板上的位置图

图4.3 STC89C52主控芯片

2

西华大学实验报告

实验程序流程图和实验代码分别如下: 主程序

#include #include 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; a[2]=0x30+TL0;

3

西华大学实验报告

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);

4