#include<reg52.h>
#include<intrins.h>
#include "lcdmk.h"
#include "i2c.h"
#include "macro.h"
/**显示程序(在1602下面一行显示)**/
void display();
void display1();
uchar dis_buf,a,x,Flag;
uint Date;
float date1;
uchar num_out[]={0x30,0x2e,0x20,0x20,0x20};
uint num[]={0x30,0x20,0x20,0x20,0x20};
uchar code key_code[]={0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77}; //3*4矩阵键盘,1-12键
uchar code key_code0[]={0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x30,0x2e,0x5a}; //3*4矩阵键盘,显示1-9,0,,.退格0x5a
sbit EN=P2^7; //1602使能控制线
sbit RS=P2^6; //1602数据/指令选择控制线
sbit RW=P2^5; //1602读写控制线
//*****lcd1602驱动******//
/**1602忙状态检测**/
void lcdbusy()
{
do
{
EN=0;
RS=0;
RW=1;
P0=0xff;
EN=1;
_nop_();
_nop_();
_nop_();
_nop_();
}
while(P0&0x80);
EN=0;
}
/**1602写命令函数**/
void lcdwcmd(uchar cmd)
{
lcdbusy();
RS=0;
RW=0;
EN=1;
P0=cmd;
EN=0;
}
/**1602写数据函数**/
void lcdwdata(uchar dat)
{
lcdbusy();
RS=1;
RW=0;
EN=1;
P0=dat;
EN=0;
}
/**LCD数据指针位置程序**/
void lcdpos(bit x, uchar y)
{
if(x)lcdwcmd(y|0xc0); //x=1,第二行显示;x=0,第一行显示 0<=x<16
else lcdwcmd(y|0x80); //数据指针=80+地址码(00H~27H,40H~67H)
}
/**1602初使化**/
void lcdint()
{
lcdwcmd(0x38); //设置LCD为16X2显示,5X7点阵,八位数据接口
lcdwcmd(0x0c); //LCD显示光标移动设置(光标地址指针加1,整屏显示不移动)
lcdwcmd(0x06); //LCD开显示及光标设置(光标不闪烁,不显示"_")
lcdwcmd(0x01); //清除LCD的显示内容
}
/**按键扫描程序**/
void keyscan()
{
uchar scan1,scan2,keycode,j;
//4*3矩阵键盘扫描
P1=0xf0;
scan1=P1;
if(scan1!=0xf0)
{
delayms(10);
scan1=P1;
if(scan1!=0xf0)
{
P1=0xff;
P1=0x0f;
scan2=P1;
keycode=scan1|scan2;
for(j=0;j<12;j++)
{
if(keycode==key_code[j])
{
dis_buf=key_code0[j];
P1=0xf0; //判断是否按键已经按下
while(P1!=0xf0);
}
}
}
else dis_buf=240; // 没有按键按下的时候给dis_buf为240
}
}
/**lcd1602�**/
void lcd1602()
{
float adc,sum=0;
uint ad;
//lcdint();
uchar i,flag1=0,flag2=0,m=0,n=0;
//lcdint();
//init();
while(1)
{
lcdpos(0,0);
lcdwdata('U');
lcdpos(0,1);
lcdwdata('=');
//检测电压
adc=ADC();
ad=adc/255*500;
num_out[0]=ad/100+0x30;
num_out[2]=(ad%100)/10+0x30;
num_out[3]=(ad%100%10)+0x30;
display1();
delayms(100);
//采集5次数据
/*for(i=0;i<5;i++)
{
adc=ADC();
sum+=(adc/255*500);
//delayms(50);
}
ad=sum/5;
num_out[0]=ad/100+0x30;
num_out[2]=(ad%100)/10+0x30;
num_out[3]=(ad%100%10)+0x30;
//num_out[4]=(ad%1000%100%10)+0x30;
display1();
delayms(100);*/
keyscan();
if(dis_buf!=240) // 当有键按下的时候
{
/*if(dis_buf==0x2e) //两次=清屏归零
Flag++;
else
Flag=0;
if(dis_buf==0x5a) //退格功能实现
{
delayms(10);
for(l=0;l<x-2;l++)
{
num[l]=num[l+1];
flag1=1;
}
if(flag1==1) //防止退格完后出现混乱
{
num[l]=0x20;
delayms(10);
lcdpos(1,15-l);
lcdwdata(0x20);
x=x-1;
}
if(x==1) //退格完后显示0
{
num[0]=0x30;
flag2=0;
flag1=0;
}
}
else //除退格外的其他功能键与数字键
{ */
x=x+1;
i=x;
if(x==2&&flag2==0) //一次性使用,消去初始化时数组第一位的0
{
num[0]=0x20;
flag2=1;
}
//i=x;
while(i>1) //运算数的录入
{
num[i-1]=num[i-2];
//if(num[i]==0x20&&num[i-1]==0x30) num[i-1]=0x20; //避免首位是零的整数的出现
if(i-2==0)
{
num[i-2]=dis_buf; //录入新输入的数字
//if(num[i-1]==0x20&&num[i-2]==0x30) num[i-2]=0x20;
break;
}
i--;
}
//}
//计算输入的数据
if(num[3]!=0x20)
{
date1+=(num[3]-0x30)*100;
date1+=(num[1]-0x30)*10;
date1+=(num[0]-0x30);
Date=date1/500*255;
//测试
lcdpos(1,0);
lcdwdata(Date/100+0x30);
lcdpos(1,1);
lcdwdata(Date%100/10+0x30);
lcdpos(1,2);
lcdwdata(Date%100%10+0x30);
DAC(Date);
}
display(); // 每按下一次键更新一次显示
dis_buf=240; // 执行完一次键值后重新给键值240
/*if(Flag==2) //清零功能
{
lcdwcmd(0x01);
lcdpos(1,15);
lcdwdata(0x30); //清零之后显示屏幕0
while(m<8) num[m++]=0x20; //数组初始化
//while(n<16) shuzu[n++]=0; //数组初始化
Flag=0; //标记初始化
} */
}
}
}
/**显示程序(在1602下面一行显示)**/
void display()
{
uchar i=15,j=0;
while(num[j]!=0x20)
{
lcdpos(1,i);
lcdwdata(num[j]);
i--;
j++;
}
}
/**显示程序2(在上面一行显示)**/
void display1()
{
uchar i=2,j=0;
while(num_out[j]!=0x20)
{
lcdpos(0,i);
lcdwdata(num_out[j]);
i++;
j++;
}
}
/**延时处理程序,单位ms**/
void delayms (uint ms)
{
uint i;
while(ms--)
{
//for(i=0;i<112;i++) //11.0592M晶体
for(i=0;i<120;i++) //12M晶体
{;}
}
}
51单片机测电压,输出指定电压
5星 · 超过95%的资源 需积分: 44 45 浏览量
2013-09-20
10:55:28
上传
评论 17
收藏 72KB RAR 举报
迷失坚定
- 粉丝: 1
- 资源: 2
最新资源
- NetOps-py通过sftp替换网络设备启动文件
- STM32单片机FPGA毕设电路原理论文报告任务驱动教学法在单片机课程教学中的应用
- STM32单片机FPGA毕设电路原理论文报告任务驱动法在单片机教学中的应用
- STM32单片机FPGA毕设电路原理论文报告人造金刚石压机智能化压力测控系统设计
- 以某列为依据匹配多项(Excel版)
- STM32单片机FPGA毕设电路原理论文报告人体短臂离心机实验台的显示控制系统
- STM32单片机FPGA毕设电路原理论文报告人工气候室监控系统的环境控制器研究
- STM32单片机FPGA毕设电路原理论文报告染整自动线张力控制系统的设计
- 数据挖掘与机器学习-实验
- 基于Linux系统Nginx的动态网站的LNMP环境源码包
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