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

📄 扫描液晶.c

📁 对新的液晶进行扫描
💻 C
字号:


#include<reg52.h>
#include <absacc.h>
#include <math.h>
#include <INTRINS.H>

#define LCMCP XBYTE [0xdfff]  // 命令口
#define LCMDP XBYTE [0xdbff]  // 数据口
#define  uchar unsigned char
#define  uint unsigned int

uchar code font[]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
};

sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
void Delay(unsigned char CNT)
{
  uchar i;
  while (CNT-- !=0)
    for (i=10000; i !=0; i--);
} 


 //读数据
 uchar read_data(void)
{
  uchar i;
   i=LCMCP;
   return i;
 }

void write_data(uchar data_d)
{
LCMDP=data_d;
 }
 void write_contr(uchar data_c)
{
LCMCP=data_c;
 }

void lcd_double_operator(uchar data1,uchar data2,uchar com){
 uchar i;
 i=0; 
 while(i!=0x02)
 {
  i=read_data();
  i=i&0x02;
 }
 write_data(data1);    /*参数1*/
 i=0;
 while(i!=0x02)
 {
  i=read_data();
  i=i&0x02;
 }
 write_data(data2);         /*参数2*/
 i=0;
 while(i!=0x01)
 {
  i=read_data();
  i=i&0x01;
 }
 write_contr(com);       /*指令*/
}

void lcd_single_operator(uchar data1,uchar com){
 uchar i;
 i=0;
 while(i!=0x02)
 {
  i=read_data();
  i=i&0x02;
 }
 write_data(data1);     /*参数1*/
  i=0;
 while(i!=0x01)
 {
  i=read_data();
  i=i&0x01;
 }
 write_contr(com);        /*指令*/
}

void lcd_none_operator(uchar com){
 uchar i;
 i=0;
 while(i!=0x01)
 {
  i=read_data();
  i=i&0x01;
 }
 write_contr(com);         /*指令*/
 }
 
void lcd_ini(){
 lcd_double_operator(0x00,0x00,0x40);
 lcd_double_operator(0x1e,0x00,0x41);
   lcd_double_operator(0x00,0x0c,0x42);
 lcd_double_operator(0x1e,0x00,0x43);
 lcd_none_operator(0xa0);
 lcd_none_operator(0x84);
 lcd_none_operator(0x9c);
 }
 
void creat_cgram(uchar count){
 uint i,x;
 x=count*4;
 x=x*8;
 lcd_double_operator(0x03,0x00,0x22);
 lcd_double_operator(0x00,0x1c,0x24);
 for (i=0;i<x;i++){
 lcd_single_operator(font[i],0xc0);
  }
 }
 
void lcd_clear(){
 uint i;
 lcd_double_operator(0x00,0x00,0x24);    //首地址
 for(i=0;i<0x1000;i++){
  lcd_single_operator(0x00,0xc0);      
  }
 }
   
void write_chinese(uchar cursor_x,uchar cursor_y,uchar ct_code,uchar attr){
  uint x;
 x=cursor_y*30;
 x=x+cursor_x;                            //y=cursor_y*30+cursor_x
  lcd_double_operator((x&0x00ff),(x/256),0x24);
 lcd_single_operator(ct_code,0xc4);
 lcd_double_operator((x&0x00ff),(x/256)+0x0c,0x24);
 lcd_single_operator(attr,0xc4);
 lcd_double_operator(((x&0x00ff)+1),(x/256),0x24);
 lcd_single_operator(ct_code+2,0xc4);
 lcd_double_operator(((x&0x00ff)+1),(x/256)+0x0c,0x24);
 lcd_single_operator(attr,0xc4);
 x+=30;
 lcd_double_operator((x&0x00ff),(x/256),0x24);
 lcd_single_operator(ct_code+1,0xc4);
 lcd_double_operator((x&0x00ff),(x/256)+0x0c,0x24);
 lcd_single_operator(attr,0xc4);
 lcd_double_operator(((x&0x00ff)+1),(x/256),0x24);
 lcd_single_operator(ct_code+3,0xc4);
 lcd_double_operator(((x&0x00ff)+1),(x/256)+0x0c,0x24);
 lcd_single_operator(attr,0xc4);
 }

void main(void)
{ 
 uchar i,j,k,l,m;
 lcd_ini();
 lcd_clear();
 creat_cgram(0x02);
 lcd_double_operator(0x08,0x00,0x21);
 while(1)
 {
    for(i=0;i<16;i=i+2)
   {for(j=0;j<19;j=j+2)
    {write_chinese(j,i,0x84,0x00);
	    for(m=0;m<150;m++)
		Delay(10000);
	   do
	   {if(key2==0)
         { for(k=0;k<16;k=k+2)
         {for(l=0;l<19;l=l+2)
           write_chinese(l,k,0x84,0x00);}
         }
		 if(key3==0)
         lcd_clear();
	   }
      while(key1==1);
      lcd_clear();
	   Delay(1000);
	  }
     }
	 Delay(1000);
    lcd_clear();
  } 
  }
  

⌨️ 快捷键说明

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