RT12232F st7920驱动程序

发布者:平安宁静最新更新时间:2017-12-13 来源: eefocus关键字:RT12232F  st7920  驱动程序 手机看文章 扫描二维码
随时随地手机看文章

#ifndef __LCD_H__  
#define __LCD_H__  

#include "type.h"  
   
//LCM122*32 PIN define  
#define CLK                 PORTC.5     //pc5  

#define SID                 PORTC.4     //pc4  
#define CS                  PORTB.4     //pb4  

#define SET_CLK()           CLK = 1;  
#define CLR_CLK()           CLK = 0;  
#define SET_SID()           SID = 1;  
#define CLR_SID()           SID = 0;  
#define LCD_Enable()        CS = 1;  
#define LCD_DISAble()       CS = 0;  

#define SID_PIN_IN()        DDRC.4 = 0;  
#define SID_PIN_OUT()       DDRC.4 = 1;  
#define CLK_PIN_OUT()       DDRC.5 = 1;  
#define CS_PIN_OUT()        DDRB.4 = 1;   

#define SID_PIN             PINC.4 //read pinx, not port!   
#define LCD_Hi_Z()          DDRC &= 0xCF;               
   
//lcd serial command  
//#define LCD_WRITE_COMMAND   0b11111000  
//#define LCD_WRITE_DATA      0b11111010  
//#define LCD_READ_STATUS     0b11111100  
//#define LCD_READ_DATA       0b11111110  

#define LCD_WRITE_COMMAND   0xF8  
#define LCD_WRITE_DATA      0xFA  
#define LCD_READ_STATUS     0xFC  
#define LCD_READ_DATA       0xFE  

void serial_write_byte(byte data);  
byte serial_read_byte(void);  

void LCDWriteCmd(byte command);  
void LCDWritEDAta(byte data);  
void InitLCD(void);  
void LCD_Write_CGRAM(byte nBytes);  
void LCD_Write_CGRAM(byte nBytes);  
void writechar(byte value);  
void writestring(byte flash *strn);  
void gotoxy(byte line, byte position);  
void LCDclrscr(void);  
void blink(byte on_off);  
void writeNumber(word value);  
   
#endif  


/*------------------------------------------------------------  
FileName     : lcd.c  
Created by   : ZhengYanbo  
Created date : 2006.3.17  
Last modified: 2006.3.17  
Comments:    : serial drive for st7920  
-------------------------------------------------------------*/  

#include "lcd.h"  
#include "type.h"  

/*  
flash byte CGRAM[128] =   
{  
//目录循环  
0xE3,0x9E,0x91,0x11,0x89,0x11,0x89,0x1E,  
0x89,0x14,0x91,0x12,0xE3,0x91,0x00,0x00,  
0x00,0x00,0x3F,0xFC,0x40,0x02,0x40,0x42,  
0x40,0x82,0x3D,0xFC,0x00,0x80,0x00,0x40,  

//文件循环  
0xEE,0x8F,0x84,0x88,0x84,0x88,0xE4,0x8E,  
0x84,0x88,0x84,0x88,0x8E,0xEF,0x00,0x00,  
0x00,0x00,0x3F,0xFC,0x40,0x02,0x40,0x22,  
0x40,0x42,0x3E,0xFC,0x00,0x40,0x00,0x20,  

//随机模式  
0xE1,0x1B,0x92,0x95,0x94,0x55,0xE7,0xD5,  
0xA4,0x51,0x94,0x51,0x00,0x00,0x00,0x00,  
0x00,0x00,0x3F,0xFC,0x40,0x02,0x40,0x42,  
0x40,0x82,0x3D,0xFC,0x00,0x80,0x00,0x40,  

//磁盘循环  
0xCE,0x74,0xA4,0x84,0x94,0x85,0x94,0x66,  
0x94,0x14,0xA4,0x16,0xCE,0xE5,0x00,0x00,  
0x00,0x00,0x3F,0xFC,0x40,0x02,0x40,0x42,  
0x40,0x82,0x3D,0xFC,0x00,0x80,0x00,0x40  
}; */   

