⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.c

📁 160*160字符图形液晶Linux2.6.24内核驱动程序
💻 C
字号:
#include <stdio.h>#include <stdarg.h>#include <memory.h>#include <errno.h>#include <sys/types.h>#include <sys/socket.h>#include <sys/mman.h>#include <sys/ioctl.h>#include <fcntl.h>#include <signal.h>#include <stdlib.h>#include <unistd.h>#include "pic.h"#define	MEM_LCD_ADDR	0x50000000/* Memory mapping definitions */#define MAP_SIZE 4096UL#define MAP_MASK (MAP_SIZE - 1)#define	DIS_DELAY 1volatile void *map_base;void Display_Picture(unsigned char pic[]);
void Display_Gray(void);
void Display_Grid(unsigned char dat1,unsigned char dat2,unsigned char dat3,unsigned char dat4);
void Initial_LCD(void);
inline void Write_Instruction(unsigned char cmd);
inline void Write_Data(unsigned char dat);
int main(int argc, char *argv[]){	int fd, i, rc, pin, dest_addr, id, retval, flag = 0;	char *current, action, port;	unsigned long readval, writeval;	unsigned char temp = 0;	if((fd = open("/dev/mem", O_RDWR | O_SYNC)) == -1){		printf("Error opening /dev/mem\n");		exit(1);	}  	/* Map one page */	map_base = mmap(0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, MEM_LCD_ADDR & ~MAP_MASK);	if(map_base == (void *) -1){		printf("Error mapping memory\n");		close(fd);		exit(1);	}	printf("PHY ADDR:0x%x, map_base:0x%x\n", MEM_LCD_ADDR, map_base);	Initial_LCD();
	while(1)
	{
	        Display_Grid(0xff,0xff,0xff,0xff);
        	sleep(DIS_DELAY);
		Display_Picture(pic1);
        	sleep(DIS_DELAY);
		Display_Picture(pic2);
        	sleep(DIS_DELAY);
        	Display_Gray();
        	sleep(DIS_DELAY);
        	Display_Grid(0xff,0xff,0x00,0x00);
        	sleep(DIS_DELAY);
        	Display_Grid(0x00,0x00,0xff,0xff);
        	sleep(DIS_DELAY);
        	Display_Grid(0x00,0xff,0x00,0xff);
        	sleep(DIS_DELAY);
        	Display_Grid(0xff,0x00,0xff,0x00);
        	sleep(DIS_DELAY);
        	Display_Grid(0xff,0x00,0x00,0xff);
        	sleep(DIS_DELAY);
        	Display_Grid(0x00,0xff,0xff,0x00);
        	sleep(DIS_DELAY);
    	}
	/* Unmap previously mapped page */	if(munmap(map_base, MAP_SIZE) == -1){		printf("Error unmapping memory\n");		close(fd);		exit(1);	}	 	close(fd);	exit(retval);}

inline void Write_Data(unsigned char dat) 
{	*(unsigned char *)(map_base+1) = dat;}

inline void Write_Instruction(unsigned char cmd)
{
	*(unsigned char *)(map_base) = cmd;}

