|
#include
#include
#define uint unsigned int
#define uchar unsigned char
sbit clock=P1^1; // 时钟信号(数据输入)
sbit date_out=P3^2; // 数据输出
sbit cs=P1^0; // 片选信号
uchar code table[10] = {0x03, 0x9f, 0x25, 0x0d, 0x99, 0x49, 0x41, 0x1f, 0x01, 0x09};
uchar code table_d[10] = {0x02, 0x9e, 0x24, 0x0c, 0x98, 0x48, 0x40, 0x1e, 0x00, 0x08}; //带点数码管显示
uchar volt;//电压转换1000后的值。
//延时函数。一次1ms
void delay(uint del)
{
uchar i, j;
for(i=0; i
for(j=0; j<=148; j++);
}
//ad的驱动程序,temp为读出电压,
uchar tlc549_qudong(void)
{
uchar i,temp;
cs=1;
clock=0;
cs=0; // cs置底电平。 同时date_out为高。(=1).
_nop_();
_nop_(); //延时大约1.4us,开始转换。
for(i=0;i<8;i++) //开始串行数据的输入;
{
temp<<=1;
temp|=date_out;
clock=1;
_nop_();
_nop_();
clock=0; //CLK transition time Max 0.1us
}
cs=1;
for(i=17;i>0;i--) //延时17us后读出数据。
_nop_();
return(temp) ;
}
//数据扩大1000倍,为了方便读出
void date_conversation(void)
{
uchar AD_Data;
AD_Data=tlc549_qudong();
volt=5.0/256*AD_Data*1000;
}
//数据转化成数码管显示的数字。
void main()
{
while(1)
{
//P2=0X00;
date_conversation();
P2=0x04;
P0=table_d[volt/100];
delay(10);
P2=0x02;
P0=table[volt/10%10] ;
delay(10);
P2=0x01;
P0=table[volt%10];
delay(10);
}
}
为什么我在实验板上做的时候,只是一个值而已,我旋转AD上面的那个按钮的时候,值也不会改变。
|
|