|
100黑币
大哥们 小弟刚学单片机 不是很懂 现在 有个实验一直不会 所以我想麻烦你们帮我看一下哪里错了然后怎么改
#include<stc15f2k60s2.h>
#include<intrins.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
#define ADC_POWER 0x80
#define ADC_FLAG 0x10
#define ADC_START 0x08
sfr ADC_LOW2 = 0xBE;
sbit SRCLK=P4^3;
sbit SER=P4^0;
sbit RCLK=P3^4;
void adc();
uint adc_run();
void display595();
void display();
void time0_init();
void delay();
void led595(uchar h,uchar l);
void time_ris();
uint adc_data=10;
uint adc_r=0;
uchar code led[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar code wex[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar ledbuf[]={0,0,0,0,0,0,0,0};
int Data[6];
int j;
uchar id=0;
void main()
{
time0_init();
SRCLK=0;
SER=0;
RCLK=0;
adc();
while(1)
{
display();
}
}
void adc()
{
P1ASF = 0xff;
ADC_RES = 0;
ADC_CONTR =0x80;
delay();
}
uint adc_run()
{
ADC_CONTR = 0x8c;
_nop_();
_nop_();
_nop_();
_nop_();
while (!(ADC_CONTR & ADC_FLAG));
ADC_CONTR &= ~ADC_FLAG;
adc_r=ADC_RES;
//adc_r=adc_r*4;
//adc_r=adc_r+ADC_RES;
return adc_r;
}
void time0_init()
{
TMOD=0x00;
TH1=0x6c;
TL1=0x76;
ET1=1;
TR1=1;
EA=1;
}
void display()
{
double a;
a=adc_run();
//a=a*(10000.00000/51);
adc_data=a;
//adc_data=adc_data;
ledbuf[0]=adc_data/10000000;
ledbuf[1]=adc_data/1000000%10;
ledbuf[2]=adc_data/100000%10;
ledbuf[3]=adc_data/10000%10;
ledbuf[4]=adc_data/1000%10;
ledbuf[5]=adc_data/100%10;
ledbuf[6]=adc_data/10%10;
ledbuf[7]=adc_data%10;
}
void time_ris()interrupt 3
{
TR1=0;
display595();
TR1=1;
}
void display595()
{
uchar temp;
switch(id)
{
case 0:
led595(0xff,0xff);
temp=led[ledbuf[0]];
led595(wex[0],temp);
delay();id++;break;
case 1:
led595(0xff,0xff);
temp=led[ledbuf[1]];
led595(wex[1],temp);
delay();id++;break;
case 2:
led595(0xff,0xff);
temp=led[ledbuf[2]];
led595(wex[2],temp);
delay();id++;break;
case 3:
led595(0xff,0xff);
temp=led[ledbuf[3]];
led595(wex[3],temp);
delay();id++;break;
case 4:
led595(0xff,0xff);
temp=led[ledbuf[4]];
led595(wex[4],temp);
delay();id++;break;
case 5:
led595(0xff,0xff);
temp=led[ledbuf[5]];
led595(wex[5],temp);
delay();id++;break;
case 6:
led595(0xff,0xff);
temp=led[ledbuf[6]];
led595(wex[6],temp);
delay();id++;break;
case 7:
led595(0xff,0xff);
temp=led[ledbuf[7]];
led595(wex[7],temp);
delay();id=0;break;
default:break;
}
}
void led595(uchar h,uchar l)
{
uchar i,temp;
temp=h;
for(i=0;i<8;i++)
{
if(temp >=0x80)
SER=1;
else
SER=0;
temp<<=1;
SRCLK=0;
_nop_();
_nop_();
SRCLK=1;
}
temp=l;
for(i=0;i<8;i++)
{
if(temp >=0x80)
SER=1;
else
SER=0;
temp<<=1;
SRCLK=0;
_nop_();
_nop_();
SRCLK=1;
}
RCLK=0;
RCLK=1;
}
void delay()
{
unsigned char i, j;
_nop_();
_nop_();
_nop_();
i = 11;
j = 10;
do
{
while (--j);
} while (--i);
}
|
最佳答案
查看完整内容
选择P1.0输入模拟量,10位转换结果最大值1023。8位数码管实际只用了4位。
|