返回该小组首页 回复主题
wangxing

wangxing

小组等级:     E币:4271  (E币换礼)

#1楼主:EDN51板子的LCD1604的测试程序

文章发表于:2008-08-27 01:19

/************************************************/
/*功   能:使用51内核的单片机驱动的字符型液晶LCD*/
/*LCD型号:TC1604A        */
/*MCU型号:STC89C54RD+       */
/*编程语言:C51(KEIL C)      */
/*编写者:王兴权        */
/************************************************/
/*TC1604的管脚说明        */
/* 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 */
/* VSS VDD VL RS R/W ET D0 D1 D2 D3 D4 D5 D6 D7 BLA BLK */
/*数据手册见文件夹中的数据手册     */
#include <reg51.h>

//LCD1604与微处理器的端口映射关系定义
#define LCD_Data_BUS P0 /*数据端  */    
sbit LCD_RS=P1^0;/*数据/命令选择端:H/L */
sbit LCD_RW=P1^1;/*读/写选择端:H/L  */
sbit LCD_ET=P1^2;/*使能控制端   */

/*LCD的各种状态的指令码定义*/
#define LCD_CODE_RESET 0x38
#define LCD_CODE_SETUP 0x08
#define LCD_CODE_SETUP_CUR_FLASH 0x01
#define LCD_CODE_CLEAR 0x01
#define LCD_CODE_SET_OFFSET 0x80
#define LCD_Display_DELAY 250
#define HIGHT 1
#define LOW 0
/*行设置        */
#define line_1  0x00
#define line_2  0x40
#define line_3  0x10
#define line_4  0x50

/****************LCD程序&&&&&&&&&&&&&&&&&&/

/************************************/
/*函数名称:Delay_LCD    */
/*函数功能:LCD的延时函数   */
/*传递参数:无      */
/*返 回 值:无      */
/*备    注:      */
/************************************/
void Delay_LCD()
{
 unsigned int j; 
  for(j=0;j<300;j++)
  {;}
}

/************************************/
/*函数名称:Write_LCD_Command  */
/*函数功能:LCD的写指令函数   */
/*传递参数:指令码(comm)   */
/*返 回 值:无      */
/*备    注:      */
/************************************/   
void Write_LCD_Command(comm)
unsigned char comm;

 LCD_RS = LOW;
 LCD_RW = LOW;
 LCD_ET = LOW;
 LCD_Data_BUS = comm;
 LCD_ET = HIGHT;
 Delay_LCD();
 LCD_ET = LOW;
}

/************************************/
/*函数名称:Read_LCD_Status   */
/*函数功能:读LCD的状态    */
/*传递参数:无      */
/*返 回 值:状态数据    */
/*备    注:      */
/************************************/
unsigned char Read_LCD_Status()
{
 unsigned char dat;
 LCD_ET = LOW;  //收回使能
 LCD_Data_BUS = 0xFF;
 LCD_RS = LOW;  //命令
 LCD_RW = HIGHT;  //送写使能
 LCD_ET = HIGHT;  //使能
 dat = LCD_Data_BUS;
 LCD_ET = LOW;  //收回片选
 return(dat);
}
/************************************/
/*函数名称:Write_LCD_Data   */
/*函数功能:LCD的写数据函数   */
/*传递参数:所写数据wdata(1个字节) */
/*返 回 值:无      */
/*备    注:      */
/************************************/
void Write_LCD_Data(wdata)
unsigned char wdata;
{     
 LCD_RS = HIGHT;
 LCD_RW = LOW;
 LCD_ET = LOW;  
 LCD_Data_BUS = wdata;
 LCD_ET = HIGHT;   
 Delay_LCD();
 LCD_ET = LOW;          
}

/************************************/
/*函数名称:Init_LCD    */
/*函数功能:LCD的初始化函数   */
/*传递参数:无      */
/*返 回 值:无      */
/*备    注:      */
/************************************/
void Init_LCD()
{
 Delay_LCD();
 Write_LCD_Command(LCD_CODE_RESET);
 Delay_LCD();
 Write_LCD_Command(LCD_CODE_RESET);
 Delay_LCD();
 Write_LCD_Command(LCD_CODE_RESET);
 Delay_LCD();
 Write_LCD_Command(LCD_CODE_RESET);
 Delay_LCD();
 Write_LCD_Command(LCD_CODE_SETUP);
 Write_LCD_Command(LCD_CODE_CLEAR);
 Write_LCD_Command(0x06);
 Write_LCD_Command(0x0C);
}

/************************************/
/*函数名称:Clear_LCD    */
/*函数功能:清屏函数     */
/*传递参数:无      */
/*返 回 值:无      */
/*备    注:      */
/************************************/
void Clear_LCD()
{
   Write_LCD_Command(LCD_CODE_CLEAR);
}

