⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad.c

📁 利用c8051f020进行温度采集
💻 C
📖 第 1 页 / 共 2 页
字号:
code unsigned char CGRAM[]=
{	
/*--  文字:  温  --*/
0x40,0x27,0x24,0x07,0x94,0x54,0x17,0x20,0x2F,0xC9,0x49,0x49,0x49,0x49,0x5F,0x40, //80
0x00,0xF0,0x10,0xF0,0x10,0x10,0xF0,0x00,0xFC,0x24,0x24,0x24,0x24,0x24,0xFE,0x00,
/*--  文字:  度  --*/															 
0x01,0x00,0x3F,0x22,0x22,0x2F,0x22,0x23,0x20,0x27,0x22,0x21,0x20,0x41,0x46,0x98, //84
0x00,0x80,0xFE,0x20,0x20,0xFC,0x20,0xE0,0x00,0xF8,0x10,0x20,0xC0,0x30,0x0E,0x04,
/*--  文字:  显  --*/
0x00,0x1F,0x10,0x1F,0x10,0x1F,0x04,0x04,0x44,0x24,0x14,0x14,0x04,0xFF,0x00,0x00, //88
0x00,0xF0,0x10,0xF0,0x10,0xF0,0x40,0x40,0x48,0x48,0x50,0x60,0x40,0xFE,0x00,0x00,
/*--  文字:  示  --*/
0x00,0x1F,0x00,0x00,0x00,0x7F,0x01,0x01,0x11,0x11,0x21,0x41,0x81,0x01,0x05,0x02, //8c
0x00,0xF8,0x00,0x00,0x00,0xFE,0x00,0x00,0x20,0x10,0x08,0x0C,0x04,0x00,0x00,0x00,
/*--  符号:  :   --*/
0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00, //90

/*--  数字:  0  --*/
0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00, //92
/*--  数字:  1  --*/
0x00,0x00,0x00,0x10,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x7C,0x00,0x00, //94
/*--  数字:  2  --*/
0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x04,0x04,0x08,0x10,0x20,0x42,0x7E,0x00,0x00, //96
/*--  数字:  3  --*/
0x00,0x00,0x00,0x3C,0x42,0x42,0x04,0x18,0x04,0x02,0x02,0x42,0x44,0x38,0x00,0x00, //98
/*--  数字:  4  --*/
0x00,0x00,0x00,0x04,0x0C,0x14,0x24,0x24,0x44,0x44,0x7E,0x04,0x04,0x1E,0x00,0x00, //9a
/*--  数字:  5  --*/
0x00,0x00,0x00,0x7E,0x40,0x40,0x40,0x58,0x64,0x02,0x02,0x42,0x44,0x38,0x00,0x00, //9c
/*--  数字:  6  --*/
0x00,0x00,0x00,0x1C,0x24,0x40,0x40,0x58,0x64,0x42,0x42,0x42,0x24,0x18,0x00,0x00, //9e
/*--  数字:  7  --*/
0x00,0x00,0x00,0x7E,0x44,0x44,0x08,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00, //a0
/*--  数字:  8  --*/
0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x42,0x3C,0x00,0x00, //a2
/*--  数字:  9  --*/
0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x26,0x1A,0x02,0x02,0x24,0x38,0x00,0x00, //a4
/*--  符号: .  --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00, //a6				
};
/******************************************************************** 
                        系统初始化函数
********************************************************************/
void UART_Init()
{
    SCON0     = 0x50;   //使能UART0并允许接收
}
void Timer_Init()   
                 
{
    CKCON     = 0x10;  //T1使用系统时钟并产生9600的波特率用与UART0  
    TCON      = 0x40;
    TMOD      = 0x20;
    TH1       = 0xB8;  
          			  
    TMR3CN    = 0x04;  //使用系统时钟12分频做为定时器3的时钟源(22.1184M)
    TMR3RLL   = 0xc9;  //用定时器3做为AD0的启动转换标志每100us启动一次采集,
    TMR3RLH   = 0xFF; 
    TMR3L     = 0xc9;
    TMR3H     = 0xFF;
}
void ADC_Init()
{
    ADC0CF    = 0x40;   //ADC0为定时器3益处采集方式,时钟频率为2.5M,
    ADC0CN    = 0x04;   //增益为1,数据为右对齐方式                    
    AMX0SL    = 0X00;       
}
void Voltage_reference_Init()
{
    REF0CN    = 0x03;    //ADC0的参考电压来自内部增益,典型值为2.43V,VDD输入3V
}
void Port_IO_Init()      //IO口初始化
                   
{
    P0MDOUT   = 0x01;     //P0.0,P0.1做为UART0的通信引脚,其中TX0为推拉方式
    P3MDOUT   = 0x07;     //P3.0为CD选择通道设为推来方式
                          //P3.1为读标志位设为推拉方式
                          //P3.2为写标志位设置为推拉方式
    P74OUT    = 0x03;     //P4为液晶数据线设为推拉方式
    XBR0      = 0x04;     //设置UART0使能
    XBR2      = 0x40;	  //允许功能选择开关
}
void Oscillator_Init()    //使用外部晶振22.1184M
{
    int i = 0;
    OSCXCN    = 0x67;
    for (i = 0; i < 3000; i++);   //Wait 1ms for initialization
    while ((OSCXCN & 0x80) == 0);
    OSCICN    = 0x08;
}
void Interrupts_Init()
{
  EIE2 = 0x02;   //允许ADC0中断   
}
void Init_Device(void)
{
    Timer_Init();
    UART_Init();
    ADC_Init();
    Voltage_reference_Init();   //初始化主程序
    Port_IO_Init();
    Oscillator_Init();
    Interrupts_Init();
}
/************************************************************************
                          子函数定义
************************************************************************/
void delay_us(int timer)//us沿时
{  
  timer*=20;//时钟周期调整
  for(;timer>0;timer--)
  _nop_();
}
void delay_ms(int i)//ms沿时
{ 
  for(;i>0;i--)
  delay_us(1000);
}
/****************************************************************************                     
                           ADC0中断处理 
****************************************************************************/
void ADC0_ISR(void) interrupt 15  
{
  ADC0CN&=0xdf;     
  ADC0_data[ADC0_data_n] = ADC0;
  ADC0_data_n++;
  AMX0SL = 0x01;
  if(ADC0_data_n==100)
   { 
     m=1;
   }
}
/****************************************************************************
    调用switch语句
*****************************************************************************/
unsigned char useswitch(unsigned int m)
{
  switch(m)
   {
   	 case 0:return(0x92);break;
	 case 1:return(0x94);break;
	 case 2:return(0x96);break;
	 case 3:return(0x98);break;
	 case 4:return(0x9a);break;
     case 5:return(0x9c);break;
     case 6:return(0x9e);break;
     case 7:return(0xa0);break;
     case 8:return(0xa2);break;
     case 9:return(0xa4);break;
   }
}
/***************************************************************************
    显示整数部分
****************************************************************************/
void showzs(unsigned int zs)
{
  unsigned int i=9;
  unsigned int a,b,c; 
  unsigned char CGcode; 
  unsigned char chinacode[1];                   
  a=zs/100;
  CGcode=useswitch(a);
  chinacode[0]=CGcode;
  LCD_Dis_Char(i++,0,chinacode,1);
  b=(zs-a*100)/10;
  CGcode=useswitch(b);
  chinacode[0]=CGcode;
  LCD_Dis_Char(i++,0,chinacode,1);
  c=zs-a*100-b*10;
  CGcode=useswitch(c);
  chinacode[0]=CGcode;
  LCD_Dis_Char(i++,0,chinacode,1);
} 
/*****************************************************************************
   显示小数部分
******************************************************************************/
void showxs(unsigned int xs)
{
  unsigned int i=13;
  unsigned int a,b;
  unsigned char CGcode;
  unsigned char chinacode[1];
  a=xs/10;
  CGcode=useswitch(a);
  chinacode[0]=CGcode;
  LCD_Dis_Char(i++,0,chinacode,1);
  b=xs-a*10;
  CGcode=useswitch(b);
  LCD_Dis_Char(i++,0,chinacode,1);
}

/****************************************************************************                             
                        数据采集完处理函数
****************************************************************************/
void Sjcl(void)
{  
   unsigned int i;
   unsigned int x;                          //整数部分
   unsigned int y;                          //小数部分    
   unsigned long data ADC0_dataadd=0;       //采集完毕的累加计算值
   unsigned long data a=0;
   unsigned long data b=0;
   float data U; 
   //float data Temp;  
   code unsigned char  CHINACODE2[]={0xa6};   
   for(i=0;i<=ADC0_data_n;i++)				 //数据处理    
   {
     a=ADC0_data[i];
     ADC0_dataadd=ADC0_dataadd+a*a;
   }
   U=ADC0_dataadd/ADC0_data_n;               //取平均值 
   U=sqrt(U);                                //取平方根值
   U=(U*2.43)/0x0fff;                        //计算实际电压值  
   //Temp=U/2.0*100;						 //电压转换成温度
   delay_ms(10);                             
   x=floor(U);								 //浮点数取整
   showzs(x);								 //显示整数部分
   LCD_Dis_Char(12,0,CHINACODE2,1);          //'.'
   y=(U-x)*100;
   y=floor(y); 					             //浮点数取整
   showxs(y);								 //显示小数部分
   delay_ms(10);
   ADC0_data_n=0;  
}

/****************************************************************************
                              主函数定义开始
*****************************************************************************/
void main(void)
{
    code unsigned char	CHINACODE[]={0x80,0x84,0x88,0x8c};
    code unsigned char  CHINACODE1[]={0x90}; 
    WDTCN=0xde;
    WDTCN=0xad;                     //关看门狗
    Init_Device();
    LCD_T6963_Ini();        		//初始化
	LCD_Fill_All(0x00);     		//全屏清零
	LCD_Mak_Cgr(CGRAM,10);
	LCD_Dis_Chi(0,0,CHINACODE,4);	//‘温度显示’
	LCD_Dis_Char(8,0,CHINACODE1,1);	// ':'
    AD0EN=1;
    delay_ms(5);
    EA=1;
    TI0=1;
    while(1)
    {
      if(m==1)
      {     
         m=0;
         TMR3CN&=0xFB;  //关定时器3
         Sjcl();        //处理数据	
         TMR3CN|=0X04;  //开定时器3
      }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -