现在的位置: 首页 > 综合 > 正文

Protues LM4229(LCD 240X128) 文本模式显示

2013年09月04日 ⁄ 综合 ⁄ 共 3269字 ⁄ 字号 评论关闭

使用LM4229中的T6963C控制器的文本模式显示字符串,大部分程序来源于网络。

 


 

//filename:global.h

#define uchar unsigned char

#define uint unsigned int

 


//filename:T6963C.H
#define DATA_PORT P0
//-------------------------------------------
//              管脚定义   
//------------------------------------------
sbit CD=P2^0;     //数据(L)/命令(H)选择
sbit WRIT=P2^1;     //写,低电平有效
sbit CE=P2^2;     //使能,低电平有效
//===========================================
//              函数声明
//-------------------------------------------
void delay_lcd(char);
void write_data(char);
void write_text(char);
void write_com(char);
void clr_lcd(char,char,int);
void lcd_init_graph();
void lcd_init_text();
void text_out(char a);
int asc2lcd(int asc);
//--------------------------------------------
//              写数据函数
//--------------------------------------------
void write_data(char dat){
CD=0;          //数据
CE=0;          //LCD使能
WRIT=0;        //写
DATA_PORT=dat; //把数据送到P口
delay_lcd(1);      //当晶振较高时加延时
WRIT=1;        //关写
CE=1;          //关使能
}
//--------------------------------------------
//              写数据函数
//--------------------------------------------
void write_text(char text){
CD=0;          //数据
CE=0;          //LCD使能
WRIT=0;        //写
DATA_PORT=text; //把数据送到P口
delay_lcd(1);      //当晶振较高时加延时
WRIT=1;        //关写
CE=1;          //关使能
}
//--------------------------------------------
//              写命令函数
//--------------------------------------------
void write_com(char com){
CD=1;    //命令
CE=0;
WRIT=0;
DATA_PORT=com;
delay_lcd(1);    //当晶振较高时加延时
WRIT=1;
CE=1;
}
void clr_lcd(char x,char y,int length){
int i,place;
place=x*30+y;
write_data(place&0xff);
write_data(place/256);
write_com(0x24);        //设置
for(i=0;i<length;i++)
write_data(0xff);          //写入空格,清屏
write_com(0xb2);        //关闭自动写
}
//--------------------------------------------
//         LM4229初始化函数
//--------------------------------------------
void lcd_init_graph(){
write_data(0);        //图形首地址
write_data(0);
write_com(0x42);     //图形首地址设置 
write_data(30);
write_data(0);
write_com(0x43);     //图形区域设置
write_com(0x80);     //设置为OR模式
write_com(0x98);    //关闭文本显示,开图形显示
}
//--------------------------------------------
//         LM4229初始化函数
//--------------------------------------------
void lcd_init_text(){
write_data(0); 
write_data(0);
write_com(0x40);     //set text home address
write_data(30);  
write_data(0);
write_com(0x41);     //set text area;
write_com(0x84);     //text attribute mode
write_com(0x94);    //text on graphic off
}
void cursor_on(){
write_com(0xA0);
write_com(0x93);
write_com(0x94);    //text on graphic off
}
void print_text(char x,char y,char a){
int place;
place=x*30+y;
write_data(place&0xff);   //写地址低8位
write_data(place/256);    //写地址高8位
write_com(0x24);       //设置地址
write_com(0xb0);       //设置数据自动写
write_text(a);
write_com(0xb2);      //自动复位
}
void text_out(char a){
write_com(0xb0);       //设置数据自动写
write_text(a);
write_com(0xb2);      //自动复位
}
void text_location(int place){
write_data(place&0xff);   //写地址低8位
write_data(place/256);    //写地址高8位
write_com(0x24);       //设置地址
}
void print_string(char* str){
int i;
int ch;
for(i=0;str[i]!=0;i++)
{
ch=asc2lcd(str[i]);
text_out(ch);
}
}
//--------------------------------------------
//              延时函数
//--------------------------------------------
void delay_lcd(uchar t){
for(;t!=0; t--);
}
//===================================================
int asc2lcd(int asc){
uint r;
r=asc-32;
return r;
}

//latest revise:2010-2-11
//by:alex shoal
//email:alex.shoal@gmail.com
#include<reg51.h>
#include"global.h"
#include "T6963C.h"
main(){  
int place=5;
char ch=0x00;
lcd_init_text();
text_location(place);
print_string("Hello,I'm Alex!");
while(1);
}

 

 


 

原理图和效果图

 

 

抱歉!评论已关闭.