完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
显示特殊字符时候(天线形式)其他区域也回出现乱点,不知道怎么解决???
源程序如下(主函数): #include #include "derivative.h" #include "LLD_LCD.h" #include "LLD_KEY.h" void PerphInit() { SOPT1 = 0x00; //关闭看门狗 MCGC1 = 0xB8; MCGC1_IRCLKEN = 1; //开启参考时钟,TRIM微调量没有设置 MCGC2 = 0x36; MCGC3 = 0x00; //PLLS=0 while(!(MCGSC&0x02)); } void tianxian(void)//显示天线形 { LcdCommand(0x36); LcdCommand(0x80);//垂直地址范围 LcdCommand(0x80);//水平地址范围 LcdDataWrite(0x80); LcdCommand(0x81);//垂直地址范围 LcdCommand(0x80);//水平地址范围 LcdDataWrite(0x2a); LcdCommand(0x82);//垂直地址范围 LcdCommand(0x80);//水平地址范围 LcdDataWrite(0x1c); LcdCommand(0x83);//垂直地址范围 LcdCommand(0x80);//水平地址范围 LcdDataWrite(0x08); LcdCommand(0x84);//垂直地址范围 LcdCommand(0x80);//水平地址范围 LcdDataWrite(0x08); LcdCommand(0x85);//垂直地址范围 LcdCommand(0x80);//水平地址范围 LcdDataWrite(0x08); LcdCommand(0x86);//垂直地址范围 LcdCommand(0x80);//水平地址范围 LcdDataWrite(0x08); LcdCommand(0x87);//垂直地址范围 LcdCommand(0x80);//水平地址范围 LcdDataWrite(0x08); LcdCommand(0x88);//垂直地址范围 LcdCommand(0x80);//水平地址范围 LcdDataWrite(0x08); LcdCommand(0x88);//垂直地址范围 LcdCommand(0x70);//水平地址范围 LcdDataWrite(0x07);*/ } //======主函数===== void main(void) { PerphInit(); //外围初始化 LCD_Init(); //液晶... EnableInterrupts; CLR_Screen(); while(1) { uchar key = 0x00; //按键标志符赋初值 do { key = Get_Key(); //读取按键 }while(!key); switch(key) { case UP: CLR_Screen(); DisplayChar(0,0,"发送中..."); break; case DOWN: CLR_Screen(); DisplayChar(0,0,"接收中..."); break; case BACK: tianxian(); //天线字形 Delay(1000); break; default: break; } //end switch }//end while } |
|
相关推荐
1个回答
|
|
要让LCD1602显示自定义字符,就得用到CGRAM指令,CGROM字码表中最左边16字节是自定义CGRAM,实际只有8个字节可用.它的字符码是00H---07H这8个地址,从指令表看可以看到RS=0;RW=0;DB7与DB6分别为01,只有DB0--DB6 六位为地址为,DB6 DB5 DB4都为0代表这8个自定义字符,后3位是8个字模数据的地址;
CGRAM地址: 01000000 0x40 首地址,代表字模数据从第一行开放入 01000001 0x41 从第二行开始,上一行空出来 01000010 0x42 01000011 0x43 01000100 0x44 01000101 0x45 01000110 0x46 01000111 0x47 举例说明:我们向这8个字节写入字模数据,显示个"日"字;如果CGRAM地址设置为0x40:则"日"字的第一行就是从8行最上面开始写,即0x1f就是放到了最上面 如果开始设置CGRAM地址写入0x41:这样的话"日"字的第一行就放在了8行的第二行 //LCD1602显示自定义字符测试程序 //STC89C52RC 12MHz #include #define uint unsigned int #define uchar unsigned char ***it rs=P3^5;//1602数据命令选择线 //***it rw=P3^6;rw=0;rw直接接GND 一直写不读 ***it en=P3^4;//1602使能控制线/*P0口接1602的D0-D7********************/ uchar code table[]={ 0x18,0x18,0x07,0x08,0x08,0x08,0x07,0x00, //℃,代码 0x00 0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00, //一,代码 0x01 0x00,0x00,0x00,0x0e,0x00,0xff,0x00,0x00, //二,代码 0x02 0x00,0x00,0xff,0x00,0x0e,0x00,0xff,0x00, //三,代码 0x03 0x00,0x00,0xff,0xf5,0xfb,0xf1,0xff,0x00, //四,代码 0x04 0x00,0xfe,0x08,0xfe,0x0a,0x0a,0xff,0x00, //五,代码 0x05 0x00,0x04,0x00,0xff,0x00,0x0a,0x11,0x00, //六,代码 0x06 0x00,0x1f,0x11,0x1f,0x11,0x11,0x1f,0x00, //日,代码 0x07 }; void delay(uint t) //延时函数 用延时函数代替忙检测 { uint x,y; for(x=t;x>0;x--) for(y=110;y>0;y--); }/*********************************************/ void lcd_wcom(uchar com) //1602写命令函数 { rs=0; //rw=0; P0=com; delay(5); en=1; en=0; } void lcd_wdat(uchar dat)//1602写数据函数 { rs=1; //rw=0; P0=dat; delay(5); en=1; en=0; }void lcd_init() { lcd_wcom(0x38);//8位数据,5*8字形 lcd_wcom(0x0c);//开启显示屏,关光标,光标不闪烁 lcd_wcom(0x06);//显示地址递增,即写一个数据后,显示位置右移一位 lcd_wcom(0x01);//清屏 } void main() { uchar i; lcd_init(); lcd_wcom(0x40);//设置CGRAM地址,设置为00处,从8行中第一行开始 ①第一步设置CGRAM地址 for(i=0;i<64;i++)//写入数组中数据 ②装入数组里要显示的数据 { lcd_wdat(table); } lcd_wcom(0x80); //设置字符显示位置 第一行第一个位置 ③设置显示地址,然后发送数据 lcd_wdat(0x00); //给1602发送字符数据 显示℃ delay(5); lcd_wcom(0x81); lcd_wdat(0x01); // 显示"一" delay(5); lcd_wcom(0x82); lcd_wdat(0x02); //显示"二" delay(5); lcd_wcom(0x83); lcd_wdat(0x03); //显示"三" delay(5); lcd_wcom(0x84); lcd_wdat(0x04); //显示"四" delay(5); lcd_wcom(0x85); lcd_wdat(0x05); //显示"五" delay(5); lcd_wcom(0x86); lcd_wdat(0x06); //显示"六" delay(5); lcd_wcom(0x87); lcd_wdat(0x07); //显示"日" delay(5); while(1); } |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 06:10 , Processed in 0.659098 second(s), Total 74, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号