单片机lcd12864(hdg12864l-6) proteus的仿真程序 不知道错在哪里啊

单片机lcd12864(hdg12864l-6) proteus的仿真程序 不知道错在哪里啊,第1张

不知道,你现在的问题是什么,如果是无法正常读取忙信号,建议

1在lcd_read_cmd()中的dat=P2前加入P2=0xff

2将判断忙(lcd_read_cmd()&&0x80)!=0改成lcd_read_cmd==0

//如果只是要话一个点的话简单,这里是个串口程序

#include <reg52h>

#include <intrinsh>

#define uchar unsigned char

#define uint unsigned int

/LCD接口定义/

sbit SID = P1^0; //串行数据

sbit SCLK = P1^1; //串行同步时钟

/汉字地址表/

uchar code addr_tab[]={

0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,//第一行汉字位置

0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,//第二行汉字位置

0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,//第三行汉字位置

0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,//第四行汉字位置

};

/n(ms)延时子程序/

void delayms(uint t) //约延时n(ms)

{

uint i;

while(t--)

{

for(i=0;i<125;i++);

}

}

/串行发送一个字节/

void SendByte(uchar Dbyte)

{

uchar i;

for(i=0;i<8;i++)

{

SCLK = 0;

Dbyte=Dbyte<<1; //左移一位

SID = CY; //移出的位给SID

SCLK = 1;

SCLK = 0;

}

}

/写指令/

void Lcd_WriteCmd(uchar Cbyte )

{

//delayms(1);

SendByte(0xf8); //11111,RW(0),RS(0),0

SendByte(0xf0&Cbyte); //高四位

SendByte(0xf0&Cbyte<<4); //低四位(先执行<<)

}

/写数据/

void Lcd_WriteData(uchar Dbyte )

{

//delayms(1);

SendByte(0xfa); //11111,RW(0),RS(1),0

SendByte(0xf0&Dbyte); //高四位

SendByte(0xf0&Dbyte<<4); //低四位(先执行<<)

}

/初始化LCD/

void Lcd_Init(void)

{

delayms(3);

Lcd_WriteCmd(0x30); //选择基本指令集

delayms(1);

Lcd_WriteCmd(0x30); //选择8bit数据流

delayms(1);

Lcd_WriteCmd(0x0c); //开显示(无游标、不反白)

delayms(1);

Lcd_WriteCmd(0x01); //清除显示,并且设定地址指针为00H

delayms(2);

}

void pic_Disp(uchar x,uchar y) //显示一个点

{

Lcd_WriteCmd(0x34); //切换到扩充指令,

Lcd_WriteCmd(0x34);//关闭图形显示

Lcd_WriteCmd(0x80+y); //行地址

Lcd_WriteCmd(0x80+x); //列地址,如果是下半屏这里多加8

Lcd_WriteData(0); //写数据 D15-D8

Lcd_WriteData(1); //写数据 D7-D0

Lcd_WriteCmd(0x36);//打开图形显示

}

void main()

{

Lcd_Init();

pic_Disp(1,1);

while(1);

}

给你测试了,行可行

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

1 TFT LCD Lighting Inspection 105a

帮助您测试 LCD 屏幕,寻找潜藏的可能亮 or 暗点

downloadpchomenet/system/benchmark/11750html

2 TFT LCD Lighting Inspection Test Program V105a

一个可以帮助您测试 LCD 屏幕的软件。买了液晶屏幕回家

>>

#include<reg51h>

#include<absacch>

#define uchar unsigned char

#define datawr 0x1200 //写数据通道

#define comwr 0x1000 //写控制命令通道

#define datare 0x1300 //读数据通道

#define comre 0x1100 //读忙通道

uchar code disp_data[]={" 浙江大学 " //第一行,第一页

"04级通信工程一班" //第三行

" 宁波理工学院 " //第二行

" 竞赛小组 " //第四行

"128X64液晶显示器" //第一行,第二页

" 测试程序 " //第三行

" 07年07月25日 " //第二行

" Tornado "}; //第四行

void set12864();

void write_command(uchar command);

void write_page(uchar data_add);

void read_page(uchar data_add);

void delays(uchar cont);

void main()

{

while(1)

{

set12864(); //初始化12864

write_page(0); //写入一页数据

read_page(0x30); //读出一页数据到内部RAM

delays(2); //延时2s

write_page(64); //写入下一页数据

delays(2); //延时2s

}

}

//初始化12864子程序

void set12864()

{

write_command(0x30); //功能设定控制字

write_command(0x0c); //显示开关控制字

write_command(0x01); //清除屏幕控制字

write_command(0x06); //进入设定点控制字

}