//**********************************************************  
//用串行方式写一个字节数据到LCD  
void serial_write_byte(byte data)  
//**********************************************************  
{  
    byte i;  
      
    //SID pin output mode  
    SID_PIN_OUT();  
    CLK_PIN_OUT();  
    CS_PIN_OUT();  
    for(i=0; i<8; i++)  
    {  
    if(data & 0x80)   
     SET_SID();  
    else  
     CLR_SID();  
    //send clk  
    CLR_CLK();  
    #asm("nop");  
    SET_CLK();  
    data<<=1;  
    }  
}  

//**********************************************************  
//以串行方式从LCD中读一个字节,返回数据  
byte serial_read_byte(void)  
//**********************************************************  
{     
    byte i, temp=0;  
      
    //SID pin input mode  
    SID_PIN_IN();  
    CLK_PIN_OUT();  
    CS_PIN_OUT();  
    for(i=0; i<8; i++)  
    {  
    temp<<=1;  
    //send clk  
    CLR_CLK();  
    #asm("nop");  
    SET_CLK();  
    //wait pin steady  
    #asm("nop");  
    temp = (byte)SID_PIN;  
    }  
    return(temp);      
}  

//**********************************************************  
//读LCD的状态,读出BF信号  
byte LCD_read_status(void)  
//**********************************************************  
{  
    byte temp;  
      
    LCD_Enable();  
    //send 0b11111100  
    serial_write_byte(LCD_READ_STATUS);  
    //read upper 4 bits  
    temp = serial_read_byte() & 0xF0;  
    //read lower 4 bits  
    temp = (serial_read_byte() & 0xF0)>>4 + temp;  
    LCD_Disable();  
    //return its value  
    return(temp);  
}  

//**********************************************************  
//忙信号BF检查  
//返回: 1->suCCess    0->error(time out)  
byte check_busy(void)  
//**********************************************************  
{  
    byte time_out;  
      
    time_out=255;  
    while(LCD_read_status()&0x80)   
    {  
    time_out--;  
    //check time out  
    if(time_out==0) return 0;  
    };  
    return 1;  
}  

//**********************************************************  
//写命令到LCM  
void LCDWriteCmd(byte command)  
//**********************************************************  
{     
    //not check BF state  
    delay_us(100);  
    LCD_Enable();  
    //send 0b11111000  
    serial_write_byte(LCD_WRITE_COMMAND);  
    //write upper 4 bits  
    serial_write_byte(command & 0xF0);  
    //write lower 4 bits  
    serial_write_byte((command<<4) & 0xF0);  
    LCD_Disable();          
}  

//**********************************************************  
//写数据到LCM  
void LCDWriteData(byte data)  
//**********************************************************  
{  
    //not check BF state  
    delay_us(100);  
    LCD_Enable();  
    //send 0b11111010  
    serial_write_byte(LCD_WRITE_DATA);  
    //write upper 4 bits  
    serial_write_byte(data & 0xF0);  
    //write lower 4 bits  
    serial_write_byte((data<<4) & 0xF0);  
    LCD_Disable();  
}  

//***********************************************************  
//Initialize LCD, then print logo  
void InitLCD(void)  
//***********************************************************  
{     
    delay_ms(50);       //Wait LCD ready  
      
    LCDWriteCmd(0x30);  //function set  
    delay_us(100);  
    LCDWriteCmd(0x30);  //function set  
    delay_us(100);  
    LCDWriteCmd(0x0C);  //display on, cursor off  
    delay_us(100);  
    LCDWriteCmd(0x01);  //clear lcd  
    delay_ms(10);  
    LCDWriteCmd(0x06);  //Entry mode set   
      
    //Write LCD CGRAM  
    LCD_Write_CGRAM(128);        
   
    //Printing Logo  
    //LCDclrscr();  
    gotoxy(0,0);  
    writestring("ST7920串行驱动");  
    gotoxy(1,0);  
    writestring("版本:Test v1.0");  
    delay_ms(1000);  
    //second screen  
    LCDclrscr();  
    writestring("设计:Datazyb");  
    gotoxy(1,0);  
    writestring("日期:2006.3.17");  
}  

