51单片机驱动ADC0808电路图C51及汇编程序
第一个C程序,值得纪念,也值得以后参考。
本文引用地址:https://www.eepw.com.cn/article/201611/323982.htm本程序的功能是:
1.ADC0808转换功能;
2.数据16进制显示;
3.串行通信数据。
C51程序:工程文件下载:http://www.51hei.com/f/0808_c.rar
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit START=P3^6; //启动转换
sbit OE=P3^5; //输出允许
sbit EOC=P3^7; //转换结束
sbit WC=P3^4; //通道选择
sbit WB=P3^3; //通道选择
sbit WA=P3^2; //通道选择
uchar data led[12];
signed data data1;
signed data data2;
signed data data3;
signed data data4;
signed data data5;
signed data data6;
signed data data7;
uchar code tv[]={0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb};
uchar code dc[]={0xC0, //"0"
0xF9, //"1"
0xA4, //"2"
0xB0, //"3"
0x99, //"4"
0x92, //"5"
0x82, //"6"
0xF8, //"7"
0x80, //"8"
0x90, //"9"
0x88, //"A"
0x83, //"B"
0xC6, //"C"
0xA1, //"D"
0x86, //"E"
0x8E, };//"F"};/十六进制显示方式
void delay(void) //延时程序
{
uint i;
for(i=0;i<10;i++);
}
void ledxianshi(void) //显示模块
{
uchar k,i;
led[0]=data1%16; //编码1个位
led[1]=data1/16%16; //编码1十位
led[2]=data2%16; //数据1个位
led[3]=data2/16%16; //数据1十位
led[4]=data3%16; //编码2个位
led[5]=data3/16%16; //编码2十位
led[6]=data4%16; //数据2个位
led[7]=data4/16%16; //数据2十位
led[8]=data5%16; //编码3个位
led[9]=data5/16%16; //编码3十位
led[10]=data6%16; //数据3个位
led[11]=data6/16%16; //数据3十位
for(k=0;k<12;k++)
{
P2=tv[k]; //位选用
i=led[k];
P1=dc[i]; //段码数显示
delay();
}
}
void csh(void)
{
SM0=0;
SM1=1;
REN=1;
TI=0;
RI=0;
PCON=0;
TH1=0xF3;
TL1=0XF3;
TMOD=0X20;
EA=1;
ET1=0;
ES=1;
TR1=1;
TI=0;
SBUF=data1;
while(!TI);
TI=0;
SBUF=data2;
while(!TI);
TI=0;
SBUF=data3;
while(!TI);
TI=0;
SBUF=data4;
while(!TI);
TI=0;
SBUF=data5;
while(!TI);
TI=0;
SBUF=data6;
while(!TI);
TI=0;
}
void ad1(void)
{
WA=0; //通道1
WB=0;
WC=0;
START=1;
START=0; //启动转换
while(EOC==0); //转换结束信号,为0则说明转换结束
OE=1; //输出允许信号,为真,可以输出
data7=P0; //P0口的测量值送到TVDATE
OE=0; //关输出允许
}
void ad2(void)
{
WA=1; //通道1
WB=0;
WC=0;
START=1;
START=0; //启动转换
while(EOC==0); //转换结束信号,为0则说明转换结束
OE=1; //输出允许信号,为真,可以输出
data4=P0; //P0口的测量值送到TVDATE
OE=0; //关输出允许
}
评论