|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
用STC12C5410AD的2路AD转换接收0-5V电压信号,MAX7219驱动数码管显示。现在的情况是在程序里开单路AD(P1.0或P1.1)显示其数据正常。但想2路AD同时开,在数码管上前四位显示P1.0的数据,后四位显示P1.1的数据。数码管显示的2路数据却都是P1.1的。应该是程序的问题吧?本人初学基础较差请高手帮我看看问题出在哪?帮我改改程序非常感谢!!
#include <STC12C5410AD.h>
#define uchar unsigned char
#define uint unsigned int
#define DECODE_MODE 0x09
#define INTENSITY 0x0A
#define SCAN_LIMIT 0x0B
#define SHUT_DOWN 0x0C
#define DISPLAY_TEST 0x0F
#define N 11
sbit DIN=P1^4;
sbit CLK=P1^5;
sbit LOAD=P1^6;
void delayms(uint xms);
void write7219(uchar address,uchar dat);
void max7219_init();
void ad_init();
uchar getad(uchar channel);
uchar ad_av(uchar channel);
void main()
{
uchar b0,s0,g0,b1,s1,g1, ad0_result,ad1_result;
ad_init();
max7219_init();
delayms(1);
while(1)
{
ad0_result=ad_av(0);
ad1_result=ad_av(1);
b0=ad0_result/100;
s0=ad0_result%100/10;
g0=ad0_result%10;
b1=ad1_result/100;
s1=ad1_result%100/10;
g1=ad1_result%10;
write7219(1,0);
write7219(2,b0);
write7219(3,s0);
write7219(4,g0);
write7219(5,0);
write7219(6,b1);
write7219(7,s1);
write7219(8,g1);
}
}
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=120;j>0;j--);
}
void ad_init()
{
ADC_CONTR=0xe0 ;
delayms(20);
P1M0=0x03;
P1M1=0x03;
}
uchar getad(uchar channel)
{
uchar AD_finished=0;
uchar result=0;
ADC_DATA&=0;
ADC_CONTR|=channel; //选择AD通道号
ADC_CONTR|=0x08; //启动AD转换
while(AD_finished==0) //等待AD转换结束
AD_finished=(ADC_CONTR&0x10);//查询ADC_FLAG位是否置1
ADC_CONTR&=0xef; //清除转换结束标志
result=ADC_DATA;
return (result); //返回结果给函数
}
uchar ad_av(uchar channel)
{
uchar value_buf[N];
uchar count,i,j,temp;
for ( count=0;count<N;count++)
{
value_buf[count] = getad(channel);
delayms(5);
}
for (j=0;j<N-1;j++)
{
for (i=0;i<N-j;i++)
{
if ( value_buf[i]>value_buf[i+1] )
{
temp = value_buf[i];
value_buf[i] = value_buf[i+1];
value_buf[i+1] = temp;
}
}
}
return value_buf[(N-1)/2];
}
void write7219(uchar address,uchar dat)
{
uchar i;
LOAD=0;
for (i=0;i<8;i++)
{
CLK=0;
DIN=(bit)(address&0x80);
address<<=1;
CLK=1;
}
for (i=0;i<8;i++)
{
CLK=0;
DIN=(bit)(dat&0x80);
dat<<=1;
CLK=1;
}
LOAD=1;
}
void max7219_init()
{
write7219(SHUT_DOWN,0x01); //开启正常工作模式(0xX1)
write7219(DISPLAY_TEST,0x00); //选择工作模式(0xX0)
write7219(DECODE_MODE,0xff); //选用全译码模式
write7219(SCAN_LIMIT,0x07); //几个数码管亮
write7219(INTENSITY,0x04); //设置初始亮度
} |
|