//***********************************************************  
void LCD_Write_CGRAM(byte nBytes)  
//***********************************************************  
{  
    //Load user’s font characters  
    byte i;   
      
    //Set CGram addres;                                
    LCDWriteCmd(0x40);  
    //load CGRAM characters    
    for(i=0;i}  

//***********************************************************  
void writechar(byte value)  
//***********************************************************  
{  
    //Write 1 character  
    //#asm("cli");  
    LCDWriteData(value);  
    //Set High status  
    LCD_Hi_Z();  
}  

//***********************************************************  
//Write a string from flash ROM  
void writestring(byte flash *strn)  
//***********************************************************  
{     
    while (*strn!=0) writechar(*strn++);   
}  

//***********************************************************  
//Gotoxy function. X=line number, Y=character position  
void gotoxy(byte line, byte position)  
//***********************************************************  
{  
    byte address;  

    address=lcdLineStart[line]+position;  
    LCDWriteCmd(address);  
}  

//***********************************************************  
//Clear LCD  
void LCDclrscr(void)  
//***********************************************************  
{  
    LCDWriteCmd(0x01);  
    delay_ms(5); //Writing cycle time is 4.6ms for LCD128X64.  
}  

//***********************************************************  
//Setup curson blink, based on player state  
void blink(byte on_off)  
//***********************************************************  
{   
    //if on_off = 1 blink on, if on_off=0 blink off  
    LCDWriteCmd(0x0C + (on_off & 1));  
}  

//***********************************************************  
//Write a decimal number on LCD  
void writeNumber(word value)  
//***********************************************************  
{  
    byte temp[8],i=0;  
   
    do {  
    temp[i++]=value%10;  
    value=value/10;  
    }  
    while (value>0);  
    //start from back and print the number   
    for(;i>0;) writechar(temp[--i]+48);  
}  

//end of lcd.c  


关键字:RT12232F  st7920  驱动程序 引用地址:RT12232F st7920驱动程序

上一篇:控制74HC164数据转换程序
下一篇:KS0108 128X64 LCD C语言AVR程序

推荐阅读最新更新时间:2024-03-16 15:49

我在ARM板上写的第一个驱动程序
摘要:搞嵌入式有两个方向,一个是嵌入式软件开发(MCU方向),另一个是嵌入式软件开发(Linux方向)。其中,MCU方向基本是裸机开发和RTOS开发,而Linux开发方向又分为驱动开发和应用开发。相较于驱动开发,应用开发相对简单一些,因为搞驱动你要和Linux内核打交道。而我们普通的单片机开发就是应用开发,和Linux开发没多大区别,单片机你去调别人写好的库,Linux应用你也是调别人的驱动程序。 很多人学习的路线是:单片机到RTOS,再到Linux,这个路线其实是非常好,循序渐进。因为你学了单片机,所以你对RTOS的学习会很容易理解,单片机+RTOS在市面上也可以找到一个很好的工作。因为你学了RTOS,你会发现Linux驱动开发
[单片机]
ISD4004语音芯片C51驱动程序源代码
ISD4004语音芯片C51驱动程序源代码 /*spi isd4004.h*/ #include reg51.h #include intrins.h sbit _cs = p0^0; sbit _sclk= p0^3; sbit _mosi= p0^1; sbit _miso= p0^2; sbit _rac = p0^4; sbit _int = p0^5; void delay(unsigned int i) //延时程序 { while(i--); } void stopmode() //停止 { unsigned char m,i,j; _cs=1; _sclk=0; _cs=0; m=0x30; for(i=0;i
[单片机]
AVR单片机nrf24l01驱动程序
avr单片机源程序如下: //ICC-AVR application builder : 2018/6/1 21:34:07 // Target : M16 // Crystal: 8.0000Mhz #include iom16v.h #include macros.h #include SPI.h #include key.h #define uint unsigned int #define uchar unsigned char #define IRQ 0 //输入 #define MISO 1 //输入 #define MOSI 2 //输出 #define SCK 3 //输出 #defin
[单片机]
LCD驱动程序移植
2.6.14的内核,按照网上的帖子,要做的工作量不是很大,现在先整理一下思路,我们从硬件开始,我用的LCD型号是LTV350QV-F04。320×240,这里的320×240是像素点数,其中320是水平方向,240是垂直方向。控制信号我们先不去管它,我们先来看一下数据线,也就是RGB(red green and blue)线,此处的硬件连接决定了LCD的BPP,16BPP或24BPP,我的开发板上采用的是5:6:5的16BPP的连接。关于BPP和连线的关系可以参考2410手册的387~390页。 接下来要配置和LCD相关的寄存器,这部分配置要参考2410的p397开始的关于LCD控制寄存器的说明。以下代码是网上一位大侠做的
[单片机]
嵌入式Linux下的AU1200MAE驱动程序设计
  随着移动多媒体终端的口益普及,功能的日益强大,人们已经不满足于自己的手持终端仅仅能够听MP3音乐,而是希望终端在播放音乐的同时能够播放高质量视频,并支持多种视频格式。AU 1200作为一款基于MIPS架构的处理器,由于其片上集成了视频硬件设备(Media Accel-eration Engine,MAE),使得该处理器无需配合其他视频解码芯片即可完成多种格式的视频解码功能,所以AU 1200非常适合应用于像PMP这样的移动多媒体终端,而MAE也成为AU 1200的特色。    1 MAE概述   MAE是AU 1200的片上硬件设备,除了可以实现视频解码功能外,还可以完成色彩空间转换、滤波等工作。MAE在硬件结构上可以
[嵌入式]
C64x系列DSP/BIOS中设备驱动程序的设计
摘要:为了高效地对外部设备进行控制,给硬件设备编写驱动程序是一种有效的解决方法。C64x系列的DSP系统提出了类/微型驱动模型的驱动程序结构。实践结果表明,采用类/微型驱动模型进行驱动程序设计后,应用软件可以复用绝大部分相似设备的驱动程序,因而极大地提高了驱动程序的开发效率。 关键词:数字信号处理器 I/O设备驱动 类/微型驱动模型 实时操作系统 随着新技术的不断涌现和DSP实时系统的日趋复杂,不同类型的外部设备越来越多。为这些外部设备编写驱动程序已经成为依赖操作系统管理硬件的内在要求。但是,由于内存管脚、响应时间和电源管理等条件的限制,为一个给定的DSP系统编写设备驱动程序有时候会很困难。针对设备驱动程序开发者遇到的上述难
[嵌入式]
基于PXA255的ARM Linux操作系统移植
1.引言 ARM处理器是当今应用最为广泛的处理器芯片,它功耗小、成本低、性能优越,在消费电子类产品中占据主导地位。Linux操作系统近年来Linux移植/ARM在嵌入式领域中发展很快,由于其强大的性能和开源免费的特点,越来越受到嵌入式系统开发商的青睐,信息家电、网络设备、手持终端等都是嵌入式Linux应用的广大市场。 在Linux移植/ARM嵌入式开发中,把操作系统移植到开发板是进行嵌入式应用开发的前提和基础。ARM Linux是针对ARM体系结构的嵌入式Linux操作系统。本文主要阐述了将ARM Linux系统移植到基于PXA255处理器的Linux移植/ARM开发板CSB226上的方法和关键技术。
[单片机]
基于PXA255的ARM Linux操作系统移植
S3C44B0X键盘的uClinux驱动程序设计
  引言   三星公司的ARM7系列微处理器得到了广泛使用,其中S3C44B0X是制作手持式设备的良好选择。目前以S3C44B0X为核心制作的开发板大多采用1×4按键键盘,其电路简单,容易实现。在移植uClinux到s3C44B0X开发板时,必须自己设计键盘的驱动程序。1×4按键键盘的驱动程序根据硬件特点,对源代码中PC键盘驱动程序进行修改而得到,并在开发板上成功使用。   1 uClinux键盘驱动程序概述   在uClinux操作系统中,键盘驱动程序与Linux基本相同,其中PC键盘驱动程序比较典型。键盘是一种字符设备,可以在目录/drivers/char 中找到驱动程序。PC键盘的驱动程序由keyboard.c和pc
[单片机]
S3C44B0X键盘的uClinux<font color='red'>驱动程序</font>设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved