⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 51

📁 51单片机应用系统典型模块开发大全
💻
字号:
#include <reg51.h>
#include <absacc.h>
#define uchar   unsigned char
#define uint   	unsigned int
#define ADC0801 XBYTE[0x7FFF]   				//adc0801地址
sbit 	RS		=	P1^5;   					//LCD命令/数据端
sbit 	RW		=	P1^6;  						//LCD读/写端
sbit 	LCDE	=	P1^7;  						//LCD使能端
sbit 	INTR	=	P1^0; 						//adc0801 中断
uchar flag; 									//Busy标志
uchar dis_buf[5];								//显示缓冲区
uchar code dis1[] = {"flow:"};					//第一行显示表头
uchar code dis2[] = {"m3/h"};					//第二行显示表头
uchar code dis[] = {"0123456789."};				//显示代码
//============================================================================= 
//                  函数声明 
//============================================================================= 
void busy(void);								//LCD忙标志判断函数
void dat_wrt(uchar dat);						//写数据子函数
void cmd_wrt(uchar cmd);						//写命令子函数
void init_1602(void);							//1602初始化函数
void lcd_start(uchar start);					//设定显示位置函数
void dat_adj(uchar dat1);						//显示数据调整函数
void disp(uint dat,uchar k);					//显示子函数
void print(uchar *str);							//字符串显示函数
uchar AD_dat(void);								//AD转换函数
uchar dat_change(uchar flowad);					//流量转换函数
void delay1ms(uchar x);							//延时约1ms程序

/***********主程序***************/
void main (void)
{
	uchar ad;
	init_1602();								//初始化液晶
	lcd_start(0x00);							//确定显示起始位置第一行
	print(dis1);								//显示文字flow:
	lcd_start(0x44);							//确定显示起始位置第二行中间
	print(dis2);								//显示文字m3/h
	while(1)
    {
		ad=AD_dat();							//测流量
		ad=dat_change(ad);						//流量转换
		disp(ad,0x41);							//第二行显示流量
		delay1ms(2000);							//延时2s重新采集流量
    }
}

/********************流量转换函数*********************/
//0~255 0~5V 4~20mA  0.4~14m3/h
uchar dat_change(uchar flowad)					//流量转换函数
{
    float flow1;									
	uchar flow;
    flow1=(float)(flowad)*(14-0.4)/255+0.4;		//流量转换
	flow1=flow1*10;								//保留1位小数
	flow=(uchar)(flow1);						//数据类型转换
    return(flow);								//返回流量数据    
}

/********************AD转换函数*********************/
uchar AD_dat(void)								//AD转换函数
{
    uchar flowad;
    ADC0801=0;									//启动AD转换
    while (INTR);								//等待转换结束
    flowad=ADC0801;								//读取转换值
    return(flowad);
}

void delay1ms(uchar x)							//延时约1ms程序
{			   
	uchar  Time,Time1;
	for(Time=0;Time<x;Time++)
		for(Time1=0;Time1<120;Time1++); 
}

/************************LCD忙标志判断函数*******************/
void busy(void)
{
    flag=0x80;									//赋初值 高位为1 禁止
    while (flag&0x80)							//读写操作使能位禁止时等待 继续检测
    {
        P0=0xff;
        RS=0; 									//指向地址计数器
        RW=1; 									//读
        LCDE=1; 								//信号下降沿有效
        flag=P0;								//读状态位 高位为状态
        LCDE=0;
    }
}
/************************写数据子函数************************/
void dat_wrt(uchar dat)
{
    busy();										//检测 读写操作使能吗
    LCDE=0;
    RS=1;										//指向数据寄存器
    RW=0; 										//写
    P0=dat; 									//写数据
    LCDE=1;										//高电平有效
    LCDE=0;
}
/*************************写命令子函数************************/
void cmd_wrt(uchar cmd)
{
    LCDE=0;
    busy();										//检测 读写操作使能吗
    P0=cmd; 									//命令
    RS=0; 										//指向命令计数器
    RW=0; 										//写
    LCDE=1;										//高电平有效
    LCDE=0;
}
/************************1602初始化函数***********************/
void init_1602(void)
{
    cmd_wrt(0x01);								//清屏
    cmd_wrt(0x0c);								//开显示,不显示光标,不闪烁
    cmd_wrt(0x06);								//完成一个字符码传送后,光标左移,显示不发生移位
    cmd_wrt(0x38);								//16×2显示,5×7点阵,8位数据接口
}
/***********************设定显示位置函数**********************/
void lcd_start(uchar start)
{
    cmd_wrt(start|0x80);
}
/***********************显示数据调整函数**********************/
void dat_adj(uchar dat1)
{
   	dis_buf[0]=(dat1%1000)/100;					//十位
	dis_buf[1]=(dat1%100)/10;					//个位
	dis_buf[2]=10;								//小数点
	dis_buf[3]=dat1%10;							//小数点后个位
}
/**************************显示子函数*************************/
void disp(uint dat,uchar k)
{
	uchar j;
	dat_adj(dat);
	lcd_start(k);								//确定显示起始位置
	for(j=0;j<4;j++)							//写显示数据
		dat_wrt(dis[dis_buf[j]]);
}
/************************字符串显示函数***********************/
void print(uchar *str)
{
	while(*str!='\0')							//直到字符串结束
	{
		dat_wrt(*str);							//  
		str++;									//指向下一个字符
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -