之前想自己做露营热水器,折腾过一下,发现灵敏度挺高的,用水杯测试都能明显数值变化。
- #include <reg52.h>
- #include <stdio.h>
- sfr AUXR = 0x8E; //Auxiliary Register T0x12 T1x12 UART_M0x6 BRTR S2SMOD BRTx12 EXTRAM S1BRS 0000,0000
- sfr BRT = 0x9C; //S2 Baud-Rate Timer 0000,0000
-
- sbit SDO = P1^1;
- sbit SCK = P1^0;
- signed int Get_TM7711_Val(void)
- {
- signed int Outval;
- unsigned char i;
- SDO=1; //非 51 类 MCU,略去此行
- SCK=0;
- while(SDO);
-
- i=16;
- do
- {
- SCK=1;
- Outval<<=1;
- SCK=0;
- if(SDO){Outval|=0x01;}
- }while(--i);
-
- i=9;
- do
- {
- SCK=1;
- SCK=0;
- }while(--i);
-
- return(Outval);
- }
- void UartInit(void) //115200bps@11.0592MHz
- {
- PCON &= 0x7F; //波特率不倍速
- SCON = 0x50; //8位数据,可变波特率
- AUXR |= 0x04; //定时器时钟1T模式
- BRT = 0xFD; //设置定时重载值
- AUXR |= 0x01; //串口1使用独立波特率发射器为波特率发生器
- AUXR |= 0x10; //启动独立波特率发射器
- TI=1;
- }
- void Delay1000ms() //@11.0592MHz
- {
- unsigned char i, j, k;
-
- i = 43;
- j = 6;
- k = 203;
- do
- {
- do
- {
- while (--k);
- } while (--j);
- } while (--i);
- }
-
- void main()
- {
- UartInit();
- Delay1000ms();
- printf("System on!\r\n");
- while(1)
- {
- //Delay1000ms();
- //printf("ADC Value is:%d,%X\r\n",res,res);
- printf("$%d;\r\n",Get_TM7711_Val());
- }
- }
复制代码
|