微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STC89C52单片机UART AD DA测试实验

STC89C52单片机UART AD DA测试实验

时间:11-21 来源:互联网 点击:
///////////////////////////////////////////////////////////////////////////

实现功能: 调节实验板上的标号为AD0的电位器改变电压,通过PCF8591的采集,把
数据传输给单片机,单片机通过处理把采集到的电压值,显示在数码管
上,同时把通过AD0采集到的数据重新写入PCF8591,让其转换成模拟信
号,改变开发板上D11的亮暗程度,而且把采集到的数据通过串口发送到
电脑上。注意所采用的通道为第0通道,也就
是说调节的是AD0电位器
实验板型号:KBL-XYD-C52
实验名称:UART AD DA测试实验
编写人:谢应东
编写日期: 2012-4-30
///////////////////////////////////////////////////////////////////////////
#include //包含52单片机头文件
#include //包含标准输入输出文件

#define uchar unsigned char//宏定义这个谁都知道的
#define uint unsigned int

uchar code table[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴数码管1至F数字编码

sbit duan=P2^6; //573锁存器段锁存端
sbit wei=P2^7; //位锁存端

sbit sda=P2^0; //定义模拟IIC总线的数据线
sbit scl=P2^1; //定义模拟IIC总线的时钟线

float fValue;

#define FOSC 11059200L
#define TIMS (65535-FOSC/12/1000) //在12T模式下定时器中断1毫秒的计算方法

uint cCount,cFlag=0;
///////////////////////////////////////////////////////////////////////////
函数名称:毫秒延时函数
函数功能:实现毫秒级的延时
参数介绍:Delay_MS: 定义需要延时的毫秒的数值
iNumber: 记录Delay_MS的数值,以for语句实现所要求的延时
iValue: 要延时毫秒所要进行的循环数值,本数值为实际测得
返回值:
注意事项:本实验是在所用晶振为12M的前提下实现的毫秒延时,本函数是通过循环的形
式完成,所以如果改变了晶振的频率,请做相应的改变
///////////////////////////////////////////////////////////////////////////

void DelayMs(uint Delay_MS)
{
uint iNumber,iValue;
for(iNumber=0;iNumber{
iValue=107;
while(iValue--);
}
}
///////////////////////////////////////////////////////////////////////////
函数名称:DelayUs
函数功能:延时几个微秒(us),用来IIC总线延时
参数介绍:无
返回值:
注意事项:无
///////////////////////////////////////////////////////////////////////////

void DelayUs()
{;;}
///////////////////////////////////////////////////////////////////////////
函数名称:Display_V
函数功能:把通过PCF8591采集到的数据,在单片机处理完之后,显示在数码管上
参数介绍:cBai:要显示在第一个数码管上的数字
cShi:要显示在第二个数码管上的数字
cGe:要显示在第三个数码管上的数字
返回值:
注意事项:注意实验板上所要用到底的数码管为共阴极的数码管
///////////////////////////////////////////////////////////////////////////
void Display_V(uchar cBai,uchar cShi,uchar cGe)
{
duan=1; //打开数码管的段选
P0=table[cBai]|0x80;//送入相应的段选0x80是为了点亮数码管小数点(dp端)
duan=0;//关闭数码管的段选
P0=0xff;
wei=1;//打开数码管的位选
P0=0xfe; //给要点亮数码管的公共极低电平
wei=0;//关闭数码管的位选
DelayMs(5);//稳定时序

duan=1;//打开数码管的段选
P0=table[cShi];//送入相应的段选
duan=0;//关闭数码管的段选
P0=0xff;
wei=1; //打开数码管的位选
P0=0xfd; //给要点亮数码管的公共极低电平
wei=0; //打开数码管的位选
DelayMs(5); //稳定时序

duan=1; //打开数码管的段选
P0=table[cGe]; //送入相应的段选
duan=0; //关闭数码管的段选
P0=0xff;
wei=1; //打开数码管的位选
P0=0xfb; //给要点亮数码管的公共极低电平
wei=0; //打开数码管的位选
DelayMs(5); //稳定时序
}
///////////////////////////////////////////////////////////////////////////

函数名称:Init_IIC
函数功能:完成对IIC总线数据线时钟线初始化
参数介绍:无
返回值:
注意事项:无
///////////////////////////////////////////////////////////////////////////
void Init_IIC()
{
sda=1;
scl=1;
}
///////////////////////////////////////////////////////////////////////////
函数名称:Start_IIC
函数功能:IIC总线的开始条件
参数介绍:无
返回值:
注意事项:具体请参考相关的文档
///////////////////////////////////////////////////////////////////////////
void Start_IIC()//开始条件
{
sda=1;
DelayUs();
scl=1;
DelayUs();
sda=0;
}
///////////////////////////////////////////////////////////////////////////

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top