给你改了一下试试。 对比一下就知道哪里错了。
- #include "STC8G.H"
- #include "intrins.h"
- #define uint unsigned int
- #define uchar unsigned char
- sbit led=P3^2; //用P3^3口采集5V信号
- uchar data dis_buf[4]; //显示缓存
- uchar code ledduan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,
- 0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf,0x7f};
- uchar i;
- uint num;
- void delay_ms(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=1150;y>0;y--);
- }
- void datapros() //数据处理函数
- {
- float tp;
- tp=num;
- num=tp*1.0/255*500;
- dis_buf[3]=ledduan[num/1000];
- dis_buf[2]=ledduan[num%1000/100] & 0x7f;
- dis_buf[1]=ledduan[num%100/10];
- dis_buf[0]=ledduan[num%10];
- if((dis_buf[2]>=1)&&(dis_buf[2]<=2)) //设置显示范围内执行的功能
- led=0;
- else
- led=1;
-
- P1=0xff;
- P3&=0x07;
- P1=dis_buf[i];
- P3|=0x10<<i;
- i++;
- i%=4;
- }
- void main()
- {
- P1M0=0X00;
- P1M1=0X00;
- //P3M0=0Xff;//强推挽
- //P3M1=0X00;
- P5M0=0X00;
- P5M1=0X00;
- P3M0=0Xf7;
- P3M1=0X08; //P3^3为ADC口 (高阻)
- P_SW2|=0x80;
- ADCTIM=0x3f;
- P_SW2&=0x7f;
- ADCCFG=0x0f; //设置ADC时钟为系统时钟/2/16
- ADC_CONTR=0x8B; //P3^3为ADC口 ADC_CONTR=1XXX1011
- while(1)
- {
- ADC_CONTR |= 0x40; //启动AD转换
- _nop_();
- _nop_();
- while(!(ADC_CONTR&0x20));
- ADC_CONTR&=~0x20;
- num=ADC_RES;
- datapros();
- delay_ms(1);
- }
- }
复制代码 |