📄 lcd.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 + -