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