ADC0808仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #include <reg51.h>//包含头文件reg51.h
- sbit CLOCK=P2^4;//定义ADC0809的CLOCK引脚
- sbit EOC=P2^5; //定义ADC0809的EOC引脚
- sbit START=P2^6; //定义ADC0809的START引脚
- sbit OE=P2^7; //定义ADC0809的OE引脚
- sbit high_bit=P3^0; //定义数码管的高位位选通
- sbit low_bit=P3^1; //定义数码管的低位位选通
- unsigned char ADC_val;//定义AD转换结果暂存
- unsigned char table[]=
- {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
- };//0~9的段码表
- unsigned char table1[]=
- {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,
- };//0.~9.的段码表
- void display(unsigned char);//显示函数声明
- void delayms(unsigned int);//延时函数声明
- //主程序
- void main()
- {
-
- while(1)
- {
- START=0;START=1;START=0;//启动A/D转换
- while(EOC); //等待EOC变低
- while(!EOC);//等待EOC变低,转换结束
- OE=1;ADC_val=P0;OE=0;//读转换结果
- display(ADC_val);//显示16进制转换结果
- }
- }
- //显示函数
- void display(unsigned char ADC_display)
- {
- unsigned char display_high,display_low;
- //把两位十六进制的模数转换结果拆分出低位
- display_low=((ADC_display+1)*50/255)%10;
- //把低位数的段码通过P1口送到低位数码管
- P1=table[display_low];
- low_bit=1;//选通两位数码管的低位
- delayms(10);//延时10ms
- low_bit=0;
- //把两位十六进制的模数转换结果拆分出高位
- display_high=((ADC_display+1)*50/255)/10;
-
- //把高位数的段码通过P1口送到高位数码管
- P1=table1[display_high];
- high_bit=1;//选通两位数码管的高位
- delayms(10);//延时10ms
- high_bit=0;
- }
- //延时函数
- void delayms(unsigned int xms)
- {
- unsigned int i,j;
- for(i=xms;i>0;i--)
- for(j=114;j>0;j--);
- }
复制代码
所有资料51hei提供下载:
ADC0808模数转换.rar
(64.85 KB, 下载次数: 101)
|