山东大学单片机实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档