void Initial_LCD(void)
{

	Write_Instruction(0x30);
	Write_Instruction(0x94);
	Write_Instruction(0xd1);
	
	Write_Instruction(0x20);
	Write_Data(0x08);
	sleep(1);

	Write_Instruction(0x20);
	Write_Data(0x0b);

	Write_Instruction(0x81); //Contrast adjusting
	Write_Data(0x0f); //0x36
	Write_Data(0x05); //0x04

	Write_Instruction(0xca);
	Write_Data(0x00);
	Write_Data(0x27);
	Write_Data(0x00);

	Write_Instruction(0xa6);

	Write_Instruction(0xbb);
	Write_Data(0x02);

	Write_Instruction(0xbc);
	Write_Data(0x00);
	Write_Data(0x00);
	Write_Data(0x02);

	Write_Instruction(0x75);
	Write_Data(0x00);
	Write_Data(0x9f);

	Write_Instruction(0x15);
	Write_Data(0x00);
	Write_Data(0x35);

	Write_Instruction(0x31);

	Write_Instruction(0x32);
	Write_Data(0x05);
	Write_Data(0x01);
	Write_Data(0x01);

	Write_Instruction(0x22);
	Write_Data(0x04);
	Write_Data(0x1f);
	Write_Data(0x02);

	Write_Instruction(0x20);
	Write_Data(0x1f);
	Write_Data(0x1f);
	Write_Data(0x1f);
	Write_Data(0x1f);
	Write_Data(0x1f);
	Write_Data(0x1f);
	Write_Data(0x1f);
	Write_Data(0x1f);
	Write_Data(0x1f);
	Write_Data(0x1f);
	Write_Data(0x1f);
	Write_Data(0x1f);
	Write_Data(0x1f);
	Write_Data(0x1f);
	Write_Data(0x1f);
	Write_Data(0x1f);

	Write_Instruction(0x21);
	Write_Data(0x00);
	Write_Data(0x00);
	Write_Data(0x04);
	Write_Data(0x04);
	Write_Data(0x08);
	Write_Data(0x08);
	Write_Data(0x0c);
	Write_Data(0x0c);
	Write_Data(0x10);
	Write_Data(0x10);
	Write_Data(0x14);
	Write_Data(0x14);
	Write_Data(0x18);
	Write_Data(0x18);
	Write_Data(0x1f);
	Write_Data(0x1f);

	Write_Instruction(0x34);

	Write_Instruction(0x30);
	Write_Instruction(0xaf);

}
void Display_Grid(unsigned char dat1,unsigned char dat2,unsigned char dat3,unsigned char dat4)
{
    register unsigned char i,j,k,l;
    Write_Instruction(0x15);
    Write_Data(0x00);
    Write_Data(0x35);

    Write_Instruction(0x75);
    Write_Data(0x00);
    Write_Data(0x9f);

    Write_Instruction(0x5c);
    for(k=0;k<0x14;k++)
    {
          for(i=0;i<0x04;i++)
          {
            for(j=0;j<0x14;j++)
			{
			    for(l=0;l<0x4;l++)
                    Write_Data(dat1);
			    for(l=0;l<0x4;l++)
                    Write_Data(dat2);
            }
            Write_Data(dat2);
            Write_Data(dat2);
          }
          for(i=0;i<0x04;i++)
          {
            for(j=0;j<0x14;j++)
			{
			    for(l=0;l<0x4;l++)
                    Write_Data(dat3);
			    for(l=0;l<0x4;l++)
                    Write_Data(dat4);
            }
            Write_Data(dat4);
            Write_Data(dat4);
          }
    }
	return;
}
void Display_Gray(void)
{
    register unsigned char i,j,k;
    Write_Instruction(0x15);
    Write_Data(0x00);
    Write_Data(0x35);
    Write_Instruction(0x75);
    Write_Data(0x00);
    Write_Data(0x9f);
    Write_Instruction(0x5c);
    for(k=0;k<0x04;k++)
    {
        for(i=0;i<0x0a;i++)
        {
            for(j=0;j<0xa2;j++)
                Write_Data(0x00);
        }
        for(i=0;i<0x0a;i++)
        {
	        for(j=0;j<0xa2;j++)
                Write_Data(0x4f);
        }
        for(i=0;i<0x0a;i++)
        {
        	for(j=0;j<0xa2;j++)
                Write_Data(0xaf);
        }
        for(i=0;i<0x0a;i++)
        {
	        for(j=0;j<0xa2;j++)
                Write_Data(0xff);
        }
    }
	return;
}
void Display_Picture(unsigned char pic[])
{
    unsigned char i,j,k,tmp,temp;
    Write_Instruction(0x15);
    Write_Data(0x00);
    Write_Data(0x35);
    Write_Instruction(0x75);
    Write_Data(0x00);
    Write_Data(0x9f);
    Write_Instruction(0x5c);
    for(k=0;k<0xa0;k++)
    {
        for(i=0;i<0x14;i++)
        {
			temp=pic[k*20+i];
			for(j=0x00;j<0x08;j++)
			{
				
				tmp=temp&0x80;
				if(tmp==0x80)
	            	Write_Data(0x00);
				else
					Write_Data(0xf8);
				temp=temp<<1;
			}
        }
		Write_Data(0xf8);
		Write_Data(0xf8);
    }
	return;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -