按设计要求用ADC0809,但
proteus里没有这个模型,用的ADC0808,
仿真不出来,截了三个图,弟弟我弄的头都蒙了,真心求解救
软件程序
#include <reg52.h>#include <intrins.h>#include <absacc.h> #define uchar unsigned char#define uint unsigned int sbit rs=P3^5;sbit wr=P3^6;sbit lcden=P3^4;sbit WR12=P2^1;sbit CS=P2^0;sbit CLK=P3^1;sbit DIO=P3^2;sbit CS1=P3^3; uchar table1[]="input";uchartable2[]="0000MA";//uchartable3[]="output";//uchar table4[]="MA";//uchartable3[]="0000";uchar keyflag;//进入中断标志uchar c;//数组位置bit set,jia,jian,right;//四个按键uchar m;//K1按下次数的标志uchar keyvalue;sbit k1=P2^2;sbit k2=P2^3;sbit k3=P2^4;sbit k4=P2^5;//uchar s;//总数 void delay(uint x){ uinta,b; for(a=x;a>0;a--) for(b=10;b>0;b--);}void delay20ms(void) //误差0us{ unsigned char a,b; for(b=215;b>0;b--) for(a=45;a>0;a--); // _nop_; //if Keil,require useintrins.h // _nop_; //if Keil,require use intrins.h} void delay1(uint x){ uinta,b; for(a=x;a>0;a--) for(b=100;b>0;b--);} void write_com(uchar com){ P0=com; rs=0; lcden=0; delay(10); lcden=1; delay(10); lcden=0; } void write_date(uchar date){ P0=date; rs=1; lcden=0; delay(10); lcden=1; delay(10); lcden=0; } void init(){ wr=0; write_com(0x38); delay(20); write_com(0x0c); delay(20);// write_com(0x06);// delay(20); write_com(0x01); delay(20); }void keyscan(){ if(k1==0) { delay20ms(); if(k1==0) { while(!k1); keyvalue=1; set=1; m++; } } if(k2==0) { delay20ms(); if(k2==0) { while(!k2); keyvalue=2; right=1; } } if(k3==0) { delay20ms(); if(k3==0) { while(!k3); keyvalue=3; jia=1; } } if(k4==0) { delay20ms(); if(k4==0) { while(!k4); keyvalue=4; jian=1; } }}//ad采集并返回 unsigned char A_D(){ unsigned char i,dat; CS1=1; //一个转换周期开始 CLK=0; //为第一个脉冲作准备 CS1=0; //CS置0,片选有效 DIO=1; //DIO置1,规定的起始信号 CLK=1; //第一个脉冲 CLK=0; //第一个脉冲的下降沿,此前DIO必须是高电平 DIO=1; //DIO置1,通道选择信号 CLK=1; //第二个脉冲,第2、3个脉冲下沉之前,DI必须跟别输入两位数据用于选择通道,这里选通道CH0 CLK=0; //第二个脉冲下降沿 DIO=0; //DI置0,选择通道0 CLK=1; //第三个脉冲 CLK=0; //第三个脉冲下降沿 DIO=1; //第三个脉冲下沉之后,输入端DIO失去作用,应置1 CLK=1; //第四个脉冲 for(i=0;i<8;i++) //高位在前 { CLK=1; //第四个脉冲 CLK=0; dat<<=1; //将下面储存的低位数据向右移 dat|=(unsignedchar)DIO; //将输出数据DIO通过或运算储存在dat最低位 } CS1=1; //片选无效 return dat; //将读书的数据返回 } void main(){ uchara,s,q=0,w=0,e=0,r=0,aa,bb; uintcc;//cc=(1000*table2[0]+100*table2[1]+10*table2[2]+table2[3])*3/255; CS=0; WR12=0; init(); write_com(0x80+0x00); delay(20); for(a=0;a<5;a++) { write_date(table1[a]); delay(20); } write_com(0xc0+0x00); delay(50); for(a=0;a<6;a++) { write_date(table2[a]); delay(40); } /* write_com(0x80+0x08); delay(50); for(a=0;a<6;a++) { write_date(table3[a]); delay(40); } write_com(0xc0+0x08); delay(50); for(a=0;a<6;a++) { write_date(table4[bb]); delay(40); }*/ while(1) { keyscan(); if((keyvalue==1)&&(m%2==1)) { write_com(0xc0+0x00); write_com(0x0f); } elseif((keyvalue==1)&&(m%2==0)) { write_com(0x0c); } if(set==1) { switch(keyvalue) { case2:c++; if(c==4) { c=0; } write_com(0xc0+0x00+c); write_com(0x0f); break; case3:table2[c]++; if(table2[c]>'9') { table2[c]='0'; } //table3[c]++; if(c==0) { q++; } if(c==1) { w++; } if(c==2) { e++; } if(c==3) { r++; } write_com(0xc0+0x00+c); write_date(table2[c]); write_com(0xc0+0x00+c); write_com(0x0f); break; case4: table2[c]--; if(table2[c]<'0') { table2[c]='9'; } //table3[c]--; if(c==0) { q--; } if(c==1) { w--; } if(c==2) { e--; } if(c==3) { r--; } write_com(0xc0+0x00+c); write_date(table2[c]); write_com(0xc0+0x00+c); write_com(0x0f); break; } keyvalue=0; } cc=(1000*q+100*w+10*e+r); //mm=cc*33.5; //s=(uchar)(mm>>8); s=(uchar)(cc*0.180); // CS=1; P1=s; aa=A_D(); bb=aa; if(bb>cc) s--; else if(bb<cc ) s++; } }
-
用的ADC0809
-
用的ADC0808
-
图
一周热门 更多>