uchar adnum3,adnum2,adnum1; //打算用来显示的数百位、十位和个位,在这里没有进行运算,只是直接的AD结果 sbit led0=P0^5; //连了个发光二极管观察有没有死机。。 uchar code table[]="0123456789"; //显示数据用 uchar code hang1[17]="1234567"; //以下四行为12864初始显示的内容,不重要 uchar code hang2[17]="123456789 "; uchar code hang3[17]="2011-7-10 星期日"; uchar code hang4[17]=" 00:00:00 "; void Timer2_ISR (void) interrupt 5 // T2只是用来溢出的,没程序,清标志位而已 { TF2H = 0; } void Adc_ConvComplete_ISR (void) interrupt 10 //AD中断程序,除了清标志位,只是把数据送到12864第三行 { AD0INT = 0; lcd_pos(3,0); adnum3 = ADC0H/100; adnum2 = (ADC0H%100)/10; adnum1 = (ADC0H%100)%10; disp_only(tableaa[adnum3]); disp_only(tableaa[adnum2]); disp_only(tableaa[adnum1]); } void Port_Init (void) //端口初始化,哪个位要输入,就要设为模拟,并跳过 { P1MDIN = 0x7F; P0MDIN = 0xff; P2MDIN = 0xff; P3MDIN = 0x00; P0MDOUT |= 0xfF; P1MDOUT |= 0x0F; P2MDOUT |= 0x0C; P1SKIP = 0x80; P0SKIP = 0x00; P2SKIP = 0x00; XBR0 = 0x00; XBR1 = 0x40; } void Timer_Init (void) { TMR2CN = 0x00; CKCON &= ~0xF0; TMR2RL = 0; TMR2 = 0xffff; ET2 = 1; TR2 = 1; } [page] void ADC0_Init (void) { REF0CN = 0x0E; // VDD作为基准电压,启用内部温度传感器 AMX0P = 0x10; // 10是P3.0,试过07(1.7)和1E(温度),都没问题 ADC0CF = 0xFC; // 11111,32分频? (*表示分频数-1=31) D2为1,左对齐 AMX0N = 0x1F; // 单端方式 ADC0CN = 0xC2; // T2溢出作为启动信号 EIE1 |= 0x08; // 开中断 } void System_Init (void) { PCA0MD &= ~0x40; OSCICN |= 0x03; Port_Init (); Timer_Init (); ADC0_Init (); } void DelayMS(uint x) { uchar i; while(x--) { for(i=120;i>0;i--); } } void main(void) { System_Init (); lcd_init(); clr_screen(); DelayMS(100); lcd_pos(0,0); disp_chinese(hang1); lcd_pos(1,0); disp_chinese(hang2); lcd_pos(2,0); disp_chinese(hang3); lcd_pos(3,0); disp_chinese(hang4); EA = 1; while (1) { led0=~led0; DelayMS(5500); } }
测试结果:
1、用开发板上的电位器,可以让高位结果在0~255之间变化
2、用温度传感器,室温下显示高位为65,*近笔记本风扇数秒后变成66,说明温度有变化,因为是高位,不明显,也没计算。
3、用全新的南孚电池一节,显示稳定的121。
____________________________________________________________________________
一、修改程序,将10位数字量转换成0~1023显示在屏幕上
*用变位器,可以实现1~1023的变化,1和0之间无法稳定,直接接地也无法显示0
*用一节全新电池,显示485,VDD为3V,偏差不大。
二、再修改程序,将正输入设为温度传感器
*显示263,稍微加热后变成265,仍然觉得不够明显
*263对应电压约770mv,根据公式换算温度是负数。。。。
在笔记本散热口放了一会升到268,还是低!
关键字:C8051F320 AD转换 温度传感器『本文转载自网络,版权归原作者所有,如有侵权请联系删除』