【文件属性】:
文件名称:51单片机数模转换程序
文件大小:3KB
文件格式:C
更新时间:2015-11-09 07:12:29
51数模转换
单片机数模转换程序
将da#include //52系列单片机头文件
#include
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6; //申明U1锁存器的锁存端
sbit wela=P2^7; //申明U2锁存器的锁存端
sbit adwr=P3^6; //定义AD的WR端口
sbit adrd=P3^7; //定义AD的RD端口
sbit led=P2^5;
sbit DAC0832_CS = P3^2;
sbit DAC0832_WR = P3^6;
sbit AD_CS=P0^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar weima[] = {0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--) //i=xms即延时约xms毫秒
for(j=110;j>0;j--);
}
void display(uchar bai,uchar shi,uchar ge) //显示子函数
{
dula=1;
P0=table[bai]|0x80; //送段选数据
dula=0;
P0=0xff; //送位选数据前关闭所有显示,防止打开位选锁存时
wela=1; //原来段选数据通过位选锁存器造成混乱
P0=0x7e; //送位选数据
wela=0;
delayms(1); //延时
dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
P0=0x7d;
wela=0;
delayms(1);
dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0x7b;
wela=0;
delayms(1);
}
/*void displays(uchar a ,uchar b,uchar c) //显示子函数
{
dula=1;
P0=table[a]; //送段选数据
dula=0;
P0=0xff; //送位选数据前关闭所有显示,防止打开位选锁存时
wela=1; //原来段选数据通过位选锁存器造成混乱
P0=0x77; //送位选数据
wela=0;
delayms(1); //延时
dula=1;
P0=table[b];
dula=0;
P0=0xff;
wela=1;
P0=0x6f;
wela=0;
delayms(1);
dula=1;
P0=table[c];
dula=0;
P0=0xff;
wela=1;
P0=0x5f;
wela=0;
delayms(1);
}
*/
void displays(uchar shuzi,uchar weizhi,bit dp)
{
dula=1;
if(dp)
P0 = table[shuzi]|0x80;
else
P0 = table[shuzi];
dula=0;
wela=1;
P0 = weima[weizhi];
wela=0;
}
void main() // 主程序
{
uint ad;
uchar A1,A2,A3,adval;
AD_CS=1; //置CSAD为0,选通ADCS 以后不必再管ADCS
DAC0832_CS = 0;
DAC0832_WR = 0;
while(1)
{
wela=1;
P0=0x7f;
wela=0;
adwr=1;
_nop_();
adwr=0; //启动AD转换
_nop_();
adwr=1;
P1=0xff; //读取P1口之前先给其写全1
adrd=1; //选通ADCS
_nop_();
adrd=0; //AD读使能
_nop_();
adval=P1;
ad=adval*1.941; //AD数据读取赋给P1口
adrd=1;
A1=ad/100; //分出百,十,和个位
A2=ad0/10;
A3=ad;
P1=(~adval);
P0=adval;
displays(adval/100,4,0);
delayms(1);
displays(adval0/10,5,0);
delayms(1);
displays(adval,6,0);
delayms(1);
display(A1,A2,A3);
}
}
ad的数据相互转换