资源简介
基于单片机的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++)
评论
共有 条评论