//写控制命令子程序

void write_command(uchar command)

{

bit flag="1"; //12864空闲标志位

while(flag) //检查12864是否空闲

flag="XBYTE"[comre]&0x80;

XBYTE[comwr]=command; //空闲传送控制字

}

//写一页子程序

void write_page(uchar data_add)

{

bit flag="1"; //12864空闲标志位

uchar num="64"; //64个循环,连续写入32个汉字或是64个西文字符

write_command(0x80);

for(;num>0;num--)

{

while(flag) //检查12864是否空闲

flag="XBYTE"[comre]&0x80;

XBYTE[datawr]=disp_data[data_add++]; //空闲传送数据

}

}

//读一页子程序

void read_page(uchar data_add)

{

bit flag="1"; //12864空闲标志位

uchar num="64"; //64个循环,连续写入32个汉字或是64个西文字符

write_command(0x80);

for(;num>0;num--)

{

while(flag) //检查12864是否空闲

flag="XBYTE"[comre]&0x80;

DBYTE[data_add++]=XBYTE[datare]; //空闲传送数据

}

}

//延时cont秒子程序

void delays(uchar count)

{

unsigned char h,i,j,k;

do

{

for(h=5;h>0;h--)

for(i=4;i>0;i--)

for(j=116;j>0;j--)

for(k=214;k>0;k--);

}while(--count);

}

这是图象显示程序:

#include<reg51h>

#include<absacch>

#define uchar unsigned char

#define uint unsigned int

#define datawr 0x1200 //写数据通道

#define comwr 0x1000 //写控制命令通道

#define datare 0x1300 //读数据通道

#define comre 0x1100 //读忙通道

uchar code disp_data[] = // 数据表

{

0x00,0x01,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,

0x00,0x01,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,

0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,

0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,

0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,0x00,

0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,

0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,

0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0x80,0x00,0x00,0x00,

0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0xFF,0xFF,0xFF,

0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x07,0xFF,0xFF,

0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x0B,0xFF,

0x01,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x1F,

0x01,0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00,

0x01,0xFF,0xFF,0xFF,0xF3,0x79,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00,

0x03,0xFF,0xFF,0xFF,0xE6,0x62,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE1,0x60,0x00,0x68,

0x01,0xFF,0xFF,0xFE,0x00,0x60,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE1,0x00,0x00,0x0E,

0x01,0xFF,0xFF,0xF8,0x00,0x4B,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0,0x8E,0x08,0x79,

0x07,0xFF,0xFF,0xF0,0x00,0x41,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE6,0xC0,0x07,0x61,

0xC3,0xFF,0xFE,0xC0,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xED,0xEF,0x3F,

0x83,0xFF,0xFE,0x60,0x00,0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

0xC0,0xFF,0xFD,0xFC,0x6C,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

0xF0,0x7F,0xF3,0xFF,0xFE,0x60,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

0xFF,0xFF,0xF3,0xFF,0xFF,0x50,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC9,

0xFB,0xFF,0xF1,0xF8,0x8C,0xD8,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFB,0x6F,0xD9,

0xC2,0x3F,0xF8,0x40,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xF6,0xDF,0x1E,0xFF,

0xFF,0x7F,0xFC,0x38,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0x64,0x2F,0x6F,0xFF,

0xFD,0x7B,0xFC,0x1F,0xE0,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0x5F,0x7C,0xEE,0xFF,

0xC7,0xFF,0xBC,0x0F,0xFF,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0xFE,0xEF,0xFF,

0xFF,0xE7,0xDC,0x07,0xE7,0xF8,0x12,0x7F,0xFF,0xFF,0xFF,0xFF,0x47,0xFF,0xFF,0xFF,

0xFF,0xE7,0x80,0x03,0xF4,0x00,0x00,0x5F,0xFF,0xFF,0xFE,0xFE,0xE3,0xFF,0xFF,0xFF,

0xFF,0xFE,0xC0,0x01,0xC0,0x00,0x00,0x1B,0xFF,0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,

0x7F,0xEE,0xC0,0x00,0xC0,0x00,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

0xFE,0x98,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0xEF,0xFF,0xFF,0xFF,0xFF,0xFF,

0x20,0x0E,0x60,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x8F,0xFF,0xFF,0xFF,0xFF,0xFF,

0x05,0x80,0xE0,0x00,0x00,0x00,0x00,0x01,0xFF,0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

0x09,0x80,0xA0,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,

0x85,0x2A,0xC0,0x00,0x00,0x00,0x00,0x01,0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,

0xBF,0xF3,0xC0,0x00,0x00,0x00,0x00,0x00,0xFF,0xF7,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,

0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x01,0xFF,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,

0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0xFF,0xC0,0xFF,0xFF,0xFF,0xFF,0xC0,0x1F,

0xFF,0xFF,0x80,0x00,0x40,0x00,0x00,0x00,0xFF,0x80,0xFF,0xFF,0xFF,0x80,0x07,0xFF,

0xFF,0xFF,0xC0,0x00,0xC0,0x00,0x00,0x01,0xFF,0x01,0xFF,0xFF,0xF8,0x00,0xFF,0xFF,

0xFF,0xFF,0xE0,0x63,0x80,0x00,0x00,0x01,0xFE,0x01,0xFF,0x18,0x00,0x3F,0xFF,0xFF,

0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x01,0xCC,0x01,0xFE,0x00,0x07,0xFF,0xFF,0xFF,

0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x07,0xA0,0x03,0xFC,0x00,0xFF,0xFF,0xFF,0xFF,

0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x05,0xC0,0x03,0xC8,0x00,0x7F,0xFF,0xFF,0xFF,

0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x88,0x0C,0x07,0xFF,0xFF,0xFF,

0xFF,0xFF,0xFC,0x00,0x0C,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0xC0,0x7F,0xFF,0xFF,

0xFF,0xFF,0xF8,0x07,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x0F,0xFF,0xFE,

0xFF,0xFF,0xD0,0x07,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x03,0xFF,0xF8,

0xFF,0xFC,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xC0,

0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0xFF,0xF8,

0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x1F,0xFE,

0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x78,0x02,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,

0xFF,0x00,0x00,0x00,0x00,0x00,0x03,0xF0,0x78,0x00,0x00,0x00,0x00,0x00,0x02,0xFF,

0xFE,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,

0xF0,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,

0xE0,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,

0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x27,

0xC0,0x00,0x00,0x00,0x00,0x00,0x01,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,

0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,

0x80,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01

};

