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

📄 lcd_direct_demo.c

📁 128×64图形液晶显示程序
💻 C
字号:
#include <reg51.h>
#include <math.h>
#include <stdio.h>
#include <absacc.h>
#include <intrins.H>

#define uchar unsigned char
/**********液晶显示器接口引脚定义**********/
sbit cs0lcm=P2^2;
sbit cs1lcm=P2^3;
sbit dilcm=P2^0;
sbit rwlcm=P2^1;
sfr  datalcm=0x80;
#define CWADD2 XBYTE[0X8800]
#define CRADD2 XBYTE[0X8A00]
#define DWADD2 XBYTE[0X8900]
#define DRADD2 XBYTE[0X8B00]
#define CWADD3 XBYTE[0X8400]
#define CRADD3 XBYTE[0X8600]
#define DWADD3 XBYTE[0X8500]
#define DRADD3 XBYTE[0X8700]
/**********常用操作命令和参数定义**********/
#define SETX      0x40
#define SETY      0xb8
#define lcdbusy   0x80
/**********显示分区边界位置**********/
#define modl  0x00
#define modm  0x40
#define modr  0x80
#define lcmlimit 0xc0
/**********全局变量定义**********/
uchar col,row,cbyte;
bit xy;
/**********函数列表**********/
void lcminit (void);
void delay (uchar ms);
void lcmcls (void);
void write_com_mid (uchar);
void write_data_mid (uchar);
void read_data_mid (uchar);
void write_com_right (uchar);
void write_data_right (uchar);
void read_data_right (uchar);
void test (uchar);

void lcdbusym(void);
void lcdbusyr(void);
void putedot(uchar);
void putcdot(uchar);
void putstr(uchar *puts,uchar i);

void point(uchar col,uchar row);
void locatexy(void);
void linehv(uchar length);
void linexy(uchar endx,uchar endy);
void rollscreen(uchar length);
/**********数组列表**********/
uchar code ezk[];
uchar code hzk[];
uchar code str1[];
uchar code str2[];
uchar code str3[];
uchar code str4[];

void delay (uchar ms)
{ uchar us,usn;
  while(ms!=0)
  {usn=4;
    while(usn!=0)
      {us=0xf0;
      while(us!=0){us--;};
       usn--;
       }
     ms--;
   }
}

void write_com_mid(uchar c)
{
	uchar in;
        while(1)
        {
           in=CRADD2;
           if((in & lcdbusy)==0)
              break;
         }
        CWADD2=c;
}
void write_data_mid(uchar d)
{
	uchar in;
        while(1)
        {
           in=CRADD2;
           if((in & lcdbusy)==0)
              break;
         }
        DWADD2=d;
}
void read_data_mid(uchar d)
{
	uchar in;
        while(1)
        {
           in=CRADD2;
           if((in & lcdbusy)==0)
              break;
         }
        d=DRADD2;
}
void write_com_right(uchar c)
{
	uchar in;
        while(1)
        {
           in=CRADD3;
           if((in & lcdbusy)==0)
              break;
         }
        CWADD3=c;
}
void write_data_right(uchar d)
{
	uchar in;
        while(1)
        {
           in=CRADD3;
           if((in & lcdbusy)==0)
              break;
         }
        DWADD3=d;
}
void read_data_right(uchar d)
{
	uchar in;
        while(1)
        {
           in=CRADD3;
           if((in & lcdbusy)==0)
              break;
         }
        d=DRADD3;
}

void lcmcls(void)
{
        uchar i,j;
        for(i=0;i<8;i++)
        {    write_com_mid(i+SETY);
             write_com_right(i+SETY);
	     for(j=0;j<64;j++)
	    {
                write_com_mid(j+SETX);
		write_com_right(j+SETX);
                write_data_mid(0x00);
	     write_data_right(0x00);
	     }
        }
}

void lcminit(void)
{
        write_com_mid(0x3e);
        write_com_right(0x3e);

        write_com_mid(0x3f);
        write_com_right(0x3f);

        write_com_mid(0xc0);
        write_com_right(0xc0);

        lcmcls();
}

void test(uchar num)
{
	uchar i,j;
	for(i=0;i<8;i++)
	{
		write_com_mid(i+SETY);
		write_com_right(i+SETY);
                for(j=0;j<64;j++)
		{
			write_com_mid(j+SETX);
			write_com_right(j+SETX);
			write_data_mid(num);
			write_data_right(num);
                 }
         }
}

void point(uchar col,uchar row)
{
        uchar x,y;
        uchar x1,y1;
        x1=col;
        y1=row;
        y=y1&0x07;
        y1=y1>>3;
	x=0x01;
	x=x<<y;
	switch(x1&0xc0)
	{
		case 0x40:{
			   write_com_mid (x1-0x40+SETX);
		           write_com_mid (y1+SETY);
		           write_data_mid(x);
                           break;
		           }
		case 0x80:{
			   write_com_right (x1-0x80+SETX);
                   write_com_right (y1+SETY);
		           write_data_right(x);
                           break;
	                   }
        }
}

void main()
{
        uchar dbyte;
        lcminit();
        dbyte=0xf0;
        test(dbyte);
        delay(100000);
	lcmcls();
	point(64,0);
        point(127,0);
        point(128,0);
        point(191,0);
        point(64,63);
        point(127,63);
        point(128,63);
        point(191,63);
        while(1);
		}























⌨️ 快捷键说明

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