山东大学单片机实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息科学与工程学院
2016-2017学年第二学期
实验报告
课程名称:单片机原理与应用
实验名称: 3.8 ADC0808/9信号采集实验
实验报告
【实验题目】
本实验利用LCD1602和AD0808实现简单的交流信号过零检测与频率分析。要求信号幅度变化时(满量程的5%~95%),不影响检测的结果。频率检测的结果通过LCD1602的第1行显示出来,信号过零时,能够通过P2.6输出一个脉冲宽度为5微秒的脉冲信号。
【实验要求】
1.编写源程序并进行必要的注释;
2.记录实验过程;
3.记录程序运行结果;
【实验过程及结果记录】
自我完成实验
A.电路图
B.运行结果频率监测
过零检测
【实验源程序】
#include
#include
#define uint unsigned int
#define uchar unsigned char sbit LCD_RS=P2^0;
sbit LCD_RW=P2^1;
sbit LCD_EN=P2^2;
sbit AD_CLK=P2^3;
sbit Start=P2^4;
sbit OE=P2^5;
sbit Out_pulse=P2^6;
sbit EOC=P2^7;
uchar tx50=0;
uchar f=0;
uchar date,lastdate,ge,shi; void delay_ms(uint xms) {
uint i,j;
for(i=xms;i>0;i--)
{
for(j=110;j>0;j--); }
}
bit lcd_busy()
{
bit result;
LCD_RS=0;
LCD_RW=1;
LCD_EN=1;
_nop_();
_nop_();
_nop_();
_nop_();
result=(bit)(P1&0x80);
LCD_EN=0;
return result;
}
void lcd_wcmd(uchar cmd) {
while(lcd_busy());
LCD_RS=0;
LCD_RW=0;
LCD_EN=0;
_nop_();
_nop_();
P1=cmd;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_EN=1;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_EN=0;
}
void lcd_clr()
{
lcd_wcmd(0x01);
delay_ms(2);
}
void lcd_wdat(uchar dat) {
while(lcd_busy());
LCD_RS=1;
LCD_RW=0;
LCD_EN=0;
_nop_();
_nop_();
P1=dat;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_EN=1;
_nop_();
_nop_();
_nop_();
_nop_();
LCD_EN=0;
}
void lcd_init()//初始化子程序
{
delay_ms(15);
lcd_wcmd(0x38);//8位数据总线,显示2行,5*7点阵delay_ms(5);
lcd_wcmd(0x0c);//显示开,关光标,不闪烁
delay_ms(5);
lcd_wcmd(0x06);//进入模式设置指令中,地址自动增加delay_ms(5);
lcd_wcmd(0x01);//清楚LCD显示内容
delay_ms(5);
}
void s_timer0() interrupt 1
{
TH0=0x3c;
TL0=0xb0;
tx50=tx50+1;
if(tx50==20)
{
TR0=0;
tx50=0;
f=f/2;
shi=f/10;
shi=shi+'0';
ge=f%10;
ge=ge+'0';
lcd_wcmd(0x80);
lcd_wdat('F');
delay_ms(5);
lcd_wdat('=');
delay_ms(5);
lcd_wdat(shi);
delay_ms(5);
lcd_wdat(ge);
delay_ms(5);
lcd_wdat('H');
delay_ms(5);
lcd_wdat('z');
f=0;
TR0=1;
}
}
void s_timer1() interrupt 3 {
AD_CLK=~AD_CLK; }
void main()
{
delay_ms(10);
lcd_init();
lcd_clr();
delay_ms(2);
TMOD=0x21;
TH1=0xfd;
TL1=0xfd;
TH0=0x3c;
TL0=0xb0;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
while(1)
{
Start=1;
Start=0;