void set12864();

void setxy(uchar x,uchar y);

void write_command(uchar command);

void write_16byte(uint data_add);

void delays(uchar count);

void main()

{

uchar x,y,i;

while(1)

{

y="0x80"; //设置液晶上半部分坐标

x="0x80";

delays(2); //延时2s

set12864(); //初始化12864

delays(2);

for(i=0;i<32;i++) //写入液晶上半图象部分

{ //写入坐标

setxy(x,y);

write_16byte(i16); //连续写入16字节数据

y++; //y轴地址加1

}

y="0x80"; //设置液晶下半部分坐标

x="0x88";

for(i=0;i<32;i++) //写入液晶下半图象部分

{

setxy(x,y); //写入坐标

write_16byte((32+i)16);//连续写入16字节数据

y++; //y轴地址加1

}

write_command(0x34); //写入扩充指令命令

write_command(0x36); //显示图象

}

}

//初始化12864子程序

void set12864()

{

write_command(0x30); //功能设定控制字

write_command(0x0c); //显示开关控制字

write_command(0x01); //清除屏幕控制字

write_command(0x06); //进入设定点控制字

}

//设置绘图坐标

void setxy(uchar x,uchar y)

{

write_command(0x34); //写入扩充指令命令

write_command(y); //写入y轴坐标

write_command(x); //写入x轴坐标

write_command(0x30); //写入基本指令命令

}

//写控制命令子程序

void write_command(uchar command)

{

bit flag="1"; //12864空闲标志位

while(flag) //检查12864是否空闲

flag="XBYTE"[comre]&0x80;

XBYTE[comwr]=command; //空闲传送控制字

}

void write_16byte(uint data_add)

{

bit flag="1"; //12864空闲标志位

uchar num="16"; //16个循环,连续写入16个字节

for(;num>0;num--)

{

while(flag) //检查12864是否空闲

flag="XBYTE"[comre]&0x80;

XBYTE[datawr]=disp_data[data_add++]; //空闲传送数据

}

}

//延时count秒子程序

void delays(uchar count)

{

unsigned char h,i,j,k;

do

{

for(h=5;h>0;h--)

for(i=4;i>0;i--)

for(j=116;j>0;j--)

for(k=214;k>0;k--);

}while(--count);

}

以上就是关于单片机lcd12864(hdg12864l-6) proteus的仿真程序 不知道错在哪里啊全部的内容,包括:单片机lcd12864(hdg12864l-6) proteus的仿真程序 不知道错在哪里啊、求一个12864画点简单程序,和一个画图的简单程序,不要教程 要亲测过可以才行。、我在写一个用12864显示DS18B20温度的程序,这几行不明白 ,求指教啊!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

    保存