标题:
单片机数字电压表 lcd12864液晶显示 带源码和仿真
[打印本页]
作者:
51黑ff
时间:
2016-9-9 20:00
标题:
单片机数字电压表 lcd12864液晶显示 带源码和仿真
用51单片机做的数字电压表仿真,下面是原理图:
0.png
(30.93 KB, 下载次数: 147)
下载附件
2016-9-9 19:58 上传
显示部分是用的lcd12864,。
0.png
(69.5 KB, 下载次数: 148)
下载附件
2016-9-9 20:00 上传
里面含有仿真和程序:
数字电压表.rar
(905.63 KB, 下载次数: 330)
2016-9-9 19:59 上传
点击文件名下载附件
下载积分: 黑币 -5
液晶显示的数字电压表源程序:
#include<reg52.h>
#define uchar unsigned char
#define unit unsigned int
uchar code Hzk[]={
/*-- 文字: 输 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x88,0x68,0x1F,0xC8,0x08,0x10,0xC8,0x54,0x52,0xD1,0x12,0x94,0x08,0xD0,0x10,0x00,
0x09,0x19,0x09,0xFF,0x05,0x00,0xFF,0x12,0x92,0xFF,0x00,0x5F,0x80,0x7F,0x00,0x00,
/*-- 文字: 出 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x7C,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0xFC,0x00,0x00,0x00,
0x00,0x7C,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0xFC,0x00,0x00,
/*-- 文字: 电 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0xF8,0x00,0x00,0x00,
0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0x7F,0x88,0x88,0x88,0x88,0x9F,0x80,0xF0,0x00,
/*-- 文字: 压 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0xFE,0x02,0x82,0x82,0x82,0x82,0xFA,0x82,0x82,0x82,0x82,0x82,0x02,0x00,
0x80,0x60,0x1F,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x44,0x58,0x40,0x40,0x00,
/*-- 文字: 为 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x20,0x22,0x2C,0x20,0x20,0xE0,0x3F,0x20,0x20,0x20,0x20,0xE0,0x00,0x00,0x00,
0x80,0x40,0x20,0x10,0x08,0x06,0x01,0x00,0x01,0x46,0x80,0x40,0x3F,0x00,0x00,0x00,
};
#define LCD_databus P0
uchar num;
long int sum;
sbit EN=P2^0;
sbit RW=P2^1;
sbit RS=P2^2;
sbit CS2=P2^3;
sbit CS1=P2^4;
sbit ST=P3^0;
sbit OE=P3^1;
sbit EOC=P3^2;
sbit CLK=P3^3;
void delay1ms()
{
uchar a,b;
for(b=105;b>0;b--)
for(a=8;a>0;a--);
}
void Read_busy()
{
uchar dat;//状态信息(判断是否忙)
RS=0; // 数据\指令选择,D/I(RS)=“L” ,表示 DB7∽DB0 为显示指令数据
RW=1; //R/W=“H” ,E=“H”数据被读到DB7∽DB0
do{
LCD_databus=0x00;
EN=1; //EN下降沿
dat=LCD_databus;
EN=0;
dat=0x80 & dat; //仅当第7位为0时才可操作(判别busy信号)
}while(!(dat==0x00));
}
void write_LCD_command(uchar value)
{
Read_busy();
RS=0;
RW=0;
LCD_databus=value;
EN=1;
delay1ms();
EN=0;
}
void write_LCD_data(uchar value)
{
Read_busy();
RS=1;
RW=0;
LCD_databus=value;
EN=1;
delay1ms();
EN=0;
}
void Set_page(uchar page)
{
page=0xb8|page;
write_LCD_command(page);
}
void Set_line(uchar startline)
{
startline=0xc0|startline;
write_LCD_command(startline);
}
void Set_lie(uchar lie)
{
lie=lie&0x3f;
lie=0x40|lie;
write_LCD_command(lie);
}
void Setonoff(uchar onoff)
{
onoff=0x3e|onoff;
write_LCD_command(onoff);
}
void SelectScreen(uchar screen)
{
switch(screen)
{
case 0:CS1=0;CS2=0 ;break;
case 1:CS1=0;CS2=1 ;break;
case 2:CS1=1;CS2=0 ;break;
default: break;
}
}
void ClearScreen(uchar screen)
{
uchar i,j;
SelectScreen(screen);
for(i=0;i<8;i++)
{
Set_page(i);
Set_lie(0);
for(j=0;j<64;j++)
{
write_LCD_data(0x00);
}
}
}
void Display(uchar ss,uchar page,uchar lie,uchar number)
{
int i; //选屏参数,page选页参数,column选列参数,number选第几汉字输出
SelectScreen(ss);
lie=lie&0x3f;
Set_page(page); //写上半页
Set_lie(lie); //控制列
for(i=0;i<16;i++) //控制16列的数据输出
{write_LCD_data(Hzk[i+32*number]);} //i+32*number汉字的前16个数据输出
Set_page(page+1); //写下半页
Set_lie(lie); //控制列
for(i=0;i<16;i++) //控制16列的数据输出
{write_LCD_data(Hzk[i+32*number+16]);}//i+32*number+16汉字的后16个数据输出
}
void Init()
{
Read_busy();
SelectScreen(0);
Setonoff(0);
SelectScreen(0);
Setonoff(1);
SelectScreen(0);
ClearScreen(0);
Set_line(0);
}
void Init1()
{
EA=1;
TMOD=0x01;
TH0=(65536-150)/256;
TL0=(65536-150)%256;
ET0=1;
TR0=1;
}
void main()
{
Init();
ClearScreen(0);
Set_line(0);
Init1();
OE=1;
ST=0;
ST=1;
ST=0;//启动转换
while(EOC==0); //等待转换结果
OE=1; //允许输出
sum=P1*1.0/255*5000;
LCD_databus=sum;
Display(0,0,16,LCD_databus);
while(1);
}
void Timer0() interrupt 1
{
TH0=(65536-150)/256;
TL0=(65536-150)%256;
CLK=~CLK;//ADC0809时钟信号
}
复制代码
作者:
ak155101
时间:
2017-3-21 21:16
好厉害
作者:
ak155101
时间:
2017-3-21 21:17
看起来不错
作者:
千山鸟飞绝
时间:
2017-3-24 17:14
可以看看
作者:
wyhwyhwyh
时间:
2017-5-2 20:49
好厉害
作者:
wyhwyhwyh
时间:
2017-5-2 20:50
能用1602做一个吗
作者:
越快乐越堕落
时间:
2017-5-2 21:43
我想知道测量范围
作者:
飞飞鹰
时间:
2017-5-12 09:46
测不准,显示的乱七八糟的,什么东西啊
作者:
XDDZ1013
时间:
2017-5-12 22:51
下载学习
作者:
XDDZ1013
时间:
2017-5-16 20:36
学习学习
作者:
18390093215
时间:
2017-6-6 12:21
学习一下
作者:
jxy17908
时间:
2017-11-16 20:31
非常不错的教程,楼主有心了
作者:
704516392
时间:
2017-12-4 12:21
厉害厉害
作者:
pgdw
时间:
2017-12-12 12:03
感谢楼主无私分享,试试精度如何?
作者:
君若晨风
时间:
2017-12-25 12:02
谢谢楼主,无私奉献
作者:
孤独求败
时间:
2018-1-15 21:16
厉害了,我的哥
作者:
电子酷酷
时间:
2018-4-4 00:35
多谢楼主的 资料好好学习一下
作者:
1039629873
时间:
2018-4-9 11:56
打开后电压无法显示。。。
作者:
zxdgg
时间:
2018-8-30 08:32
感谢分享
作者:
jygz
时间:
2018-8-30 16:26
学习学习,感谢分享
作者:
hai2599
时间:
2018-9-15 23:14
谢谢分享!!找了很久才找到这个!!
作者:
lmn51
时间:
2018-10-6 00:49
厉害厉害
作者:
天宇
时间:
2018-10-23 09:43
楼主,为什么我的不显示多少V?
作者:
闫YZH
时间:
2020-4-30 11:04
厉害了,我的哥
作者:
zcm119
时间:
2021-5-24 19:34
感谢分享!!很好的学习教材!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1