单片机实训总结报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

程序清单如下:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit SCLK=P1^0; //时钟输入
sbit CS=P1^1;
//片选信号
sbit DIN=P1^2; //串行数据输入
定良好的基础。
实验目的:
一、 了解 SPI 总线及总线结构系统的典型结构;
二、 了解串行 A/D 转换器内部结构和引脚;
三、 掌握 TLC549 的时序;
四、 完成在 proteus 完成相关模拟实验。
五、 数字电压表的设计;
实验内容: 1.利用 TCL549 转换器设计一个简易数字电压表,用 4 位 LED 显示器将 被测电压显示出来,测量范围为 0.000~5.000V*(电路连接:将试验仪 器的 JP2 短接,ACS,ACLK,ADO 分别与 P10~P12 相连); 2.硬件电路,将 TLC549 的 CS,CLK,DO 接到单片机的三条 I/O 口线,
//转换为 4 位 BCD 码送显示缓存
{ dbuf[i]=u%10;
u=u/10;
}
dbuf[3]=u;
disp();
0
//显示电压值
}
}
4.试验模拟电路图:
5,调试方法:在 KEIL 下建立项目,输入源程序,编译后进入调试全速运行,数码管 将以“X.XXX’”显示当前测量到的电压值,调节电位器,数码管上的 电压值随即变化。
任务 3 信号发生器的设计
试验要求:
1、
实验前,务必预习实验内容,深入了解相关知识,了解 D/A 转
换器的基本概念,认识串行 D/A 转换器 TLC5615,先分析相关程序画
出相关电路图,然后模拟电路运转,最终得到实验结果;
2、
实验中,认真思考所做的每一步,弄懂其中的道理,填写好实
验过程;
3、
实验后,总结经验教训,写出实验体会和收获,为今后学习奠
定良好的基础。
实验目的:
1,了解 A/D 转换器的基本概念,认识 ADC0808/0809 的内部结构和其引脚
功能。
2,熟悉其与单片机的典型链接,数据采集器的设计过程
3,硬件电路和程序设计思想
4,在 proteus 完成相关模拟实验。
实验内容:
一、 在 Proteus 环境下,用 ADC0808 设计一个数据采集器,通过串行口
实验过程中存在的问题及解决方法: 在本次试验中 protues 模拟试验数字显示很难实现电压值的正常显 示,显示的内容为全部 8.8.8.8 非正常显示,但经过程序的调使得收 集的数据信息得以显示。
实验体会和收获: 通过本次试验,了解有关芯片的功能更多的信息的数据采集和转换。 通过检测调试程序,使得原来快速显示的内容能够调整期显示时间, 最终显示的完成。
send(adbuf[i]%10+0x30);
send(0x20);
send(0x20);
} }
} send(0x0d); send(0x0a); }
四、模拟电路图:
五、调试方法与步骤,在 KEIL 下建立项目,输入源程序,编译后调试方式 全速运行,在虚拟终端的窗口输入大写字“A”,此时 8 路模拟量转换 结果会在一行中显示出来,以此为 IN0,IN1,…….INO 和 IN7 为显示 值为 255 和 000,其他为由电位器 RV1 中心抽头位置确定,调节 RV1, 然后在虚拟终端的窗口中输入大写字母“A”,IN0~IN7 随之变化,
#define uchar unsigned char
#define uint unsigned int
sbit SCLK=P1^0;
sbit CS=P1^1;
sbit DIN=P1^2;
uchar code wavetab[60]={ //正弦波波表
0x80,0x8D,0x9A,0xA7,0xB4,0xBF,0xCB,0xD5,
REF+,REF 一真接到 Vcc,GND,模拟输入 AIN 接电位器的中心抽头,调节
电位器即可改变被测输电压入值。
3. 程序设计;
#include <reg51.h>
#define uchar unsigned char
#define ulong unsigned long
uchar code segtab[]=
//装入时间常数,波特率为 9600
TL1=-3;
TR1=1;
//启动定时器 T1
}
void send(uchar dat)
{ SBUF=dat;
while(TI==0);
TI=0;
}
void int0(void) interrupt 0
{
adbuf[n]=XBYTE[addr]; //读取并保存当前转换结果
addr++;
//指向下一通道的地址
n++;
//计数器加 1
if(n<8)
XBYTE[addr]=0;
//启动对下一通道的转换
else
EX0=0; }
void getadc(void)
{n=0;
addr=0x7ff8;
//指向 IN0 通道的地址
XBYTE[addr]=0;
//启动对当前通道的转换
接地,其他 6 路通过电位器分压获得。
三、数据采集器程序清单如下;
#include <reg51.h>
#include <absacc.h> #define uint unsigned int #define uchar unsigned char
uchar idata adbuf[8]; //存放 A/D 转换结果
//将数据送到 DIN 引脚
SCLK=1;
//SCLK 产生上升沿
SCLK=0;
//SCLK 恢复为低
}
CS=1;
//片选信号恢复为高。
}
void main(void)
{ uchar i=0;
while(1)
{ i=i++;
datout(i<<2);
}
}
#include<reg51.h>
#include<intrins.h>
bsel=(bsel<<1)+1; //准备显示下一位
for(i=1;i<200;i++);//延时
P0=0xff;
//熄灭所有字段
}
}
void main()
{ ulong u;
uchar i;
while(1)
{ u=(ulong)getad ()*5000/255; //将转换结果换成电压值
for(i=0;i<3;i++)
实验过程中存在的问题及解决方法: 本次试验中,对于模拟量转换为数字量的方式不明确,在模拟试验中程 序的调整,数据采集等难以做到准确,通过查阅相关资料和老师的指 导,最终使问题得以解决。
实验体会和收获: 通过本次试验,让我们了解了模拟量与数字量之间的转换关系,从总 学习了两种转换芯片和相关的 C 语言驱动程序,为今后的学习工作打 下良好的基础。
定良好的基础。
实验目的:
1,了解 D/A 转换器的基本概念,认识串行 D/Az 转换器 TLC5615 及的内部
结构和其引脚功能。
2,熟悉其与单片机的典型链接,数据采集器的设计过程和时序
3,硬件电路和程序设计思想
4,在 proteus 完成相关模拟实验。
实验内容:
在 Proteus 环境下,用 TLC5615 设计一个锯齿波发生器,频率随意。
与上为相连机,如果 串行口收到了上位机的采集命令(0X41),就将
8 路模拟量转换为数字量,通过串行口以 ASCII 码的形式发送给上位
机。
二、硬件电路,为调试方便,ADC0808 的时钟信号 CLKY 由 Proteus 的虚拟
信号源提供,时钟信号设置为 600KHZ;8 路模拟量中 INO 接 VCC,IN7
将 TLC5615 的 SCLK,CS,DOUT 分别与单片机 p10,p11,p12,相连,基准电
压接+5v。

为了显示锯齿波,可定义一个用于计数的字符变量 N,其值由 0 开始加
1 后就将其输出,由 TLC5615 转换为相应的电压值,当 N 为 255 时,再加 1 又变回
0,这样就实现了一个周期的转换,
void datout(uint dat) //向 TLC5615 输出 16 位数据
{ uchar i;
CS=1;
//初始化片选信号为高
SCLK=0;
//初始化时钟为低
CS=0;
//选中 TLC5615
for(i=0;i<16;i++)
{ dat=dat<<1; //将最高位移入进位位 CY
DIN=CY;
EX0=1;
//允许外部中断 0 中断
while(n<8);
//等待 8 路模拟量转换完成
}
void main()
{uchar i;
init_serial();
//初始化串行口
IT0=1;
//外部中断 0 下降沿触发
EA=1;
//开中断
while(1)
{ while(RI==0);
//等待接收完一个字符
}
void disp(void)
{ uchar i,n,bsel;
bsel=0xfe;
//首先点亮最低位
for(n=0;n<4;n++)
{ P2=bsel;
//位选口
P0=segtab[dbuf[n]];//将显示缓存的数据转换为字段码显示
if(n==3) P0=P0&0x7f; //点亮最高位的小数点
0x11,0x0B,0x06,0x02,0x00,0x00,0x00,0x02,
0x06,0x0A,0x10,0x18,0x20,0x2A,0x34,0x3F,
源自文库
0x4B,0x58,0x65,0x72};
delay();
//延时
for(i=0;i<8;i++) //循环读取 8 位 A/D 转换结果
{ AD_CLK=1; //令 CLK 引脚为低
adin=adin<<1;//先读取高位,后读低位
adin0=AD_DAT;//读取数据线的一位数据
AD_CLK=0; //令 CLK 恢复为高
}
return adin;
sbit AD_DAT=P1^2;
bdata uchar adin;
sbit adin0=adin^0;
void delay(void)
{ uchar i;
for(i=0;i<20;i++);
}
uchar getad(void) // A/D 转换程序
{ uchar i;
AD_CS=0;
//令 CS 为低选中 TLC549
数据采集器的设计
任务 1 数据采集器的实现过程
试验要求:
1、
实验前,务必预习实验内容,深入了解相关知识,了解 A/D 转
换器的基本概念,先分析相关程序画出相关电路图,然后模拟电路运
转,最终得到实验结果;
2、
实验中,认真思考所做的每一步,弄懂其中的道理,填写好实
验过程;
3、
实验后,总结经验教训,写出实验体会和收获,为今后学习奠
uint addr;
//指向 IN0~IN7 通道地址
uchar n;
//通道计数
void init_serial(void)
{ SCON=0x50;
//0101,0000 8 位数据位,无奇偶校验
TMOD=0x20;
//定时器 T1 工作于方式 2
PCON=PCON&0x7f; //SMOD=0
TH1=-3;
RI=0;
//清除接收标志
i=SBUF;
//读取收到的字符
if(i==0x41)
{ getadc();
//依次完成对 8 个通道模拟量的转换
for(i=0;i<8;i++)
{ send(adbuf[i]/100+0x30);
adbuf[i]=adbuf[i]%100;
send(adbuf[i]/10+0x30);
{ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
0x88,0x83,0xc6,0xa1,0x86,0x8e,0x89,0x8c,0xff};
uchar dbuf[4]={0,0,0,0};
sbit AD_CS=P1^0;
sbit AD_CLK=P1^1;
任务 2 数字电压表设计
试验要求:
1、
实验前,务必预习实验内容,深入了解相关知识,认识 SPI 总
线,认识 8 位串行 A/D 转换器 TLC549,先分析相关程序画出相关电路
图,然后模拟电路运转,最终得到实验结果;
2、
实验中,认真思考所做的每一步,弄懂其中的道理,填写好实
验过程;
3、
实验后,总结经验教训,写出实验体会和收获,为今后学习奠
0xDF,0xE7,0xEE,0xF4,0xF9,0xFD,0xFF,0xFF,
0xFF,0xFD,0xF9,0xF4,0xEE,0xE7,0xDF,0xD5,
0xCB,0xC0,0xB4,0xA7,0x9A,0x8D,0x80,0x72,
0x65,0x58,0x4C,0x40,0x34,0x2A,0x21,0x18,
相关文档
最新文档