搜索
bottom↓
回复: 8

求夜晶16032的简单程序?

[复制链接]

出0入0汤圆

发表于 2009-10-9 10:22:08 | 显示全部楼层 |阅读模式
小弟刚接触液晶,那位好新的大哥给我一个简单的参考程序,小弟在这谢谢各位了!

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2009-10-9 12:16:09 | 显示全部楼层
sbit LCD_RS = P2^7;
sbit LCD_RW = P2^6;
sbit LCD_EN = P2^5;

#define uchar unsigned char
#define uint  unsigned int
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};

uchar code mytab[8] = {0x18,0x18,0x07,0x08,0x08,0x08,0x07,0x00};//℃

/*************************************************************
* 延时子程序                                                 *
* 晶振 11.0592MHz  延时为1ms                                 *
*************************************************************/
void delay_ms(uint num)
{
   uchar i;
   while((num--)!=0)
   {
     for(i=0;i<115;i++)
     {;}
   }
}

/*************************************************************
*检查LCD忙状态                                               *
*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据   *
*************************************************************/
bit lcd_busy(void)
{
    bit result;
    LCD_RS = 0;
    LCD_RW = 1;
    LCD_EN = 1;
    delayNOP();
    result = (bit)(P0&0x80);
    LCD_EN = 0;
    return(result);
}

/*************************************************************
*写指令数据到LCD                                             *
*RS=L,RW=L,E=高脉冲,D0-D7=指令码。                        *
*************************************************************/
void lcd_wcmd(uchar cmd)
{
   while(lcd_busy());
    LCD_RS = 0;
    LCD_RW = 0;
    LCD_EN = 0;
    _nop_();
    _nop_();
    P0 = cmd;
    delayNOP();
    LCD_EN = 1;
    delayNOP();
    LCD_EN = 0;
}

/************************************************************
*写显示数据到LCD                                            *
*RS=H,RW=L,E=高脉冲,D0-D7=数据。                         *
************************************************************/
void lcd_wdat(uchar dat)
{
   while(lcd_busy());
    LCD_RS = 1;
    LCD_RW = 0;
    LCD_EN = 0;
    P0 = dat;
    delayNOP();
    LCD_EN = 1;
    delayNOP();
    LCD_EN = 0;
}

/*自定义字符写入CGRAM*/
void  writetab(void)
{
    uchar i;
    lcd_wcmd(0x40);      //写CGRAM
    for (i = 0; i< 8; i++)      
    lcd_wdat(mytab);
}

/*LCD初始化设定*/
void lcd_init(void)
{
    delay_ms(15);                  
    lcd_wcmd(0x38);      //16*2显示,5*7点阵,8位数据
    delay_ms(5);
    lcd_wcmd(0x38);        
    delay_ms(5);
    lcd_wcmd(0x38);        
    delay_ms(5);

    lcd_wcmd(0x0c);      //显示开,关光标
    delay_ms(5);
    lcd_wcmd(0x06);      //移动光标
    delay_ms(5);
    lcd_wcmd(0x01);      //清除LCD的显示内容
    delay_ms(5);

    writetab();               //自定义字符写入CGRAM
    delay_ms(5);
}

/*设定显示位置*/
void lcd_pos(uchar pos)
{                          
  lcd_wcmd(pos | 0x80);  //数据指针=80+地址变量
}

/*写字符串函数*/
void write_str(uchar addr,uchar *p)
{
   uchar i=0;
   lcd_pos(addr);
   while(p!='\0')
   {
    lcd_wdat(p);
    i++;
   }
}

/*************************************************************
* RS=1,RW=0,写状态寄存器                                     *
* RS=1,RW=1,读状态寄存器                                     *
* RS=0,RW=0,写发送寄存器                                     *
* RS=0,RW=1,读接收数据寄存器                                 *
*************************************************************/

出0入0汤圆

 楼主| 发表于 2009-10-9 14:08:28 | 显示全部楼层
【1楼】 depaul123
这个程序用在16032上可以直接运行吧!

出0入137汤圆

发表于 2009-10-9 14:20:12 | 显示全部楼层
给lz程序的就是在害他,连个液晶的手册都没有,驱动芯片都不知道是什么就给他程序。。。。。

出0入0汤圆

 楼主| 发表于 2009-10-9 14:23:18 | 显示全部楼层
【3楼】 pulan
我用的nh16032,可是我写的程序就是显示不出来,弄的我很是个郁闷!所以就来论坛请教一下了.

出0入0汤圆