/************************************/
/*函数名称:Clear_LCD */
/*函数功能:设置坐标*/
/*传递参数:Line,Row*/
/*返 回 值:0/1*/
/*备    注:*/
/************************************/
unsigned char Set_LCD_XY(Line,Row)
unsigned char Line;
unsigned char Row;
{
 unsigned char Delay,Data = 0;
 Delay = LCD_Display_DELAY;
 while(Delay > 0){
  Data = Read_LCD_Status();
  if ((Data & 0x80) == 0){
   Write_LCD_Command((Line + Row) + LCD_CODE_SET_OFFSET);
   return(0);
  }
  Delay--;
 }
 return(1);
}
/************************************/
/*函数名称:Cursor_Glint   */
/*函数功能:光标闪烁控制函数   */
/*传递参数:0/1      */
/*返 回 值:无      */
/*备    注:0是关,1是开   */
/*下面两句结合控制光标的闪烁位置*/
/* Set_LCD_XY(line_2,6);*/
/* Cursor_Glint(1);*/
/************************************/
void Cursor_Glint(NoOff)
unsigned char NoOff;
{
 unsigned char  com;
 com=NoOff << 2;
 com |= 13;
 Write_LCD_Command(com);
}

/************************************/
/*函数名称:Display_BCDToLCD  */
/*函数功能:在LCD显示BCD码的数字函数 */
/*传递参数:dat      */
/*返 回 值:无      */
/*备    注:   */
/************************************/
void Display_BCDToLCD(dat)
unsigned char dat;
{
 unsigned char b;
 b= (dat>>4)&0x0f;//高四位
 if (b<10){
  Write_LCD_Data('0'+b);
 }else{
  Write_LCD_Data('A'+(b-10));
 }

 b = dat & 0x0f;//低四位

 if (b<10){
  Write_LCD_Data('0'+b);
 }else{
  Write_LCD_Data('A'+(b-10));
 }
 //Write_LCD_Data(' '); //空格
}

/************************************/
/*函数名称:Display_Strings   */
/*函数功能:LCD显示字符串函数  */
/*传递参数:line,strings,number*/
/*返 回 值:*/
/*备    注:line是显示行的位置参数,可以取得的值可*/
/*          以是line_1,line_2,line_3,line_4*/
/*          strings是要显示的字符串,使用""括起来*/
/*          number是显示的字符串的个数*/
/*调用格式:Display_Strings(line_2+2,"Display",7);*/
/*含义:从第2行的第2个位置开始显示Display*/
/************************************/
void Display_Strings(line,strings,number)
unsigned char line;
char *strings;
unsigned int number;
{
 unsigned char i;  
 Write_LCD_Command(line+0X80); 
 for(i=0;i<number;i++)
 {
  Write_LCD_Data(strings[i]);
 }
}

/*****************LCD程序END****************/     
/************************************/
/*函数名称:Delay_System */
/*函数功能:通用延时函数*/
/*传递参数:延时值(t)*/
/*返 回 值:无*/
/*备    注:*/
/************************************/
void Delay_System(unsigned int Delay)

  unsigned int i;        
  for(;Delay>0;Delay--)
  {
    for(i=1000;i>0;i--);
  }

/************************************/
/*函数名称:main */
/*函数功能:主函数*/
/*传递参数:*/
/*返 回 值:*/
/*备    注:*/
/************************************/                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
main()
{
 unsigned int cishu; 
 Init_LCD(); 
 //Write_LCD_Data(0x65);
 //Write_LCD_Data('A');
 //Delay_System(65534);
 //Clear_LCD();
 Display_Strings(line_1+4,"LCD Test",8);
 //下面两句结合控制光标的闪烁位置
 //Set_LCD_XY(line_2,6);
 //Cursor_Glint(1);
 for(cishu=0;cishu<=99;cishu++)
 {
 Init_LCD();
 Display_Strings(line_1+4,"LCD Test",8);
 Set_LCD_XY(line_3,6);
 Display_BCDToLCD(cishu);
 Delay_System(100);
 if(cishu==99)
  cishu = 0;
 }
}

点击下载LCD1604.c

wangxing

   小组等级:    E币:4271  (E币换礼)

#2

文章发表于:2008-08-27 13:19

直接可以使用的程序

craftor

   小组等级:    E币:1155  (E币换礼)

#3

文章发表于:2008-08-28 21:58

好,顶一下!

总共 , 当前 /

快速回复主题--如果想加入编辑器功能,建议使用 [高级回复]

您目前还不是小组成员,请先加入

回复贴子区

用户名:    您没有注册?

密码:    忘记了密码?

内容:

  • DesignDesign
  • HTMLHTML

浏览该小组的用户还看过...

所有小组精华文章