本帖最后由 max116 于 2012-6-20 19:09 编辑
!!已经下载的同学注意
void lcd_ddpos(unsigned char y,unsigned char x)
{ //设定显示位置
unsigned char pos = ((y-1)<<6) + (x-1);
lcd_wcmd(pos | 0x80);
}
这个函数修改了,不好意思,之前没注意运算符优先级。
写这个的时候,看1602 的设置不是正交的,又没办法读出当前设置,比较麻烦,不知有何解决办法?
以下是头文件,源码见附件
#ifndef _LCD_H
#define _LCD_H
#include<reg51.h>
#include <intrins.h>
#include"includ.h" /*延时函数及其他通用函数*/
//清屏
#define lcd_clr() lcd_wcmd(0x1)
//归位
#define lcd_gohome() lcd_wcmd(0x02)
sbit LCD_RS = P2^0;
sbit LCD_RW = P2^1;
sbit LCD_EP = P2^2;
//忙检测
bit lcd_bz();
//写命令
void lcd_wcmd(unsigned char cmd);
//设定RAM 地址后,写入数据
void lcd_wdat(unsigned char dat);
//读数据
unsigned char lcd_rdat();
//读AC 值
unsigned char get_pos();
//DDRAM位置设置
void lcd_ddpos(unsigned char y,unsigned char x);
//CGRAM位置设置
void lcd_cgpos(char pos);
//输入方式,iord = 1则AC 自增,shift = 1则 画面平移
void lcd_hinsert(bit iord, bit shift);
// 开/关 显示。cur = 1则 显示光标,flash = 1 则 光标闪烁
void lcd_on( bit cur, bit flash);
void lcd_off(bit cur, bit flash);
//sorc = 1选择画面,否则为光标。lorr = 1 则右移,否则左移
void lcd_corsmov(bit cors, bit lorr);
//wdata(位宽:8/4,本实现现仅支持8位模式)nline(显示行数:2/1)
// dot (1: 5*10 点阵,0: 5*7 点阵)
void lcd_funset(char wdata, char nline, bit dot);
void lcd_init();
#endif |