《計(jì)數(shù)器實(shí)驗(yàn)報(bào)告》由會(huì)員分享,可在線閱讀,更多相關(guān)《計(jì)數(shù)器實(shí)驗(yàn)報(bào)告(11頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、
西華大學(xué)實(shí)驗(yàn)報(bào)告(理工類)
開課學(xué)院及實(shí)驗(yàn)室:機(jī)械學(xué)院 機(jī)械工程專業(yè)實(shí)驗(yàn)中心
實(shí)驗(yàn)時(shí)間 : 年 月 日至 月 日
學(xué) 生 姓 名
非常繁華的5舍514
學(xué) 號(hào)
成 績(jī)
學(xué)生所在學(xué)院
機(jī)械工程學(xué)院
年級(jí)/專業(yè)/班
課 程 名 稱
微機(jī)測(cè)控實(shí)驗(yàn)
課 程 代 碼
106003659
實(shí)驗(yàn)項(xiàng)目名稱
微機(jī)測(cè)控綜合實(shí)驗(yàn)
項(xiàng) 目 代 碼
指 導(dǎo) 教 師
韋興平
項(xiàng) 目 學(xué) 分
1.實(shí)驗(yàn)?zāi)康?
(1)學(xué)習(xí)Keil編譯軟件的使用、調(diào)試、程序下載的方法;
(2)掌握PWM調(diào)節(jié)LED指示燈亮度的原理及編程方法;
2、
(3)掌握STC89C52單片機(jī)I/O端口的控制和使用方法;
(4)掌握單片機(jī)與上位機(jī)串口通訊的原理及程序?qū)崿F(xiàn);
(5)掌握AD轉(zhuǎn)換、LCD顯示的編程實(shí)現(xiàn);
(6)對(duì)單片機(jī)的串口通訊、PWM控制、AD轉(zhuǎn)換、LED指示燈、LED數(shù)碼管,及按鍵、定時(shí)器/計(jì)數(shù)器進(jìn)行綜合應(yīng)用。
2.實(shí)驗(yàn)設(shè)備
PC機(jī)、keil編譯軟件、proteus仿真軟件,單片機(jī)實(shí)驗(yàn)板。
3.實(shí)驗(yàn)內(nèi)容
在LCD上顯示光電開關(guān)的計(jì)數(shù)值,要求采用計(jì)數(shù)器T0,計(jì)數(shù)初值為200,計(jì)到256時(shí)報(bào)警(蜂鳴器響,蜂鳴器對(duì)應(yīng)端口為P2.7),并通過串口通訊,把數(shù)據(jù)傳到上位機(jī)進(jìn)行顯示;
4.實(shí)驗(yàn)電路
計(jì)數(shù)器的電路原理圖如圖
3、4.1所示,把與電壓比較器+端連接的電位器調(diào)到5V,當(dāng)光電開關(guān)中的發(fā)光二極管和光敏二極管之間沒有遮擋物時(shí),光敏二極管導(dǎo)通,A點(diǎn)連到地,為低電平,經(jīng)電壓比較器后,B點(diǎn)為高電平;當(dāng)發(fā)光二極管和光敏二極管被物體遮擋時(shí),光敏二極管截止,A點(diǎn)被拉到高電平,B點(diǎn)為低電平。其中B點(diǎn)連到單片機(jī)的計(jì)數(shù)器T1端口,比較器主要用于信號(hào)整形的作用,實(shí)驗(yàn)板上光電開關(guān)的位置如圖4.2所示。
1 / 11
圖4.1 計(jì)數(shù)器電路原理圖
圖4.2 光電開關(guān)在實(shí)驗(yàn)板上的位置圖
圖4.3 STC89C52主控芯片
5.實(shí)驗(yàn)程序
實(shí)驗(yàn)程序流程圖和實(shí)驗(yàn)代碼分別如下:
主程序
#include
4、eg52.h>
#include
unsigned char a[3];
sbit fm=P2^7;//蜂鳴器引腳定義
void UsartConfiguration()
{
SCON=0X50; //設(shè)置為工作方式1
TMOD=0x26; //設(shè)置計(jì)數(shù)器1工作方式2 ; 設(shè)置計(jì)數(shù)器0工作方式2并打開外部計(jì)數(shù)
TL0=200;//t0初值200
TH0=200;
TH1=0Xfd; //計(jì)數(shù)器初始值設(shè)置,波特率9600
TL1=0Xfd;
TR1=1; //打開計(jì)數(shù)器1
TR0=1; //打開計(jì)數(shù)器0
ET0=1;/
5、/允許中斷溢出
EA=1;//中斷總開關(guān)
}
void chuankou()
{int i;
for(i=0;i<=2;i++)
{
SBUF=a[i]; //將數(shù)據(jù)放入發(fā)送緩存器
while(!TI); //等待發(fā)送數(shù)據(jù)完成
TI = 0; //清除發(fā)送中斷標(biāo)志位
}
}
void delay1(unsigned long delay_count)
{
while(delay_count--);
}
void main()
{
UsartConfiguration();//單片機(jī)初始化設(shè)置
InitialLCD()
6、;//lcd1602初始化
while(1)
{
a[0]=0x30+TL0/100;//數(shù)據(jù)轉(zhuǎn)換
a[1]=0x30+TL0/10%10;
a[2]=0x30+TL0%10;
WriteStrToLCD(a);//顯示
chuankou();//串口通信
}
}
void t0() interrupt 1
{
fm=0;
delay1(1000);//不能用延時(shí)程序delay(),應(yīng)另寫
fm=1;
}
lcd1602.h
#ifndef _1602_H_
#define _1602_H_
sbit RS=P3^6;
sbit EN=
7、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
8、(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();
9、//delay(100);
enable(0x80);
len=sizeof(tab1);
for(j=0;j