单片机课程设计报告ADC转换生成正弦波形.docx
《单片机课程设计报告ADC转换生成正弦波形.docx》由会员分享,可在线阅读,更多相关《单片机课程设计报告ADC转换生成正弦波形.docx(15页珍藏版)》请在冰豆网上搜索。
单片机课程设计报告ADC转换生成正弦波形
单片机课程设计报告ADC转换生成正弦波形
单片机课程设计报告
题目:
ADC转换生成正弦波形
专业:
测控技术与仪器
班级:
姓名:
学号:
指导教师:
2015年1月14日
第1章系统设计方案第2章系统硬件设计
2.1主控制器电路
2.2模数转换电路
2.3显示电路第3章系统软件设计
3.1系统整体流程
3.2直流电压采集
3.3交流电压采集第4章系统调试
4.1xxx的调试
4.2xxx的调试
。
。
。
。
第5章结论与总结
5.1结论
5.2总结
第1章系统设计方案
使用STC89c52单片机与ADC0804芯片实现A/D转换直流电压采集,转换之后在LCD1602上显示所采集的直流电压值。
使用STC89c52单片机与ADC0804芯片实现A/D转换交流电压采集,转换之后在KS0108上显示交流电压动态波形。
第2章系统硬件设计
2.1主控制器电路
(1)AT89C52单片机
(2)晶振电路
(3)复位电路
2.2模数转换电路
2.3显示电路
(1)LCD1602显示电路
(2)KS0108显示电路
第3章系统软件设计
3.1系统整体流程图
开始
显示初始化
进行A/D转换数字信号处理转化显示数据
调用显示函数
结束
3.2直流电压采集程序
(1)直流电压采集主程序
#include#include"adc0804.h"#include"lcd1602.h"
#defineucharunsignedchar
#defineuintunsignedint
#defineulongunsignedlong
voiddatds();
voiddisplay();
uchardat=0;
uchara[]="thevalueis";
ucharb[]={0,0};
voidmain()
{
uchari=0;
init();
for(i=0;i<13;i++)
{
comd(0x80+i);
write(a[i]);
}
while
(1)
{
datc();
dat=datw();
datds();
display();
}
}
voiddatds()
{
b[0]=dat*5/255;
b[1]=dat*50/255%10;
}
voiddisplay()
{
comd(0xc4);
write(b[0]+0x30);
comd(0xc5);
write('.');
comd(0xc6);
write(b[1]+0x30);
comd(0xc7);
write('V');
}
(2)头文件lcd1602.h
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineulongunsignedlong
voidwrite(uchardatee);
voidcomd(ucharcom);voidinit();
sbiten=P3^4;
sbitrs=P3^5;
voidinit()
{
en=0;
comd(0x38);
comd(0x0c);
comd(0x06);
comd(0x01);
}
voidcomd(ucharcom){
rs=0;
delay(50);
P0=com;
delay(50);
en=1;
delay(50);
en=0;
delay(50);
}
voidwrite(uchardatee)
{
rs=1;
delay(50);
P0=datee;
delay(50);
en=1;
delay(50);
en=0;
delay(50);
}
(3)头文件adc0804.h#include
#defineucharunsignedchar
#defineuintunsignedint
#defineulongunsignedlong
chardatw();
voiddatc();
voiddatd();
voiddelay(uintt);
sbitrd=P3^1;sbitwr=P3^2;sbitintr=P3^3;sbitcs=P3^0;
voiddatc()//写命令{
cs=0;
wr=1;
delay(200);
wr=0;
delay(200);
wr=1;
while(intr);
cs=1;
}
chardatw()//读数据{
ucharj=0;
cs=0;
rd=1;
delay(200);
rd=0;
delay(200);
j=P1;
rd=1;
cs=1;
returnj;
}
voiddelay(uintt)
{while(t--);}
3.3交流电压采集程序
(1)交流电压采集主程序
#include
#include"adc0804.h"#include"lcd.h"
#defineucharunsignedchar
#defineuintunsignedint
#defineulongunsignedlong
voiddatedis();
voiddisplay();
voidqing(ucharq2);voidqingp();
sbitcs1=P0^1;
sbitcs2=P0^2;
uchardat=0;
uchari;
ucharj,da;
voidmain()
{
init();
while
(1)
{cs1=0;cs2=1;
qingp();
display();
cs2=0;cs1=1;
qingp();
display();
}
}
voidqing(ucharq2){
ucharq1;
for(q1=0;q1<8;q1++)
{
comd(184+q1);
comd(0x40+q2);
write(0);
}
}
voidqingp(){
ucharq1,q2;
for(q1=0;q1<8;q1++)
{
comd(184+q1);
comd(0x40);
for(q2=0;q2<64;q2++)
write(0);
}
}
voiddisplay()
{
ucharx=0;
for(x=0;x<64;x++)
{
//qing(x);
datc();
dat=datw();
datedis();
comd(i);
comd(64+x);
write(j);
}
}
voiddatedis(){ucharj0=1;
da=dat/4;
i=184+da/8;
j=j0<<(da%8);
}
(2)头文件lcd.h
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineulongunsignedlong
voidwrite(uchardatee);voidcomd(ucharcom);voidinit();
sbiten=P3^6;
sbitrs=P3^7;
voidinit()
{
en=0;
comd(4);
comd(0x3f);
}
voidcomd(ucharcom){
rs=0;
delay(50);
P2=com;
delay(50);
en=1;
delay(50);
en=0;
delay(50);
}
voidwrite(uchardatee){
rs=1;
delay(50);
P2=datee;
delay(50);
en=1;
delay(50);
en=0;
delay(50);
}
(3)头文件ADC0804.h#include
#defineucharunsignedchar
#defineuintunsignedint
#defineulongunsignedlong
chardatw();
voiddatc();
voiddatd();
voiddelay(uintt);
sbitrd=P3^1;sbitwr=P3^2;sbitintr=P3^3;sbitcs=P3^0;
voiddatc()//写命令{
cs=0;
wr=1;
delay(200);
wr=0;
delay(200);
wr=1;
while(intr);
cs=1;
}
chardatw()//读数据{
ucharj1=0;
cs=0;
rd=1;
delay(200);
rd=0;
delay(200);
j1=P1;
rd=1;
cs=1;
return(j1);
}
voiddelay(uintt){while(t--);}
第4章系统调试4.1直流电压采集的调试
程序调试采用proteus仿真软件调试采集电压
LCD显示结果
4.2交流电压采集的调试
第5章结论与总结
5.1结论
(1)直流电压采集调试中,采集电压为5V的50%(即2.5V),而LCD1602显示值为2.4V,误差很小,说明实验硬件和软件都很成功,可以成功实现直流电压采集并显示电压值的功能。
(2)交流电压采集调试中,采集电压为正弦电压,而LCD显示电压值变化为正弦波形电压,成功实现了交流电压实时采集的功能。
5.2总结
此次单片机课程设计中,我受益良多。
让我对A/D转换有了更加深入的了解,对ADC转换硬件和程序更加熟悉,同时又重温了LCD1602的硬件电路和软件程序。
实验中,对于图形液晶这一陌生的名词,当时的我束手无措。
然而通过各种渠道查询资料之后,从无法显示屏幕,到显示出模糊的波形,再到显示出部分波形,最后显示出完整的波形,我一步步成长进步着。
最后,感谢周伟老师在实验中对我的帮助和解答,感谢研究出这些专业知识的先辈们,让我沉浸在电子微机的海洋。