发表于 2010-1-23 19:33:35 | 显示全部楼层
回复【1楼】depaul123
-----------------------------------------------------------------------

********89C51引脚定义********
        RS BIT P3.3
        R_W BIT P3.4
        E BIT P3.5
        DB0_DB7 EQU P1
;*******程序开始******
        ORG 0000H
        LJMP MAIN
        ORG 030H
MAIN:        MOV SP,#60H
        LCALL INITIAL
        LCALL CLS
        MOV R4,#64
        LCALL SAVE_CGRAM
        MOV A,#10000000B
        LCALL WRITE_COM
        MOV R1,#4
        CLR A
        LCALL DIS_MAP
        MOV A,#11000000B
        LCALL WRITE_COM
        MOV R1,#4
        MOV A,#4
        LCALL DIS_MAP
        MOV A,#10000100B
        LCALL WRITE_COM
        MOV DPTR,#LINE0
        LCALL DISP
        MOV A,#11000100B
        LCALL WRITE_COM
        MOV DPTR,#LINE1
        LCALL DISP
        SJMP $
;*******显示字符串到LCM子程序********
DISP:        PUSH ACC
DISP_LOOP:        CLR A
        MOVC A,@A+DPTR
        JZ END_DISP
        LCALL WRITE_DATA
        INC DPTR
        SJMP DISP_LOOP
END_DISP:        POP ACC
        RET
;*******显示图形子程序*****
DIS_MAP:LCALL WRITE_DATA
        INC A
        DJNZ R1,DIS_MAP
        RET
;****** 启动LCM子程序******
INITIAL:MOV A,#00111000B
        LCALL WRITE_COM
        MOV A,#00001100B
        LCALL WRITE_COM
        MOV A,#00000110B
        LCALL WRITE_COM
        RET
;******查询忙碌标志信号子程序******
CHECK_BUSY:         PUSH ACC
BUSY_LOOP:        CLR E
        SETB R_W
        CLR RS
        SETB E
        MOV A, DB0_DB7
        CLR E
        JB ACC.7,BUSY_LOOP
        POP ACC
        LCALL DEL
        RET
;****** 写指令到LCM子程序******
WRITE_COM:         LCALL CHECK_BUSY
        CLR E
        CLR RS
        CLR R_W
        SETB E
        MOV DB0_DB7,A
        CLR E
        RET
;****** 写数据到LCM子程序******
WRITE_DATA:         LCALL CHECK_BUSY
        CLR E
        SETB RS
        CLR R_W
        SETB E
        MOV  DB0_DB7,A
        CLR E
        RET
;*******清除LCM子程序*******
CLS:        MOV A,#00000001B
        LCALL WRITE_COM
        RET
;****延时2.7mS子程序****
DEL:        MOV R6,#5
L1:        MOV R7,#248
        DJNZ R7,$
        DJNZ R6,L1
        RET
;*******自定义图形写入CGRAM子程序********
SAVE_CGRAM:        MOV A,#01000000B
        LCALL WRITE_COM
        MOV DPTR,#TAB
CGRAM_LOOP:         CLR A
        MOVC A,@A+DPTR
        LCALL WRITE_DATA
        INC DPTR
        DJNZ R4, CGRAM_LOOP
        RET
;*******字符串*****************************
TAB:        DB 03H,04H,08H,10H,1FH,04H,04H,00H
        DB 1FH,00H,00H,00H,1FH,00H,00H,00H
        DB 1FH,00H,00H,00H,1FH,00H,00H,00H
        DB 18H,04H,02H,01H,1FH,04H,04H,00H
        DB 04H,04H,04H,04H,04H,07H,00H,00H
        DB 0FH,14H,14H,14H,14H,1FH,10H,00H
        DB 1EH,05H,05H,05H,05H,1FH,01H,00H
        DB 04H,04H,04H,04H,04H,1CH,00H,00H
LINE0:  DB " Welcome to ",00H
LINE1:         DB " LCD Monitor",00H
        END

出0入0汤圆

发表于 2010-1-23 21:07:21 | 显示全部楼层
先说明是什么控制器的液晶,才好说程序……

出0入0汤圆

发表于 2010-1-23 21:30:54 | 显示全部楼层
回复【6楼】i387DX
-----------------------------------------------------------------------

YXD-1602A5液晶屏

出0入0汤圆

发表于 2015-3-17 16:54:50 | 显示全部楼层
965340186 发表于 2010-1-23 19:33
回复【1楼】depaul123
-----------------------------------------------------------------------

我勒个擦,汇编
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 00:44

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表