#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define xiaoshu float
uchar code table[]="Pi:00.00Po:00.00";
uchar code tab1e1[]="P0/Pi:00%";
uchar AD;
uint I,O;
sbit c=P3^0;
sbit b=P3^1;
sbit a=P3^2;
sbit lcdrs=P3^3; //数据/命令选择端
sbit lcden=P3^4; //使能端
sbit EOC=P3^5; // A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)
sbit START=P3^6; // A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0808复位,下降沿启动A/D转换)。
sbit OE=P3^7; //数据输出允许信号,输入,高电平有效。当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。
void delay(uint z) //延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com) //写指令
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar date) //写数据
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init() //lcd初始化
{
uchar num;
write_com(0x38); //设置16*2显示
write_com(0x0c); //开显示
write_com(0x06); //光标右移
write_com(0x01); //清屏
write_com(0x80); //命令先将数据指针定位到第一行第一个字处
for(num=0;num<15;num++)
{
write_data(table[num]);
}
write_com(0x80+0x40); //写第二行 将数据指针定位在第二行
for(num=0;num<12;num++)
{
write_data(table[num]);
}//write_data(table1[num]),运行的时候未定义1出错,但前面已定义
}
void write_sfm(uchar add,uint date) //在lcd第一行显示字符串
{
uchar qian,bai,ge,shi;
qian=date/1000;
date=date%1000;
bai=date/100;
date=date%100;
shi=date/10;
ge=date%10; //取个十百千位上的数字
write_com(0x80+add);
write_data(0x30+qian); //分别显示千位、百位.... (0x30+qian)是将qian位的十进制数转变成ASC码 两者有0x30的偏移
write_data(0x30+bai);
write_data('.');
write_data(0x30+shi);
write_data(0x30+ge);
}
void write_sfml(uchar add,uchar date) //在lcd第二行显示字符串
{
uchar shi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+0x40+add); //定位到第二行
write_data(0x30+shi);
write_data(0x30+ge);
}
void adc() //ADC初始化
{
START=0;
OE=0;
START=1; //上升沿
START=0; //上升沿变下降沿 完成复位
while(EOC==0) //EOC为0 处于转换期间
{
OE=1; //允许数据信号输出
}
AD=P2; //数据转换
OE=0; //数据信号输出关闭
}
void caijishuju1()
{
xiaoshu i;
uint j;
a=1;
b=1;
c=0;
adc();
i=AD*0.0196;
i=i/24;
i=i/0.22;
i=i*12*2;
j=i*100;
I=j;
write_sfm(3,j);
}
void caijishuju2()
{
xiaoshu o;
uint i;
a=0;
b=0;
c=1;
adc();
o=AD*0.0196;
o=o+1.50;
o=(o*o)/8;
i=o*100;
O=i;
write_sfm(11,i);
}
void xiaolvjiaoshuan()
{
xiaoshu n;
uchar N;
n=O/I;
N=n*100;
write_sfm(6,N); //程序里是write_sfm1(6,N)
}
void main()
{
init();
while(1)
{
caijishuju1();
delay(50);
caijishuju2();
delay(50);
xiaolvjiaoshuan();
delay(50);
}
}
Dyingalive
- 粉丝: 103
- 资源: 4803
最新资源
- 上帝视角了解中国地势:全国100+250+500+1000+1500+2000+2500+3000+4000+5000+6000+7000+8000等高线、南北东西分区山峰主峰、平原盆地沙漠等特征区
- 基于滴滴平台数据测算的城市发展环境指数.zip
- 带货云豹直播完美无bug直播带货系统购物直播+带视频教程
- 机械设计新能源汽车换电站总装step全套技术资料100%好用.zip
- 机械设计移动开放式喷砂机sw14全套技术资料100%好用.zip
- IIT BHU 校园道路数据集(4590 张图像)JPG.7z
- 入职90天个人发展指引:从自我分析到职业发展里程碑
- 基于C语言的简单停车场管理系统实现与应用
- 信息安全领域的钓鱼邮件防范技巧与应对措施
- 河南工程学院oj答案河南工程学院ACM程序设计竞赛与OJ基础题目解析及答案(C语言实现)
- Evaluating the Evolution of YOLO (You Only LookOnce) Models: A Comprehensive Benchmark Study of YOLO
- 机械设计牙刷全自动成型包装一体机sw12全套技术资料100%好用.zip
- IT部门网络管理绩效考核体系的构建
- 基于查询的图像外推技术QueryOTR:混合Transformer架构用于无缝图像扩展与外画
- 头盔合规检测的数据集(1K+ 张图像)YOLOv9+JPG+TXT
- 机械设计液晶面板BUFFER设备sw18全套技术资料100%好用.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论2