| 
 
| 用ADCO8O9对模拟信号进行转换,转换结果送七段数码管显示,同时用8位发光二极管显示转换值的二进制码“XX”, 5LED静态显示的前两位显示“AD”字样,后三位显示转换结果,调节模拟信号输入端的电位器旋钮,显示值随着变化,顺时针旋转值增大,AD转换值的范围是0~FFH。 
 #include <reg52.h>                    //52系列单片机头文件
 #include <intrins.h>
 #define uchar unsigned char
 #define uint unsigned int
 sbit ST=P3^0;                //(START): A/D转换启动脉冲输入端,输入一个正脉冲,上升复位下降沿启动
 sbit OE=P3^1;                //(OE):数据输出允许信号,高电平有效
 sbit EOC=P3^2;                //A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平
 uchar code table[]={
 0x3f,0x06,0x5b,0x4f,
 0x66,0x6d,0x7d,0x07,
 0x7f,0x6f,0x77,0x7c,
 0x39,0x5e,0x79,0x71};
 uchar num;
 
 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 d)  //显示子函数
 {
 P1=0xff;         //消影
 P1=0x88;         //送段选码A
 P2=0xf7;         //送位选码
 delayms(5);     //延时
 
 P1=0xff;         //D
 P1=0xa1;
 P2=0xef;
 delayms(5);
 
 P1=0xff;
 P1=table[d/100];
 P2=0xdf;
 delayms(5);
 
 P1=0xff;
 P1=table[d%100/10];
 P2=0xbf;
 delayms(5);
 
 P1=0xff;
 P1=table[d%10];
 P2=0x7f;
 delayms(5);
 }
 
 /*void in00() interrupt 0   //中断子程序INT0
 {
 OE=1;
 adval=P0;
 A1=adval/100;                //分出百,十,和个位
 A2=adval%100/10;
 A3=adval%10;
 }
 */
 
 void main()                //        主程序
 {
 //        EA=1;
 //        EX0=1;
 //        IT0=0;
 while(1)
 {
 ST=0;
 ST=1;                        //启动AD转换
 //_nop_();
 ST=0;
 while(EOC==0);
 OE=1;
 while()
 display(P0);
 OE=0;
 }
 }
 | 
 |