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

📄 lcm._c

📁 8位液晶屏LCM0825的点亮源代码
💻 _C
字号:
//lcm.c
//液晶显示程序
#include<iom8v.h>
void delay_1us(void)//1us延时程序
 {
  unsigned  int k;
  for(k=1;k<10;k++) 
  ;
 }

 void delay_1ms(void)//1ms延时程序
 {
  unsigned  int k;
  for(k=1;k<856;k++) 
  ;
 }
  void delay(unsigned int m)//延时m ms程序
 {
  unsigned  int l;
  
  for(l=0;l<m;l++) 
  delay_1ms();
 }

 void data_0(unsigned int n)//传输N个0
{ int i;
   for(i=0;i<n;i++)
   {
   
   PORTD&=0x7F; delay_1us();//data=0
   PORTD&=0xBF;delay_1us();//wr=0
   PORTD|=0x40; delay_1us();//wr=1
   }
 }
 
 void data_1(unsigned int n)//传输N个1
{ int i;
   for(i=0;i<n;i++)
   {
    PORTD&=0x7f; 
   PORTD|=0x80;delay_1us();//data=1
   PORTD&=0xBF;delay_1us();//wr=0
   PORTD|=0x40;delay_1us();//wr=1
   }
 }
 

void write_lcd(char n,unsigned char data )
 {
   char j;
   unsigned char dat=data;
    DDRD=0xf0; delay_1us();//PD4为CS,PD6为WR,PD7为DATA
 PORTD=0xff; delay_1us();
  switch(n)
  { 
   case 12://写命令
   {
  
    PORTD&=0xef;delay_1us(); 
	data_1(1);
	data_0(2);
	for(j=0;j<8;j++)
    { 
     PORTD&=0x7f; delay_1us();      
     PORTD|=(dat&0x80);delay_1us(); //可能存在数据类型不同错误
     PORTD&=0xbf;delay_1us(); 
	 PORTD|=0x40;delay_1us();                 
     dat=(dat<<1);delay_1us();  
	 
    }
	data_0(1);
	PORTD|=0x10;delay_1us(); 
	PORTD|=0xc0;delay_1us();
	//delay(100);
   }break;
case 13://写最低位数据
   {
  
  
    PORTD&=0xef;delay_1us(); 
	 data_1(1);
   data_0(1);
   data_1(2);
   data_0(1);
	for(j=0;j<8;j++)
    { 
	
     PORTD&=0x7f;  delay_1us();       
     PORTD|=(dat&0x80);delay_1us(); 
     PORTD&=0xbf; delay_1us(); 
	 PORTD|=0x40;  delay_1us();             
     dat=(dat<<1); delay_1us(); 
    }
	PORTD|=0x10;delay_1us(); 
	
	PORTD|=0xc0;delay_1us();
	
	//return(read_lcd()==)  
	
	   }break;
   case 10://将高七位全部置零
   {
  
    dat=(dat<<3);
    PORTD&=0xef;delay_1us(); 
	 data_1(1);
   data_0(1);
   data_1(2);
	for(j=0;j<5;j++)
    { 
	
     PORTD&=0x7f;  delay_1us();       
     PORTD|=(dat&0x80);delay_1us(); 
     PORTD&=0xbf; delay_1us(); 
	 PORTD|=0x40;  delay_1us();             
     dat=(dat<<1); delay_1us(); 
    }
	data_0(4);
	PORTD|=0x10;delay_1us(); 
	
	PORTD|=0xc0;delay_1us();
	
	//return(read_lcd()==)  
	
	   }break;
   
 }
}
 void main(void)
{
unsigned char init[4]={0x29,0x18,0x01,0x03}, address[20]={0x06,0x10,0x03,0x1e,0x07,0x1a,              
                                                                               0x06,0x13,0x05,0x1b,0x05,0x1f,
															                   0x07,0x10,0x07,0x1f,0x0b,0x13,
															                   0x07,0x1d};//初始化命令字表和0~9数字表
                                                                                                                                                                                               
 char i,add;    
 unsigned int j;                                                                                      
 DDRD|=0xf0;delay_1us();   
 PORTD|=0xf0;delay_1us();   
for(i=0;i<10;i++)
   	   for(j=0;j<6000;j++);	  
 for(i=0;i<4;i++)//初始化
  write_lcd(12,init[i]);
  for(add=2;add<16;add++)//将高七位置零
  write_lcd(10,add);
 //delay(300);
 while(1)
  {
  for(i=0;i<20;i++) //写一个数据延时一段时间
   {
    write_lcd(13,address[i++]);
   write_lcd(13,address[i]);
  
	delay(200);
   }
  }
}

⌨️ 快捷键说明

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