STC15W408AS 運用P1.4引腳進行電壓采集并且進行電壓壓降幾次,串口發送,文本模式
單片機源程序如下:
- #include "STC15F2K60S2.H"
- #include<intrins.h>
- /**********************************************
- 此程序為電壓下降沿采集程序,串口發送電壓及次數,不帶掉電保存
- 采用單片機型號為STC15W408AS 采集引腳為P1.4
- 注:更改引腳需要更改ADC初始化引腳,對應數值需參考P1ASF介紹
- 還需更改ADC_CONTR的值,進行引腳變換頻率的設定。
- **********************************************************/
- void Delay_ms(unsigned int ms) ///////////延時1000MS對應1S
- {
- unsigned int a,b;
- for(a=ms;a>0;)
- {
- for(b=1000;b>0;)
- {
- b=b-1;
- }
- a--;
- }
- }
- void TxChar(unsigned char send)
- {
- TI = 0;
- SBUF =send;
- while(!TI);
- TI = 0;
- }
- void SendFourData(unsigned char send)
- {
- unsigned char a=0,b=0,c=0;
- a= (send/100)+0x30; //對照ASCII表,0的編碼"十進制"48--"十六進制"0x30
- b= (send/10%10)+0x30; //接收方式為文本
- c= (send%10)+0x30;
- TxChar(a);
- TxChar(b);
- TxChar(c);
- }
- void ADC_int() //ADc初始化
- {
- P1ASF=0X10; //吧P1.4設置為ADC引腳
- CLK_DIV=0X20; //ADC結果設置
- ADC_CONTR=0X80; //打開ADC 電源
- ADC_RESL=0; /////ADC高位存儲
- ADC_RES=0; /////ADC低位存儲
- Delay_ms(10);
- }
- unsigned int ADC_Read() //讀ADCCH6
- {
- unsigned int a=0;
- ADC_CONTR = 0X8c; //啟動ADC電源和設置P1.4口為ADC轉換并且540個時鐘轉換一次
- Delay_ms(1);
- while(!(ADC_CONTR&0X10)); //等待轉換完成
- a=ADC_RES*256+ADC_RESL; //獲取ADC結果
- ADC_CONTR&=~0x10;
- return a;
- }
- void UartInit() //9600bps@11.0592MHz
- {
- SCON = 0x50; //8位數據,可變波特率
- AUXR = 0x14;
- AUXR |= 0x01; //串口1選擇定時器2為波特率發生器
- T2L = 65536-(11059200/4/9600); //設定定時初值
- T2H = (65536-(11059200/4/9600))>>8; //設定定時初值
- }
- void Uartsend_1(unsigned char send)
- {
- SBUF=send; //發送數據
- while(!TI); //等待前一幀數據發送完畢
- TI=0; //復位標志位
- }
- void U1_TX_C(char *send)
- {
- unsigned char a=0;
- while(send[a])
- {
- Uartsend_1(send[a]);
- a++;
- }
- }
- void Uartsend_adc(unsigned long send)
- {
- unsigned char a[4],b,c[4];
- int x=0,s=0,j=5;
- send=send*500/1024; //電壓計算
- a[0]=send%10+'0';
- a[1]=send/10%10+'0';
- a[2]='.';
- a[3]=send/100+'0';
- a[3]=a[3]-1;
-
- for(b=4;b>0;b--) //發送
- Uartsend_1(a[b-1]); //
-
- }
- void main()
- { int j=0;
- int x=0,s=0,lj=0;
- unsigned int adcnum;
- unsigned char a=0;
- ADC_int(); //ADc初始化
- UartInit(); //9600bps@11.0592MHz
- while(1)
- {
- U1_TX_C("電壓");
- Uartsend_1(0X22);//' “ '的十六進制數
- adcnum=ADC_Read(); //讀取一次
- a= (adcnum/100)+0x30; //對照ASCII表,0的編碼"十進制"48--"十六進制"0x30
- if(a>56) s=1;
- else if(a<=56) x=1;
- if(s==1&&x==1) //電壓下降沿檢測
- {j++; //下降次數累加
- s=0;}
- Uartsend_adc(adcnum);
- U1_TX_C("V");
- Uartsend_1(0X22); //' “ '的十六進制數
- Uartsend_1(0Xff); //空格
- U1_TX_C("次");
- SendFourData(j);
- x=0;
- if(j>=255)
- {lj++;
- j=0;}
- Uartsend_1(0Xff);
- U1_TX_C("累加");
- SendFourData(lj);
- Uartsend_1(0Xff);
- Uartsend_1(0Xff);
- Uartsend_1(0Xff);
- Uartsend_1(0Xff);
- Uartsend_1(0Xff);
- Uartsend_1(0Xff);
- Uartsend_1(0Xff);
- Uartsend_1(0Xff);
- Delay_ms(500);
- }
- }
復制代碼
所有資料51hei提供下載:
電壓采集次數不帶掉電保存.rar
(45.5 KB, 下載次數: 50)
2018-11-14 11:36 上傳
點擊文件名下載附件
文本模式
|