搜索
bottom↓
回复: 4

我也来发个LCD1602的驱动程序

[复制链接]

出0入4汤圆

发表于 2007-4-20 23:51:44 | 显示全部楼层 |阅读模式
点击此处打开armok01151177.pdf

的说明书



八位数据总线

#define                uint08                unsigned char               

#define                uint16                unsigned int               

#define                uint32                unsigned long                       

#define                sint08                signed char               

#define                sint16                signed int               

#define                sint32                signed long               

#define                BIT_SET(a,b)        a|=BIT(b)

#define                BIT_CLR(a,b)        a&=~BIT(b)

#define                BIT_REV(a,b)        a^=BIT(b)

#define                BIT_TEST(a,b)        a&BIT(b)                                                 

#define                LCD1602_RD                BIT_SET(PORTC,PC6)

#define                LCD1602_WR                BIT_CLR(PORTC,PC6)



#define                LCD1602_CMD                BIT_CLR(PORTC,PC7)

#define                LCD1602_DAT                BIT_SET(PORTC,PC7)



#define                LCD1602_EN                BIT_SET(PORTC,PC1)

#define                LCD1602_UE                BIT_CLR(PORTC,PC1)



#define                DDRA_IN                        DDRA=0x00

#define                DDRA_OUT                DDRA=0xFF





/****************************************Copyright (c)**************************************************

**                                

**                                    

**                              

** 文   件   名: lcd_1602.c

** 最后修改日期: 2007-4-5 13:27

** 描        述: 初始化程序

** 版             本: V1.0

** 主  控  芯 片:M16  晶振频率:.。3728MHZ

**

**********************************************************************************************************/

#include <iom16v.h>

#include <macros.h>

#include "define.h"

#include "function.h"

#include "extern.h"







/**********************************************************************

functionName:void delay(uint08 delay_ms)

description:延时函数 7.3728MHZ  参数1 约  1ms

**********************************************************************/

void delay(uint08 delay_ms)

{

        uint08 j;

        uint16 i;

        for(j=0;j<delay_ms;j++)

        for(i=0;i<1100;i++);

}



/**********************************************************************

functionName:uint08 read_lcd_status(void)

description:读状态

**********************************************************************/

uint08 read_lcd_status(void)

{

        uint08 ret_val;

        DDRA_IN;

        LCD1602_CMD;

        LCD1602_RD;

        LCD1602_EN;

        NOP();

        NOP();

        NOP();

        ret_val=0xFF;

        while(ret_val&0x80)

        {

                ret_val=PINA;

        }

        LCD1602_UE;

        return(ret_val);

}





/**********************************************************************

functionName:uint08 read_dat(uint08 rs)

description:rs=0表示命令  1表示数据

**********************************************************************/

uint08 read_dat(uint08 rs)

{

        uint08 ret_val;

        read_lcd_status();       

        DDRA_IN;

        if(rs)

        LCD1602_DAT;

        else

        LCD1602_CMD;

        LCD1602_RD;

        LCD1602_EN;

        NOP();

        ret_val=PINA;

        NOP();

        LCD1602_UE;

        return(ret_val);

}



/**********************************************************************

functionName:void write_1602(uint08 cmd,uint08 rs)

description:                rs=0表示命令  1表示数据

                                        read_status  

                                        0:忽略忙信号

                                        1:每次等待忙信号0

**********************************************************************/

void write_1602(uint08 cmd,uint08 rs,uint08 read_status)

{

        if(read_status)read_lcd_status();

        DDRA_OUT;

        PORTA=cmd;

        if(rs)

        LCD1602_DAT;

        else

        LCD1602_CMD;

        LCD1602_WR;



       

        LCD1602_EN;

        NOP();NOP();NOP();NOP();

        LCD1602_UE;

}









/**********************************************************************

functionName:void lcd_init(void)

description: LCD1602初始化       

**********************************************************************/

void lcd_init(void)

{

        delay(200);

        delay(200);



        delay(15);

        write_1602(0x38,0,0);

        delay(5);

        write_1602(0x38,0,0);

        delay(5);

        write_1602(0x38,0,0);

        delay(5);

       

        write_1602(0x38,0,1);

        write_1602(0x08,0,1);

        write_1602(0x01,0,1);

        write_1602(0x06,0,1);

        write_1602(0x0C,0,1);

}





/**********************************************************************

functionName:void display_char(uint08 x,uint08 y,uint08 dat)

description: 显示一个字符

**********************************************************************/

void display_char(uint08 x,uint08 y,uint08 dat)

{

        x&=0x0F;

        if(y)x|=0x40;

        x|=0x80;

        write_1602(x,0,1);

        write_1602(dat,1,1);

}



/**********************************************************************

functionName:void display_string(uint08 x,uint08 y,uint08 *dat)

description:显示一串字符       

**********************************************************************/

void display_string(uint08 x,uint08 y,uint08 *dat)

{

        x&=0x0f;

        while(*dat)

        {

                display_char(x,y,*dat);

                x++;

                dat++;

        }

}

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

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2007-4-21 11:44:01 | 显示全部楼层
顶顶小松工程!

出0入0汤圆

发表于 2010-3-18 15:31:23 | 显示全部楼层
我也顶顶!!!

出0入0汤圆

发表于 2011-12-16 10:39:44 | 显示全部楼层
mark

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-4-28 00:53

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

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