专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
51单片机
单片机交直流电压表
2019-07-15 11:19
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
10064
10
1138
本帖最后由 浪迹天涯AS 于 2017-4-16 19:19 编辑
现在我想把它的lcd显示值扩大5倍 我的程序现在用这时可以显示的 但是只要一用keil编译 即使什么都不改只是重新编译 也用不了 lcd就变成0.000V 调节电压没用 求大神帮忙看一下是什么问题 怎么扩大5倍显示现在是1-5V 改成1-25V
求大神帮忙看看是哪 里出了问题 万分感谢!!!
直交流电压表仿真.zip
下载积分: 积分 -1 分
158.61 KB, 下载次数: 15, 下载积分: 积分 -1 分
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
10条回答
wulinwl
2019-07-16 02:11
你把#include "lcd1602.c"去掉,再把《 lcd1602.c》文件里内容全部复制到《测电压.c》文件中,即可用keil编译。文件如下:
#include "reg51.h"
//#include "lcd1602.c"
#define DBPort P0 //LCD数据端口
sbit LcdRs = P2^5;
sbit LcdRw = P2^6;
sbit LcdEn = P2^7;
sbit Lcdbf = P0^7; //LCD忙标志 Busy Flag
sbit start=P2^0;
sbit stop=P2^2;
sbit OE=P2^1;
sbit clk=P2^4;
sbit key=P3^0;
void delay(unsigned int t); //延时
void LCD_Wait(void); //读忙状态
void LCD_Write(bit style, unsigned char input); //写数据1/命令0
void LCD_Initial(void); //初始化LCD
void GotoXY(unsigned char x, unsigned char y); //移动光标到指定位置
void Print(unsigned char *str); //指定坐标输出字符串
unsigned char flag;
void timerint()
{
TMOD=0x11;//设置定时器0为工作方式1(为十六位计数)
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
}
void main()
{
int temp,a,b,temp1;
int sum = 0;
LCD_Initial();
timerint();
GotoXY(5,0);
Print(" The Vol Is:");
while(1)
{
int k;
OE=0;
start=0;
start=1;
start=0;//下降沿,开始转换
while(stop==0)//查询是否转换结束
{
k++;
if(k>200)
break;
}
OE=1;
if(flag==0)
{
temp=P1;
a = temp*(1000/51)*1.028;//1.032是修正系数
temp=0;
GotoXY(1,1);
Print("DC");
GotoXY(4,1);
LCD_Write(1,a/1000+0x30);
Print(".");
LCD_Write(1,a%1000/100+'0');
LCD_Write(1,a%100/10+'0');
LCD_Write(1,a%10+'0');
Print("V");
}
if(flag==1)
{
temp1=P1;
b = temp1*(1000/51);
if(b>1.5) b=b*1.491;
if(b>1.0&&b<1.5) b=b*2;
GotoXY(1,1);
Print("AC");
GotoXY(4,1);
LCD_Write(1,b/1000+0x30);
Print(".");
LCD_Write(1,b%1000/100+'0');
LCD_Write(1,b%100/10+'0');
LCD_Write(1,b%10+'0');
Print("V");
}
OE=0;
delay(1000);
}
}
void time0() interrupt 1
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
clk=~clk;
if(key==0)
{
flag++;
while(key==0);
if(flag==2) flag=0;
}
}
/*******************************************************************/
//端口定义
//#define DBPort P0 //LCD数据端口
//sbit LcdRs = P2^5;
//sbit LcdRw = P2^6;
//sbit LcdEn = P2^7;
//sbit Lcdbf = P0^7; //LCD忙标志 Busy Flag
void delay(unsigned int t) //延时
{
while(t--);
}
void LCD_Wait(void) //读忙状态
{
LcdRs=0;
LcdRw=1;
LcdEn=1;delay(10);LcdEn=0; //下降沿
while(Lcdbf)
{
LcdEn=0;LcdEn=1; //仿真才需要此语句,实际硬件中不需要
}
}
void LCD_Write(bit style, unsigned char input) //写数据1/命令0
{
LcdRs=style;
LcdRw=0;
DBPort=input;
LcdEn=1;delay(10);LcdEn=0;
LCD_Wait();
}
void LCD_Initial(void) //初始化LCD
{
LCD_Write(0,0x38); //8位数据端口,2行显示,5*7点阵
delay(300);
LCD_Write(0,0x0c); //显示模式
LCD_Write(0,0x01); //清屏
LCD_Write(0,0x06); //输入模式
}
void GotoXY(unsigned char x, unsigned char y) //移动光标到指定位置
{
if(y==0) LCD_Write(0,0x80|x);
if(y==1) LCD_Write(0,0xc0|x);
}
void Print(unsigned char *str) //指定坐标输出字符串
{
while(*str) LCD_Write(1,*str++);
}
加载中...
查看其它10个回答
一周热门
更多
>
相关问题
【东软载波ESF0654 PDS开发板活动】开箱
1 个回答
东软载波ESF0654 PDS开发板外部中断
1 个回答
东软载波ESF0654 PDS开发板高级控制定时器AD16C4T
1 个回答
用串口调试助手为什么只能在hex模式接收发送而在文本模式不行
9 个回答
触摸芯片SC02B/SC04B在地砖灯的设计方案
1 个回答
相关文章
51单片机与蓝牙模块连接
0个评论
51单片机的硬件结构
0个评论
基于51单片机的无线遥控器制作
0个评论
51单片机 AD转换
0个评论
51单片机数码管递增显示
0个评论
如何实现对单片机寄存器的访问
0个评论
基于51单片机的指纹密码锁
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
51单片机
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
#include "reg51.h"
//#include "lcd1602.c"
#define DBPort P0 //LCD数据端口
sbit LcdRs = P2^5;
sbit LcdRw = P2^6;
sbit LcdEn = P2^7;
sbit Lcdbf = P0^7; //LCD忙标志 Busy Flag
sbit start=P2^0;
sbit stop=P2^2;
sbit OE=P2^1;
sbit clk=P2^4;
sbit key=P3^0;
void delay(unsigned int t); //延时
void LCD_Wait(void); //读忙状态
void LCD_Write(bit style, unsigned char input); //写数据1/命令0
void LCD_Initial(void); //初始化LCD
void GotoXY(unsigned char x, unsigned char y); //移动光标到指定位置
void Print(unsigned char *str); //指定坐标输出字符串
unsigned char flag;
void timerint()
{
TMOD=0x11;//设置定时器0为工作方式1(为十六位计数)
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
}
void main()
{
int temp,a,b,temp1;
int sum = 0;
LCD_Initial();
timerint();
GotoXY(5,0);
Print(" The Vol Is:");
while(1)
{
int k;
OE=0;
start=0;
start=1;
start=0;//下降沿,开始转换
while(stop==0)//查询是否转换结束
{
k++;
if(k>200)
break;
}
OE=1;
if(flag==0)
{
temp=P1;
a = temp*(1000/51)*1.028;//1.032是修正系数
temp=0;
GotoXY(1,1);
Print("DC");
GotoXY(4,1);
LCD_Write(1,a/1000+0x30);
Print(".");
LCD_Write(1,a%1000/100+'0');
LCD_Write(1,a%100/10+'0');
LCD_Write(1,a%10+'0');
Print("V");
}
if(flag==1)
{
temp1=P1;
b = temp1*(1000/51);
if(b>1.5) b=b*1.491;
if(b>1.0&&b<1.5) b=b*2;
GotoXY(1,1);
Print("AC");
GotoXY(4,1);
LCD_Write(1,b/1000+0x30);
Print(".");
LCD_Write(1,b%1000/100+'0');
LCD_Write(1,b%100/10+'0');
LCD_Write(1,b%10+'0');
Print("V");
}
OE=0;
delay(1000);
}
}
void time0() interrupt 1
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
clk=~clk;
if(key==0)
{
flag++;
while(key==0);
if(flag==2) flag=0;
}
}
/*******************************************************************/
//端口定义
//#define DBPort P0 //LCD数据端口
//sbit LcdRs = P2^5;
//sbit LcdRw = P2^6;
//sbit LcdEn = P2^7;
//sbit Lcdbf = P0^7; //LCD忙标志 Busy Flag
void delay(unsigned int t) //延时
{
while(t--);
}
void LCD_Wait(void) //读忙状态
{
LcdRs=0;
LcdRw=1;
LcdEn=1;delay(10);LcdEn=0; //下降沿
while(Lcdbf)
{
LcdEn=0;LcdEn=1; //仿真才需要此语句,实际硬件中不需要
}
}
void LCD_Write(bit style, unsigned char input) //写数据1/命令0
{
LcdRs=style;
LcdRw=0;
DBPort=input;
LcdEn=1;delay(10);LcdEn=0;
LCD_Wait();
}
void LCD_Initial(void) //初始化LCD
{
LCD_Write(0,0x38); //8位数据端口,2行显示,5*7点阵
delay(300);
LCD_Write(0,0x0c); //显示模式
LCD_Write(0,0x01); //清屏
LCD_Write(0,0x06); //输入模式
}
void GotoXY(unsigned char x, unsigned char y) //移动光标到指定位置
{
if(y==0) LCD_Write(0,0x80|x);
if(y==1) LCD_Write(0,0xc0|x);
}
void Print(unsigned char *str) //指定坐标输出字符串
{
while(*str) LCD_Write(1,*str++);
}
一周热门 更多>