单片机学习小组
登录
直播中
北上北京
9年用户
939经验值
擅长:嵌入式技术
私信
关注
如何实现ADC0808/ADC0809的多通道电压采集程序设计?
开启该帖子的消息推送
ADC0808
如何实现ADC0808/ADC0809的多通道电压采集程序设计?
回帖
(1)
安喆
2022-1-24 11:28:35
一、Proteus仿真电路图如下
二、程序见附件也可加群免费获取
#include
#include
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
/*74HC595所用引脚宏定义*/
***it HC595_DAT = P2^0;
***it HC595_CLK = P2^1;
***it HC595_STC = P2^2;
/*ADC0832所用引脚宏定义*/
***it OE = P1^0;
***it EOC = P1^1;
***it ST = P1^2;
***it CLK = P1^3;
***it CC = P1^6;
***it BB = P1^5;
***it AA = P1^4;
/*数码管段选码数组定义(不带小数点)*/
uchar LEDData[10]=
{
0x03, /*0*/
0x9F, /*1*/
0x25, /*2*/
0x0D, /*3*/
0x99, /*4*/
0x49, /*5*/
0x41, /*6*/
0x1F, /*7*/
0x01, /*8*/
0x09 /*9*/
};
/*数码管段选码数组定义(带小数点)*/
uchar LEDData1[10]=
{
0x02, /*0*/
0x9E, /*1*/
0x24, /*2*/
0x0C, /*3*/
0x98, /*4*/
0x48, /*5*/
0x40, /*6*/
0x1E, /*7*/
0x00, /*8*/
0x08 /*9*/
};
/*毫秒延时函数ms*/
//void DelayMS(uint ms)
//{
// uchar i;
// while(ms--)
// {
// for(i=0;i<120;i++);
// }
//}
/*74HC595显示函数1->显示ADC电压值*/
uchar v1[3] = {0x03,0x03,0x03};
uchar v2[3] = {0x03,0x03,0x03};
uchar v3[3] = {0x03,0x03,0x03};
void Send_HC595_Byte(uchar temp8)
{
uchar i;
for(i = 0; i < 8; i++)
{
HC595_DAT = temp8&0x01;//从高位开始传输
HC595_CLK = 0;
_nop_();
_nop_();
HC595_CLK = 1;
temp8=temp8>>1;
}
}
void Display(uchar v1[3],uchar v2[3],uchar v3[3])
{
HC595_STC = 0;
Send_HC595_Byte(v1[0]);
Send_HC595_Byte(v1[1]);
Send_HC595_Byte(v1[2]);
Send_HC595_Byte(v2[0]);
Send_HC595_Byte(v2[1]);
Send_HC595_Byte(v2[2]);
Send_HC595_Byte(v3[0]);
Send_HC595_Byte(v3[1]);
Send_HC595_Byte(v3[2]);
HC595_STC = 1;
}
void main()
{
TMOD = 0x02;
TH0 = 0xFB;
TL0 = 0xFB; //500KHZ
TR0 = 1;
ET0 = 1;
EA = 1;
while(1)
{
/*通道0转换*/
CC = 0;BB = 0;AA = 0;
ST = 0;
ST = 1;
ST = 0;
_nop_();_nop_();_nop_();
while(EOC == 0);
OE = 1;
v3[2] = LEDData1[P3/100];
v3[1] = LEDData[P3%100/10];
v3[0] = LEDData[P3%10];
OE = 0;
/*通道1转换*/
CC = 0;BB = 0;AA = 1;
ST = 0;
ST = 1;
ST = 0;
_nop_();_nop_();_nop_();
while(EOC == 0);
OE = 1;
v2[2] = LEDData[P3/100];
v2[1] = LEDData[P3%100/10];
v2[0] = LEDData[P3%10];
OE = 0;
/*通道2转换*/
CC = 0;BB = 1;AA = 0;
ST = 0;
ST = 1;
ST = 0;
_nop_();_nop_();_nop_();
while(EOC == 0);
OE = 1;
v1[2] = LEDData[P3/100];
v1[1] = LEDData[P3%100/10];
v1[0] = LEDData[P3%10];
OE = 0;
/*595数码管显示三通道采集到的ADC数值*/
Display(v1,v2,v3);
}
}
void Timer0_INT() interrupt 1
{
TH0 = 0xFB;
TL0 = 0xFB;
CLK = !CLK;
}
一、Proteus仿真电路图如下
二、程序见附件也可加群免费获取
#include
#include
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
/*74HC595所用引脚宏定义*/
***it HC595_DAT = P2^0;
***it HC595_CLK = P2^1;
***it HC595_STC = P2^2;
/*ADC0832所用引脚宏定义*/
***it OE = P1^0;
***it EOC = P1^1;
***it ST = P1^2;
***it CLK = P1^3;
***it CC = P1^6;
***it BB = P1^5;
***it AA = P1^4;
/*数码管段选码数组定义(不带小数点)*/
uchar LEDData[10]=
{
0x03, /*0*/
0x9F, /*1*/
0x25, /*2*/
0x0D, /*3*/
0x99, /*4*/
0x49, /*5*/
0x41, /*6*/
0x1F, /*7*/
0x01, /*8*/
0x09 /*9*/
};
/*数码管段选码数组定义(带小数点)*/
uchar LEDData1[10]=
{
0x02, /*0*/
0x9E, /*1*/
0x24, /*2*/
0x0C, /*3*/
0x98, /*4*/
0x48, /*5*/
0x40, /*6*/
0x1E, /*7*/
0x00, /*8*/
0x08 /*9*/
};
/*毫秒延时函数ms*/
//void DelayMS(uint ms)
//{
// uchar i;
// while(ms--)
// {
// for(i=0;i<120;i++);
// }
//}
/*74HC595显示函数1->显示ADC电压值*/
uchar v1[3] = {0x03,0x03,0x03};
uchar v2[3] = {0x03,0x03,0x03};
uchar v3[3] = {0x03,0x03,0x03};
void Send_HC595_Byte(uchar temp8)
{
uchar i;
for(i = 0; i < 8; i++)
{
HC595_DAT = temp8&0x01;//从高位开始传输
HC595_CLK = 0;
_nop_();
_nop_();
HC595_CLK = 1;
temp8=temp8>>1;
}
}
void Display(uchar v1[3],uchar v2[3],uchar v3[3])
{
HC595_STC = 0;
Send_HC595_Byte(v1[0]);
Send_HC595_Byte(v1[1]);
Send_HC595_Byte(v1[2]);
Send_HC595_Byte(v2[0]);
Send_HC595_Byte(v2[1]);
Send_HC595_Byte(v2[2]);
Send_HC595_Byte(v3[0]);
Send_HC595_Byte(v3[1]);
Send_HC595_Byte(v3[2]);
HC595_STC = 1;
}
void main()
{
TMOD = 0x02;
TH0 = 0xFB;
TL0 = 0xFB; //500KHZ
TR0 = 1;
ET0 = 1;
EA = 1;
while(1)
{
/*通道0转换*/
CC = 0;BB = 0;AA = 0;
ST = 0;
ST = 1;
ST = 0;
_nop_();_nop_();_nop_();
while(EOC == 0);
OE = 1;
v3[2] = LEDData1[P3/100];
v3[1] = LEDData[P3%100/10];
v3[0] = LEDData[P3%10];
OE = 0;
/*通道1转换*/
CC = 0;BB = 0;AA = 1;
ST = 0;
ST = 1;
ST = 0;
_nop_();_nop_();_nop_();
while(EOC == 0);
OE = 1;
v2[2] = LEDData[P3/100];
v2[1] = LEDData[P3%100/10];
v2[0] = LEDData[P3%10];
OE = 0;
/*通道2转换*/
CC = 0;BB = 1;AA = 0;
ST = 0;
ST = 1;
ST = 0;
_nop_();_nop_();_nop_();
while(EOC == 0);
OE = 1;
v1[2] = LEDData[P3/100];
v1[1] = LEDData[P3%100/10];
v1[0] = LEDData[P3%10];
OE = 0;
/*595数码管显示三通道采集到的ADC数值*/
Display(v1,v2,v3);
}
}
void Timer0_INT() interrupt 1
{
TH0 = 0xFB;
TL0 = 0xFB;
CLK = !CLK;
}
举报
更多回帖
rotate(-90deg);
回复
相关问答
ADC0808
仿真中的
ADC0808
与实物
ADC0809
的输出端是倒序的关系吗
2014-05-28
3564
用
ADC0809
做成的数字
电压
表
2011-12-05
16931
ADC0808
/
0809
与8031单片机接口设计
2019-06-14
2380
关于
ADC0808
2015-05-12
3995
proteus中为什么没有
adc0809
2013-01-19
15544
ADC0809
是什么?
ADC0809
是如何工作的
2022-01-25
8405
如何利用
ADC0808
实现
8路模拟输入信号依次进行A/D转换?
2021-09-28
2022
ADC0808
提示没有仿真模型
2018-05-13
4959
如何才能将
ADC0809
变成三位十进制的呢?
2019-08-26
2050
求助,get
adc0809
(void)
2015-04-24
2678
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分