
LCD点阵12864画温度曲线默认分类 2007-08-17 18:54:58 阅读548 评论3 字号:大中小 订阅
#include<reg51h>
#include"LCD12864h"
#include"zimoh"
#include"LCD1602h"
void hua_zuobiao(void);//画坐标
void delay1ms(uint k);//延时间
void TLC2543(void);//2543读数据子函数
void count_ad(void);//1602的显示
uchar code shuzi[]={0x00,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};//0--8
uchar code number[]={"0123456789"};
uchar tab1[]={" wendu=+4999c "};// 9 10 12 13
uchar code tab2[]={" made of suwei "};
unsigned long int ad;
///////////////////TLC2543
sbit clk=P1^3;//时钟
sbit cs=P1^2;//1变0时TLC2543复位
sbit adtain=P1^1;//数据输入
sbit adtaout=P1^0;//数据输出
////////////////
void main(void)
{uchar x,y;//x页 y列
uchar i;
uint j;
uchar wendu=30,dp;//温度//曲线的点
///////////1602
init_1602();
gotoxy(1,0);
for(i=0;i<16;i++)write_LCD_data(tab1[i]);
gotoxy(2,0);
for(i=0;i<16;i++)write_LCD_data(tab2[i]);
///////////////12864LCD
initi_LCD();//
hua_zuobiao();//画坐标图
y=12;//从12列开始
while(1)
{ TLC2543();//2543读数据子函数
count_ad();//lcd1602的更新显示
delay1ms(1);
j++;
if(j>50){j=0;
wendu=ad/100;//取温度的前2位
x=(wendu-1)/8;
x=6-x;
dp=(wendu-1)%8+1;
if(y<64){ set_adr(x,y);
wdata(shuzi[dp],1,0);
}
else { set_adr(x,y-64);
wdata(shuzi[dp],0,1);
}
y++;//列
if(y==128){y=12;//
clear();//清屏
hua_zuobiao();//画坐标图
}
}
}
}
////////////
/i=0;
initi_LCD();
hua_zuobiao();//画坐标
set_adr(3,12);
y=3;c=13;
while(1)
{i++;
c++;
if(i==8){i=0;
y=y-1;
if(y==0)y=7;
temp=0xb8+y;
wcode(temp,1,1);
}
if(c==64) set_adr(temp,0);
if(c>=127)while(1);
if(c>=64) wdata(shuzhi[i],0,1);
else wdata(shuzhi[i],1,0);
delay1ms(100);
}
}/
/////////////
// }
//}
////1602的显示
void count_ad(void)
{uchar i;
uint temp;
temp=ad;
tab1[13]=number[temp%10];temp=temp/10;
tab1[12]=number[temp%10];temp=temp/10;
tab1[10]=number[temp%10];temp=temp/10;
tab1[9]= number[temp%10];
gotoxy(1,0);
for(i=0;i<16;i++)write_LCD_data(tab1[i]);
}
//////////////////////////////////
void TLC2543(void)//2543读数据子函数
{uchar i;//输入数据为0x00//0x10为第一通道
ad=0;
clk=0;
cs=0;
for(i=0;i<12;i++)
{if(adtaout==1)ad=ad|0x01;//读出数据
adtain=0;//写入数据
clk=1;
clk=0;
ad<<=1;//左移一位
}
cs=1;
ad>>=1;//数据存在ad里
ad=(ad1000)/819;//temp=(ad5000)/4095;
}
///////////////////////////
void hua_zuobiao(void)//画坐标
{uchar j;
uint i;
for(j=0;j<8;j++)//页码
{set_adr(j,0);
for(i=1;i<=64;i++){wdata(zuobiao[i+j128],1,0);
wdata(zuobiao[63+i+j128],0,1);
}
}
}
////////////////////////
void delay1ms(uint k)//延时间
{k=k125;
while(--k);
}
////////////
调用子程序
#include<reg51h>
#define _LCD12864_h
#define uchar unsigned char
#define uint unsigned int
void delay(uint k);//延时
void wcode(uchar com,uchar cs1,uchar cs2);//写指令
void wdata(uchar da,uchar cs1,uchar cs2);//写数据
void set_startline(uchar i);//起始行
void set_adr(uchar x,uchar y);//页值设置,起始列值函数
void clear(void);///clear清屏
void initi_LCD(void);//初始化LCD
//////////单片机与液晶显示的引脚连接/////////
//sbit RST=P2^2;
sbit CS2=P2^0;
sbit CS1=P2^1;
sbit RS=P2^2;//或DI
sbit RW=P2^3;
sbit E=P2^4;
//P0口为数据口
//////////////////////////////
void initi_LCD(void)//初始化LCD
{ wcode(0x3f,1,1);//显示开//0x3e关
set_startline(0);//起始行第0行
clear();//清屏
}
///////////////////////
void delay (uint k)//延时
{
while(k--);
}
////////复位///////////
/void reset()
{
RST=0;
delay(200);
RST=1;
delay(200);
}
/
////////write code写指令///////
void wcode(uchar com,uchar cs1,uchar cs2)//写指令
{
CS1=cs1;
CS2=cs2;
RW=0;
RS=0;
P0=com;
E=0;
delay(10);
E=1;
delay(10);
E=0;
}
/////////write data写数据///////////////
void wdata(uchar da,uchar cs1,uchar cs2)//写数据
{
CS1=cs1;
CS2=cs2;
RW=0;
RS=1;
P0=da;
E=0;
delay(10);
E=1;
delay(10);
E=0;
}
////////////set start设置起始行/////////////
void set_startline(uchar i)//起始行。11A5A4A3A2A1A0 共有64行
{ //液晶显示器的最底层为第0行
i=0xc0+i;//此算法为把最顶层做为第一层
wcode(i,1,1);
}
///////////////////////////////
void set_adr(uchar x,uchar y)//页值设置,起始列值函数
{
x=x+0xb8;//行//页地址设置。10111A2A1A0 DDRAM的8行为一页,A0~A2为页码,LCD为64行8页
y=y+0x40;//列地址设置。01A5A4A3A2A1A0 两半屏分别有64列,A0~A5送入列地址计数器,
//作为列(Y)地址指针。每读写一次其自动加一,指向下一列DDRAM单元
wcode(x,1,1);
wcode(y,1,1);
}
///////////clear清屏///////////////
void clear(void)///clear清屏
{
uchar i,loop;
for(i=0;i<8;i++)///循环页写0/////////
{
set_adr(i,0);//页码//行
for(loop=0;loop<64;loop++)wdata(0x00,1,1);//列//左右屏幕同时写//
}
}
调用子程序
#include<reg51h>
#define _zimo_h
#define uchar unsigned char
#define uint unsigned int/////////////////////////////////////////////////////////////////////////
// 汉字字模表 //
// 汉字库: 宋体16dot 纵向取模下高位,数据排列:从左到右从上到下 //
//字节倒置
uchar code zuobiao[]={
/-- 调入了一幅图像:C:\Documents and Settings\Administrator\桌面\温度坐标bmp --/
/-- 宽度x高度=128x64 --/
0x00,0x00,0x00,0x70,0x50,0xD0,0x00,0xF0,0x10,0xF0,0x00,0xFF,0x40,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xC1,0x01,0xC1,0x00,0xC1,0x41,0xC1,0x00,0xFF,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x01,0x01,0x07,0x00,0x07,0x04,0x07,0x00,0xFF,0x01,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x15,0x15,0x1F,0x00,0x1F,0x11,0x1F,0x00,0xFF,0x04,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x74,0x54,0x5C,0x00,0x7C,0x44,0x7C,0x00,0xFF,0x10,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0xF0,0x10,0xF0,0x00,0xFF,0x40,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x01,0x01,0x00,0xFF,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x44,0x7C,0x00,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x7D,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x75,0x55,
0x5D,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x55,0x55,0x7D,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x1D,0x11,0x7D,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x5D,0x55,0x75,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x7D,0x55,0x75,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x05,0x05,0x7D,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x7D,0x55,0x7D,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x1D,0x15,0x7D,0x01,0x01,0x01,0x01,0x01,0x01,0x7D,0x01,0x7D,
0x45,0x7D,0x01,0x01,0x01,0x01,0x01,0x01,0x7D,0x01,0x01,0x7D,0x01,0x01,0x01,0x01,
};
调用子程序
#include <reg51h>
#define _lcd1602_h
#define uint unsigned int
#define uchar unsigned char
void delayus(uint k);//延时
void write_LCD_command(uchar command);//命令写入LCD
void write_LCD_data(uchar LCDdata);//数据写入LCD
void init_1602(void);//初始化LCD
void clear_LCD();//LCD清屏
void gotoxy(uchar x,uchar y);//光标在x行y列
sbit rs=P2^5;//指令寄存器的选择
sbit rw=P2^6;//数据写入/读出lcd
sbit en=P2^7;//始能端
//////////////////////////////////////////////////1
void write_LCD_command(uchar command)//命令写入LCD
{
rw=0;//写入LCM
rs=0;//指令寄存器
en=1;//始能端
P3=command;//写命令
delayus(20);//延时4020us
en=0;//关闭始能端
rw=1;//读取LCM
}
void write_LCD_data(uchar LCDdata)//数据写入LCD//2
{
rw=0;
rs=1;
en=1;
P3=LCDdata;
delayus(1);//40us
en=0;
rw=1;
}
void init_1602(void)//初始化LCD/////3
{
write_LCD_command(0x38);// 0x38 单行显示//8位传输
write_LCD_command(0x0c);// 0x0C 屏幕开启//光标不出现//不闪烁
//write_LCD_command(0x0e);// 0x0C 屏幕开启//光标出现//不闪烁
//write_LCD_command(0x0f);// 0x0C 屏幕开启//光标出现 //闪烁
//write_LCD_command(0x0d);// 0x0C 屏幕开启//光标不出现 //闪烁
}
void clear_LCD()//LCD清屏4
{
write_LCD_command(0x01);//0x01 LCD清屏
write_LCD_command(0x02);//0x02 光标回到左上角
}
void gotoxy(uchar x,uchar y)//光标在x行y列7
{
if(x==1)
write_LCD_command(128+y);//128=0b1000,0000
else
write_LCD_command(192+y);//192=0b1100,0000
}
void delayus(uint k)//延时8
{
k=10k;//40us
while(k--);
}
write_cmd(0x93); //这行是显示的位置吧
write_date(0x30+t1);//显示t1值,因为t1是数值,液晶显示器显示的是字符,所以要加上+0x30转换
write_date(0x30+t2);//显示t2
write_date(''); //显示小数点
write_date(0x30+t3);//显示t3的值
write_date(0xA1); //显示度的符号o
write_date(0xE6); //显示C
12864有左半屏和右半屏之分,它们是两个独立的6464屏幕组合到一起的;
按汉字结构来定义,1个汉字1616;,半个屏可以显示44个汉字;
按屏幕的物理结构来定义,半个屏幕分64行64列;
由于屏幕每次只能接收8bit的数据,又将屏幕划分8行8列;这里划分行也称为页(page 0-page 7),起始页地址为0xB8 ;这里划分的列,第一列地址为0x40;
输入汉字代码之前,需要定位;
page=page<<1;等号右边的page(按汉字来划分的) 取值0,1,2,3;当左移一位相对,等号左边的page(屏幕物理结构上)取值:0,2,4,6,这几个数正是你要选择输入汉字代码的行的起始位置;
row=row8 ,等号右边的row的 取值应该0,2,4,6;必须为8的整数倍,是屏幕的物理结构规定的。你可以尝试将row的值为8,系统会默认回到0列,进行定位;
定位完成后,再进行汉字代码的输入,它输入都是有规律。
具体你还是要看12864的datasheet。
clear_GDROM();这是个清屏的子函数吗,前面有的呀。
clear_GDROM(); 这显示出了,
下面还清屏当然就没有了,在显示前已经有一行了,clear_GDROM();
为什么显示后还要清屏呢?
7920只能驱动32路,12864为两个7920控制,你想一个一个的卷动必须设置CS1,CS2,加入CS1上屏,CS2,下屏,你先控制CS1=0,CS2=1;然后COM地址加一,32以后,CS2=0,CS1=1; 然后COM地址加一就搞定
单片机用12864显示16X32字体的方法是图像取模:
1、首先先去下载取模软件,下载完成点击打开取模软件。
2、在菜单栏点击模式然后选择图形模式。
3、现在就可以点击打开文件,要注意的是取模之前要把转换为bmp格式,选择点击打开进行添加。
4、现在点击选项,进行参数设置。
5、根据下图进行设置字模格式,设置完成点击确定。
6、点击下面的生成字模就可以获得代码了,点击将代码复制到程序,就可以了。
以上就是关于谁能给我12864液晶显示温度的程序流程全部的内容,包括:谁能给我12864液晶显示温度的程序流程、我在写一个用12864显示DS18B20温度的程序,这几行不明白 ,求指教啊!、一个关于12864的显示问题,程序如下其中页左移1位和行*8是什么意思啊,看不懂,账号没什么悬赏分意思意思等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)