• 大小: 9KB
    文件类型: .c
    金币: 2
    下载: 1 次
    发布日期: 2021-11-24
  • 语言: C/C++
  • 标签:

资源简介

基于单片机的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液晶 
* 输入 : 无
* 输出 : 无
***********************************************************************/

评论

共有 条评论

相关资源