資源簡介
基于單片機的C語言水位檢測程序設計,硬件調試成功,可以結合自己的條件修改使用
代碼片段和文件信息
#include ?//頭文件
#include
#include“eeprom52.h“ ?//STC89C52?EEPROM???程序文件
#define?uchar?unsigned?char ?//宏定義
#define?uint?unsigned?int
#define?LCD1602_dat?P0 ????//LCD1602數據口宏定義
sbit?LCD1602_rs=P2^5; //LCD1602控制數據IO口
sbit?LCD1602_rw=P2^6;
sbit?LCD1602_e=P2^7;
sbit?beep=P1^3; //蜂鳴器??IO
sbit?led_1=P1^4; //LED指示燈??IO
sbit?led_2=P1^6;
sbit?key_1=P3^0; //系統控制按鍵IO口
sbit?key_2=P3^1;
sbit?key_3=P3^2;
sbit?alarm_1=P2^0; //控制繼電器IO口
sbit?alarm_2=P2^1;??????????????//控制繼電器2IO口
sbit?ADC0832_CS=P1^2; //ADC0832??控制IO口 ??使能口
sbit?ADC0832_CLK=P1^1; //時鐘IO口
sbit?ADC0832_DIO=P1^0; //數據輸入輸出IO口?
uint?sum; ??//10次AD值的綜合變量
uchar?RHRH_H=15RH_L=5MEstatemscs;??//當前水位,??水位上限,下限,??設置項變量,50ms變量???,cs?為計次數變量????,
bit?beep1zts1; ??//報警標志位,???工作模式標志位,???閃爍標志位
?
unsigned?int??A_D() ????//ADC0832???讀值程序
{
unsigned?char?i;
unsigned?char?dat; ?
ADC0832_CS=1;???//一個轉換周期開始
ADC0832_CLK=0;??//為第一個脈沖作準備
ADC0832_CS=0;??//CS置0,片選有效
ADC0832_DIO=1;????//DIO置1,規定的起始信號??
ADC0832_CLK=1;???//第一個脈沖
ADC0832_CLK=0;???//第一個脈沖的下降沿,此前DIO必須是高電平
ADC0832_DIO=1;???//DIO置1,?通道選擇信號??
ADC0832_CLK=1;???//第二個脈沖,第2、3個脈沖下沉之前,DI必須跟別輸入兩位數據用于選擇通道,這里選通道RH0?
ADC0832_CLK=0;???//第二個脈沖下降沿?
ADC0832_DIO=0;???//DI置0,選擇通道0
ADC0832_CLK=1;????//第三個脈沖
ADC0832_CLK=0;????//第三個脈沖下降沿?
ADC0832_DIO=1;????//第三個脈沖下沉之后,輸入端DIO失去作用,應置1
ADC0832_CLK=1;????//第四個脈沖
for(i=0;i<8;i++)??//高位在前
{
ADC0832_CLK=1;?????????//第四個脈沖
ADC0832_CLK=0;?
dat<<=1;???????//將下面儲存的低位數據向右移
dat|=(unsigned?char)ADC0832_DIO;? ?//將輸出數據DIO通過或運算儲存在dat最低位?
} ?? ????????
ADC0832_CS=1;??????????//片選無效?
return?dat; ?//將讀書的數據返回?????
}
/********************************************************************
*?名稱?:?delay()
*?功能?:?小延時。 ?
*?輸入?:?無
*?輸出?:?無
***********************************************************************/
void?delay(uint?T) ??//延時函數
{
while(T--);
}
/********************************************************************
*?名稱?:?LCD1602_write(uchar?orderdat)
*?功能?:?1602寫如數據函數
*?輸入?:?輸入的命令值
*?輸出?:?無
***********************************************************************/
void?LCD1602_write(uchar?orderdat) ??//1602?一個字節??處理
{
????LCD1602_e=0;
????LCD1602_rs=order;
????LCD1602_dat=dat;
????LCD1602_rw=0;
????LCD1602_e=1;
????delay(1);
????LCD1602_e=0; ?????
}
/********************************************************************
*?名稱?:?LCD1602_writebye(uchar?*prointer)
*?功能?:?1602寫入數據函數??指針式
*?輸入?:?輸入的命令值
*?輸出?:?無
***********************************************************************/
void?LCD1602_writebyte(uchar?*prointer) ???//1602?字符串????處理
{
????while(*prointer!=‘\0‘)
????{
????????LCD1602_write(1*prointer);
????????prointer++;
????}
}
/********************************************************************
*?名稱?:?LCD1602_cls()
*?功能?:?初始化1602液晶?
*?輸入?:?無
*?輸出?:?無
***********************************************************************/
- 上一篇:匈牙利算法指派問題C++代碼
- 下一篇:數值計算中算法實現和實驗報告(C\\C++)
評論
共有 條評論