📄 ad.c
字号:
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 + -