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

📄 lcd.c

📁 AtMega169芯片对LCD进行测试的C程序
💻 C
字号:
// **************************************************************
// *** 		         广 州 天 河 双 龙 电 子 公 司 	            ***
// ***                   http://www.sl.com.cn                 ***
// ***                    lcd 显示校验    		                ***
// ***                  作者:zxy@sl.com.cn                   ***
// ***                       2006年3月28日                    ***
// ***         目标MCU:MEGA169    晶振:内部(INT)8MHZ         ***
// **************************************************************
//实验效果:0-9动态循环显示
#include <iom169v.h>
#include <macros.h>
#define pLCDREG (*(unsigned char *)(0xEC)) 
const unsigned int LCD_character_table[] = // Character definitions table.
{
	0x1323,		// '0'
	0x0220,		// '1'
	0x1132,		// '2'
	0x1232,		// '3'	
	0x0231,		// '4'
	0x1213,		// '5'
	0x1313,		// '6'
	0x0222,		// '7'
	0x1333,		// '8'
	0x1233,		// '9'
	0x2220         // 'c'
};          
void port_init(void)
{
 PORTA = 0x00;
 DDRA  = 0x00;
 PORTC = 0x00; 
 DDRC  = 0x00;
 PORTD = 0x00;
 DDRD  = 0x00; 
 PORTG = 0x00;
 DDRG  = 0x00;
}
/*				微秒级延时程序	  		*/
void delay_us(int time)
	 {     
  	  do
	  	{
		 time--;
		}	
  	  while (time>1);
	 }	  
/*	  		    毫秒级延时程序			*/	 
void delay_ms(unsigned int time)
	 {
	  while(time!=0)
	  	  {		
		   delay_us(1000);
		   time--;
		  }
	 }					
void lcd_init(void)
{

LCDCRA = (1<<LCDEN);
/* 晶体振荡器*/
/* 1/3 偏置和1/4 占空比 */
LCDCRB =  (0<<LCDCS) |(1<<LCDMUX1)| (1<<LCDMUX0)| (1<<LCDPM2)| (1<<LCDPM1)| (1<<LCDPM0);
/* 选择16 为预分频因子,7 为LCD 时钟分频数*/
/* 得到帧速率为 Hz */
LCDFRR = (1<<LCDPS2) |(1<<LCDPS1) |(0<<LCDPS0) |(1<<LCDCD2) | (1<<LCDCD1) | (0<<LCDCD0);
/* 设置输出电压为3.3 V */
LCDCCR = (1<<LCDCC3) | (1<<LCDCC2) | (1<<LCDCC1) | (1<<LCDCC0);
/* 使能LCD,缺省波形并禁止所有中断*/

 LCDDR0=0x00;
 LCDDR1=0x00;
 LCDDR2=0x00;
 LCDDR3=0x00;
 LCDDR5=0x00;
 LCDDR6=0x00;
 LCDDR7=0x00;
 LCDDR8=0x00;
 LCDDR10=0x00;
 LCDDR11=0x00;
 LCDDR12=0x00;
 LCDDR13=0x00;
 LCDDR15=0x00;
 LCDDR16=0x00;
 LCDDR17=0x00;
 LCDDR18=0x00;
 LCDCRA=(1<<LCDEN);
}
void init_devices(void)
{
 
 port_init();
 lcd_init();

}

void main(void)
{
 unsigned int i,j,m,n=0;
 init_devices();
 while(1)
 		 {  
		  while ( !(LCDCRA & (1<<LCDIF)) );
		  LCDCRA = (1<<LCDEN)|(1<<LCDIF);
		  for(i=0;i<10;i++)	
		   {
		    j=LCD_character_table[i];			//左1位
			//j=j<<n;			
			m=j&0x000f;
			LCDDR0=m;
			m=(j>>4)&0x000f;
			LCDDR5=m; 
			m=(j>>8)&0x000f;
			LCDDR10=m;
			m=(j>>12)&0x000f;
			LCDDR15=m;
			
			
			j=LCD_character_table[i];		//左2位
			j=j<<2;			
			m=j&0x000f;
			LCDDR0|=m;
			m=(j>>4)&0x000f;
			LCDDR5|=m; 
			m=(j>>8)&0x000f;
			LCDDR10|=m;
			m=(j>>12)&0x000f;
			LCDDR15|=m;
			
			m=LCDDR0<<2;                     //左3位
			LCDDR0|=m;
			m=LCDDR5<<2;
			LCDDR5|=m;
			m=LCDDR10<<2;
			LCDDR10|=m;
			m=LCDDR15<<2;
			LCDDR15|=m;
			
			m=LCDDR0<<2;                        //左4位
			LCDDR0|=m;
			m=LCDDR5<<2;
			LCDDR5|=m;
			m=LCDDR10<<2;
			LCDDR10|=m;
			m=LCDDR15<<2;
			LCDDR15|=m;
			
			
			
			j=LCD_character_table[i];			//左5位		
			m=j&0x000f;
			LCDDR1=m;
			m=(j>>4)&0x000f;
			LCDDR6=m; 
			m=(j>>8)&0x000f;
			LCDDR11=m;
			m=(j>>12)&0x000f;
			LCDDR16=m;
			
			j=LCD_character_table[i];	   //左6位
			m=j&0x000f;
			LCDDR1|=m<<2;
			m=(j>>4)&0x000f;
			LCDDR6|=m<<2; 
			m=(j>>8)&0x000f;
			LCDDR11|=m<<2;
			m=(j>>12)&0x000f;
			LCDDR16|=m<<2;			
						
			j=LCD_character_table[i];			//左7位	
			m=j&0x000f;
			LCDDR1|=m<<4;
			m=(j>>4)&0x000f;			
			LCDDR6|=m<<4; 
			m=(j>>8)&0x000f;			
			LCDDR11|=m<<4;
			m=(j>>12)&0x000f;			
			LCDDR16|=m<<4;		
			
			
			j=LCD_character_table[i];			//左8位			
			m=j&0x000f;			
			LCDDR1|=m<<6;
			m=(j>>4)&0x000f;			
			LCDDR6|=m<<6; 
			m=(j>>8)&0x000f;			
			LCDDR11|=m<<6;
			m=(j>>12)&0x000f;			
			LCDDR16|=m<<6;
						
			delay_ms(1000);  
		   }  		    
		 }
 } 
 
 
 
 
 
 

⌨️ 快捷键说明

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