谁能给我12864液晶显示温度的程序流程

谁能给我12864液晶显示温度的程序流程,第1张

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是什么意思啊,看不懂,账号没什么悬赏分意思意思等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zz/9306178.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存