| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- #include "STC8XXXX.H"
- #include <intrins.h>
- /*
- 延时函数,33.1776mhz,1us
- 参数:延迟时间
- 返回值:无
- */
- void delayus(unsigned int nn)
- {
- unsigned int ii;
- for(ii=0;ii<n;ii++)
- {
- _nop_();
- _nop_();
- _nop_();
- }
- }
- /*
- ADC初始化
- 参数:
- 返回值:
- */
- void adc_init()
- {
- ADCCFG = 0x20;
- ADC_RES = 0;
- ADC_RESL = 0;//清空结果寄存器
- delayus(20);
- }
- /*
- 查询ADC值
- 参数:ADC通道0~14
- 返回值:12位ADC值
- */
- unsigned int get_adc(unsigned int p)
- {
- switch(p)
- {
- case 0 : ADC_CONTR = 0xC0; break;
- case 1 : ADC_CONTR = 0xC1; break;
- case 2 : ADC_CONTR = 0xC2; break;
- case 3 : ADC_CONTR = 0xC3; break;
- case 4 : ADC_CONTR = 0xC4; break;
- case 5 : ADC_CONTR = 0xC5; break;
- case 6 : ADC_CONTR = 0xC6; break;
- case 7 : ADC_CONTR = 0xC7; break;
- case 8 : ADC_CONTR = 0xC8; break;
- case 9 : ADC_CONTR = 0xC9; break;
- case 10: ADC_CONTR = 0XCA; break;
- case 11: ADC_CONTR = 0xCB; break;
- case 12: ADC_CONTR = 0xCC; break;
- case 13: ADC_CONTR = 0xCD; break;
- case 14: ADC_CONTR = 0xCE; break;
- case 15: ADC_CONTR = 0xCF; break;
- }
- delayus(10);
- while(!(ADC_CONTR & 0x20));//等待AD转换完成
- ADC_CONTR &= ~0x20;//关闭AD转换器
- return (ADC_RES * 256 + ADC_RESL);
- }
- /*
- 根据ADC计算温温度
- 参数:ADC值,误差补偿
- 返回值:温度
- */
- unsigned int transform(unsigned int adc,double p1,double p2,double p3,double p4)
- {
- int temp;
- temp = p1*adc*adc*adc+p2*adc*adc+p3*adc+p4;
- return temp;
- }
|