给个单片机液晶1602显示汉字“邓肖”的程序

给个单片机液晶1602显示汉字“邓肖”的程序,第1张

1602不能显示中文,因为不带中文字库

但可以自定义字符,用取模软件取模后写入1602再显示出自定义字符或图案

不过实际做起来非常不适合显示汉字,因为点数太少效果太难看

如果LZ非要显示汉字不可,建议使用12864等液晶

这个是经过编译成功的程序,看看什么样:

#include "1602h"

#include "defh"

/端口定义/

#define uchar unsigned char

#define uint unsigned int

unsigned char code String1[] ="The first alarm ";

unsigned char code String2[] ="The second alarm";

unsigned char code String3[] ="The third alarm ";

void main(void)

{

LCD_init();

TMOD |= 0X01;

TH0 = (65535 - 50000) / 256;

TL0 = (65535 - 50000) % 256;

ET0 = 1;

EA = 1;

while(1) {

if(Ctr1 == 0 || Ctr2 == 0 || Ctr3 ==0) {

if(Ctr1 == 0) {

LCD_string(0, String1);

LED = ON;

BEEP = ON;

TR0 = 1;

}

if(Ctr2 == 0) {

LCD_string(0, String2);

LED = ON;

BEEP = ON;

TR0 =1;

}

if(Ctr3 == 0) {

LCD_string(0, String3);

LED = ON;

BEEP = ON;

TR0 = 1;

}

}

}

}

void timer0() interrupt 1

{

uchar tt;

TH0 = (65535 - 50000) / 256;

TL0 = (65535 - 50000) % 256;

tt++;

if(tt == 20) {

tt = 0;

LED = OFF;

BEEP = OFF;

TR0 = 0;

}

}

#include<reg52h>

#define uchar unsigned char

#define uint unsigned int

uchar code table[]'STC89C52RC'!;//这边错了

sbit lcden=P3^4;

sbit lcdrs=P3^5;

sbit dula=P2^6;

sbit wela=P2^7;

uchar num;

void delay(uint z)

{

     uint x,y;

     for(x=z;x>0;x--);

          for(y=110;y>0;y--);

}

void write_com(uchar com)

{

     lcdrs=0;

     P0=com;

     delay(5);

     lcday=1;

     delay(5);

     lcden=0;

}

viod write_data(uchar date)//这个write_data函数只能写一个字节

{

     lcdrs=1;

     P0=date;

     delay(5);

     lcden=1;

     delay(5);

     lcden=0;

}

void init()

{

     dula=0;

     wela=0;

     lcden=0;

     write_com(0x38);

     write_com(0x0c);

     write_com(0x06);

     write_com(0x01);

}

void main();

{

     init();

     write_com(0x80);

     for(num=0;num<11;num++)

     {

          write_data(STC89C52RC);//write_data只能写一个字节,这边错了,还有如果要写单个字节,如果是字母的话,还得加引号

          //如果要写一个字符串,可以另外写个函数

          delay(5);

     }

     while(1)

}

我有 at89s52 的键盘 和1602初始化程序,你可以组装一下,

STC12C5A08AD单片机和at89s52 差不多。

#include<at89x52h>

#include<intrinsh>

sbit d_i=P1^0;

sbit r_w=P1^1;

sbit e=P1^2;

#define uchar unsigned char

#define nop _nop_()

void delay(unsigned int ttt) // 长延时,ttt为延时的mS数

{

unsigned int aaa;

while(ttt--) // 延时约1mS

{

aaa=89;

while(aaa--);

}

}

void wcom(uchar cmd);

void wddr(uchar dat);

void checkbusy();

void lcd_init();

void display();

void main()

{

delay(40);

lcd_init();

while(1){

display();}

}

void lcd_init()

{

delay(15);

wcom(0x01);

delay(5);

wcom(0x38);

delay(5);

wcom(0x38);

delay(10);

wcom(0x0c);

delay(5);

wcom(0x06);

delay(5);

wcom(0x01);

delay(5);

}

void wcom(uchar cmd)

{

checkbusy();

d_i=0;

r_w=0;

e=0;

P0=cmd;

nop;

nop;

nop;

nop;

e=1;

nop;

nop;

nop;

nop;e=0;

}

void wddr (uchar dat)

{

checkbusy();

d_i=1;

r_w=0;

e=0;

P0=dat;

nop;nop;

nop;nop;

e=1;

nop;nop;

nop;nop;

e=0;

}

void checkbusy ()

{ bit result;

d_i=0;

r_w=1;

P0=0xff;

e=0;

nop;nop;

e=1;

nop;

nop;nop;

nop;

do {delay(1);

result = (bit)(P0&0x80);}

while(result!=0);

e=0;}

void display()

{// wcom(0x80);

wddr(0x61);

delay(100);

}

/取键值函数/

uchar keyscan()

{

uchar hang=0x00,lie=0x01,i=0x00;

uchar lcode,hcode;

uchar keynumber=0xff;

P2=0xf0;

if((P2&0xf0)!=0xf0)

{

delay(15); //去抖动

if((P2&0xf0)!=0xf0)

{

hcode=0xfe; //从第一行开始查

while((hcode&0x10)!=0)

{ P2=hcode;

if((P2&0xf0)!=0xf0)

{

lcode=(P2&0xf0)|0x0f;

//nop;nop;nop;nop;

//shortdelay(2);

lcode=(~lcode)>>4;

while(lie!=lcode) //判断在第几列(通过移动到某一位,是否匹配)

{ lie=lie<<1; //变量移动后要赋值

i++;

}

lie=i;

keynumber=hang4+lie;// 键值

//shortdelay(5); //开始程序不健壮,加上延时就可以稳定显示了,现在去掉也没问题

// nop;nop;nop;nop;

return (keynumber);

//break; //当初以为返回值后,不能跳出故加上;现在也可去掉

}

else

{

hcode=(hcode<<1)|0x01;

hang++;//下一次扫描第hang行,行值

}

}

}

}

else return (keynumber);

}

所有人回答的都不对,其实是忘了将1602第5脚rw设置为0了,而郭天祥的板子是直接接地,所以不用设置,但是别的板子却不能照搬了。所以程序应改为

sbit lcdrw=P3^6;

void write_com(uchar com)

{

lcdrs=0;

lcdrw=0;//加这一条

P0=com;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

void write_data(uchar date)

{

lcdrs=1;

lcdrw=0;//加这一条

P0=date;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

以上就是关于给个单片机液晶1602显示汉字“邓肖”的程序全部的内容,包括:给个单片机液晶1602显示汉字“邓肖”的程序、高手指导一下:编写程序单片机报警并且用1602液晶显示。如何调用、怎样在STC89C51单片机上用1602液晶显示字符“STC89C52RC”,求程序代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/10122583.html

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

发表评论

登录后才能评论

评论列表(0条)

保存