您当前的位置:五五电子网电子知识单片机-工控设备STC单片机(STC12C5A60S2 AD转换示例程序 正文
STC12C5A60S2 AD转换示例程序

STC12C5A60S2 AD转换示例程序

点击数:7559 次   录入时间:03-04 11:43:36   整理:http://www.55dianzi.com   STC单片机(
}
/*-----------------------------------------*/
/*------------写数据到LCD12864-------------*/
void write_dat(uchar dat)
{
uchar i;
uchar i_data;
i_data=0xfa;
CS=1;
for(i=0;i<8;i++)
{
   SID=(bit)(i_data&0x80);
   SCLK=0;
   SCLK=1;
   i_data=i_data<<1;
}
i_data=dat;
i_data=i_data&0xf0;
for(i=0;i<8;i++)
{
  
   SID=(bit)(i_data&0x80);
   SCLK=0;
   SCLK=1;
   i_data=i_data<<1;
}
i_data=dat;
i_data=i_data<<4;
for(i=0;i<8;i++)
{
  
   SID=(bit)(i_data&0x80);
   SCLK=0;
   SCLK=1;
   i_data=i_data<<1;
}
CS=0;
delay1ms(5);
}
/*-----------------------------------------*/
/*--------------显示坐标-------------------*/
void lcd_pos(uchar x,uchar y)      //汉字显示坐标,x为哪一行,y为哪一列
{
uchar pos;
if(x==0)
   x=0x80;         //第一行
else if(x==1)
   x=0x90;         //第二行
else if(x==2)
   x=0x88;         //第三行
else if(x==3)
   x=0x98;         //第四行
pos=x+y;         //显示哪一行(总共有4行)哪一竖(总共有8竖,每16列为1竖)
write_cmd(pos);
}
/*-----------------------------------------*/
/*--------------显示8个汉字-------------------*/
void disp_hanzi(uchar code *chn)
{
   uchar i;
   write_cmd(0x30);    //基本指令操作方式
   for(i=0;i<16;i++)   //16列*8个汉字=128(刚好)
       write_dat(chn[i]);
}
/*-----------------------------------------*/
/*--------------显示数字-------------------*/
void disp_num(uchar code *chn)
{
uchar i;
   write_cmd(0x30);    //基本指令操作方式
   for(i=0;i<2;i++)      //1个数字
       write_dat(chn[i]);
}
void disp_number(uchar num)
{
   
   switch(num)
   {
case 0: disp_num(num0);break;
case 1: disp_num(num1);break;
case 2: disp_num(num2);break;
case 3: disp_num(num3);break;
case 4: disp_num(num4);break;
case 5: disp_num(num5);break;
     case 6: disp_num(num6);break;
case 7: disp_num(num7);break;
case 8: disp_num(num8);break;
case 9: disp_num(num9);break;
default: break;
   }
}
/*----------- --LCD初始化------------------*/
void lcd_init()
{
PSB=0;
write_cmd(0x30);       //基本指令
write_cmd(0x02);       //地址归位
write_cmd(0x06);       //游标右移
write_cmd(0x0c);       //整体显示
write_cmd(0x01);       //清屏
}
/*-----------------------------------------*/
void displayP10()
{
float ad1;
//unsigned int temp1,sh1,ge1,n1,m1;
//uchar code dis2[]={0x01,0x02,0x00};

//ad1=x*7.8125;   //电压修正
uchar i;
ad1=Vin*3.9608;   //具体线性参数由输入电压值调整,该值的测量范围为0-10.00V,5V左右的测量比较准确,
                      //两端的最大误差为70mv,其他一般在40mv以内
temp1=(int)ad1;
sh1=temp1/1000;    //十位
ge1=(temp1%1000)/100;   //个位
n1=((temp1%1000)%100)/10; //小数点后一位
m1=((temp1%1000)%100)%10; //小数点后二位
//write_cmd(0x01); 
write_cmd(0x30);    //基本指令操作方式

lcd_pos(0,0); 
   for(i=0;i<6;i++)        write_dat(ma1[i]);
       
lcd_pos(0,3);
disp_number(sh1);
lcd_pos(0,4);
disp_number(ge1);
lcd_pos(0,5);
for(i=0;i<2;i++)    write_dat(ma2[i]);
lcd_pos(0,6);
disp_number(n1);
lcd_pos(0,7);
disp_number(m1);
/*lcd_pos(2,0);
disp_hanzi(disp1);
lcd_pos(3,0);
disp_hanzi(disp2);*/
}
void main()

     EA=1;
AD_initiate();   //初始化 
ADC_Power_On();     //开AD电源
//init();
lcd_init();
delay(10);
while(1)

     
     caiyangP10();    //测电压
     send_ad_result();
   //Vin=Vin*4007;
   displayP10();
   delay(10);
}
}


上一页  [1] [2] 


本文关键字:程序  STC单片机(单片机-工控设备 - STC单片机(