基于s3c2440的12864液晶驱动

基于s3c2440的12864液晶驱动
12864是12864点阵液晶模块的点阵数简称,业界约定俗成的简称。
一、液晶显示模块概述
12864A-1 汉字图形点阵液晶显示模块,可显示汉字及图形,内置 8192 个中文汉字(16X16 点阵,16
8=128,16*4=64,一行只能写 8 个汉字,4 行;、128 个字符(8X16 点阵)及 64X256 点阵显示 RAM(GDRAM))。
主要技术参数和显示特性:
电源:VDD 3.3V~+5V(内置升压电路,无需负压);
显示内容:128 列× 64 行(128 表示点数)
显示颜色:黄绿
显示角度:6:00 钟直视
LCD 类型:STN
与 MCU 接口:8 位或 4 位并行/3 位串行
配置 LED 背光
多种软件功能:光标显示、画面移位、自定义字符、睡眠模式等
引脚定义:D0-D7,RS,RES,RD,WR,CS,BL;具体头文件定义如下:

#ifndef LCD12864_H
#define LCD12864_H

#define LCD12864_MAJOR 242
#define DEV_NAME “lcd12864”

#define LCD12864_IOCTL ‘l’
#define SET_FONT_SIZE _IOW(LCD12864_IOCTL,0 ,unsigned int)
#define SET_LCD_PAGE _IOW(LCD12864_IOCTL,1 ,unsigned int)
#define SET_LCD_COLUMN _IOW(LCD12864_IOCTL,2 ,unsigned int)
#define CLR_SCREEN _IOW(LCD12864_IOCTL,3 ,unsigned int)
#define BACKLIGHT_CTRL _IOW(LCD12864_IOCTL,4 ,unsigned int)
#define CONTRAST_SETTING _IOW(LCD12864_IOCTL,5 ,unsigned int)

#define LCD_DATA_0 S3C2410_GPC8
#define LCD_DATA_1 S3C2410_GPC9
#define LCD_DATA_2 S3C2410_GPC10
#define LCD_DATA_3 S3C2410_GPC11

#define LCD_DATA_4 S3C2410_GPC12
#define LCD_DATA_5 S3C2410_GPC13
#define LCD_DATA_6 S3C2410_GPC14
#define LCD_DATA_7 S3C2410_GPC15

#define LCD_E_RD S3C2410_GPD0
#define LCD_RW_WR S3C2410_GPD1
#define LCD_RS S3C2410_GPD2
#define LCD_RES S3C2410_GPD3
#define LCD_CS1 S3C2410_GPD4
#define LCD_BL S3C2410_GPD5

#define LCD_DATA_CFG0_OUTP S3C2410_GPC8_OUTP
#define LCD_DATA_CFG1_OUTP S3C2410_GPC9_OUTP
#define LCD_DATA_CFG2_OUTP S3C2410_GPC10_OUTP
#define LCD_DATA_CFG3_OUTP S3C2410_GPC11_OUTP

#define LCD_DATA_CFG4_OUTP S3C2410_GPC12_OUTP
#define LCD_DATA_CFG5_OUTP S3C2410_GPC13_OUTP
#define LCD_DATA_CFG6_OUTP S3C2410_GPC14_OUTP
#define LCD_DATA_CFG7_OUTP S3C2410_GPC15_OUTP

#define LCD_E_RD_CFG_OUTP S3C2410_GPD0_OUTP
#define LCD_RW_WR_CFG_OUTP S3C2410_GPD1_OUTP
#define LCD_RS_CFG_OUTP S3C2410_GPD2_OUTP
#define LCD_RES_CFG_OUTP S3C2410_GPD3_OUTP
#define LCD_CS1_CFG_OUTP S3C2410_GPD4_OUTP
#define LCD_BL_CFG_OUTP S3C2410_GPD5_OUTP

#define FONT_SIZE_8 8
#define FONT_SIZE_16 16

#endif

将引脚单独用头文件重新自己定义一次,以提高代码的可移植性。
下面看看模块初始化/释放函数:

static int __init lcd12864_init(void)
{
int ret;
dev_t devno;

DBPRINTF(KERN_ALERT "%s enter!\n",__func__);
devno = MKDEV(lcd12864_major,0);
if((ret = register_chrdev_region(devno,1,DEV_NAME))<0)
{
    if((ret = alloc_chrdev_region(&devno, 0, 1, DEV_NAME))<0)
    {
        DBPRINTF(KERN_ALERT "chrdev region fail!ret=%d;\n",ret);
        return ret;
    }
    else
    {
        lcd12864_major = MAJOR(devno);
    }        
}
cdev_init(&lcd_cdev, &lcd12864_ops);
lcd_cdev.owner=THIS_MODULE;
lcd_cdev.ops = &lcd12864_ops;

ret = cdev_add(&lcd_cdev, devno, 1);
if(ret<0)
{
    goto fail_reg;
}

lcd_dev_class = class_create(THIS_MODULE, DEV_NAME);
if(IS_ERR(lcd_dev_class))
{
    goto fail_cdev;
}
device_create(lcd_dev_class, NULL, devno, NULL, DEV_NAME);

lcd_bd_info = kmalloc(sizeof(struct lcd_board_info),GFP_KERNEL);
lcd_bd_info->font_size = 16;

#ifdef NORMAL
lcd_bd_info->pag = 0;
lcd_bd_info->column = 0;
#else
lcd_bd_info->pag = 6;
lcd_bd_info->column = 112;
#endif
lcd_bd_info->lcd_data_t = lcd_data_table;
lcd_bd_info->lcd_data_cfg_t = lcd_data_cfg_table;

spin_lock_init(&lock);

gpio_pin_init();    
//gpio_pin_init();


ret = init_lcd12864();
if(ret<0)
{
    goto fail_dev;
}
back_light_ctrl(1);
clear_lcd_screen(0x00);    
DBPRINTF(KERN_ALERT "%s leave,init success!\n",__func__);
return ret;

fail_dev:
device_destroy(lcd_dev_cl

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值