📄 n8bit._c
字号:
//ICC-AVR application builder : 2008-11-2 11:21:49
// Target : M32
// Crystal: 8.0000Mhz
#include <iom32v.h>
#include <macros.h>
//Signal bit definitions
#define lcd_data PORTD
#define lcd_cs 0
#define lcd_rst 1
#define lcd_cd 2
//#define lcd_dta 7 //PD7
#define lcd_clk 5
#define SetLcdA0 PORTA|=(1<<lcd_cd);
#define ClrLcdA0 PORTA&=~(1<<lcd_cd);
#define SetLcdWR PORTA |=(1<<lcd_clk);
#define ClrLcdWR PORTA &=~(1<<lcd_clk);
#define Setled PORTA|=(1<<4);
#define Clrled PORTA&=~(1<<4);
#define SetLcdRST PORTA|=(1<<lcd_rst);
#define ClrLcdRST PORTA&=~(1<<lcd_rst);
#define SetLcdCS PORTA|=(1<<lcd_cs);
#define ClrLcdCS PORTA&=~(1<<lcd_cs);
const unsigned char AVR_LOGO[18624];
void port_init(void)
{
PORTA = 0x37;
DDRA = 0xFF;
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0x00;
DDRC = 0x00;
PORTD = 0xff;
DDRD = 0xff;
}
//call this routine to initialize all peripherals
void init_devices(void)
{
CLI(); //disable all interrupts
port_init();
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x00; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
void Delay_1us(void)//1us延时函数
{
asm("nop");
}
void Delay_nus(unsigned int n)//N us延时函数
{
unsigned int i=0;
for (i=0;i<n;i++)
Delay_1us();
}
void Delay_1ms(void)//1ms延时函数
{
unsigned int i;
for (i=0;i<1140;i++);
}
void Delay_nms(unsigned int n)//N ms延时函数
{
unsigned int i=0;
for (i=0;i<n;i++)
Delay_1ms();
}
void write_data(unsigned char data)
{
SetLcdA0;
ClrLcdCS;
lcd_data=data;
ClrLcdWR;
// asm("nop");
SetLcdWR;
SetLcdCS;
}
void write_data16(unsigned char dataH,unsigned char dataL)
{
SetLcdA0;
ClrLcdCS;
lcd_data=dataH;
ClrLcdWR;
// asm("nop");
SetLcdWR;
lcd_data=dataL;
ClrLcdWR;
// asm("nop");
SetLcdWR;
SetLcdCS;
}
void write_cmd(unsigned char data)
{
ClrLcdA0;
ClrLcdCS;
lcd_data=0;
ClrLcdWR;
// asm("nop");
SetLcdWR;
lcd_data=data;
ClrLcdWR;
// asm("nop");
SetLcdWR;
SetLcdCS;
}
void LCD_WR_REG(unsigned char reg,unsigned int data16)
{
unsigned char dataH,dataL;
dataH=data16/256;
dataL=data16&0xff;
ClrLcdA0;
ClrLcdCS;
lcd_data=0;
ClrLcdWR;
//asm("nop");
SetLcdWR;
lcd_data=reg;
ClrLcdWR;
// asm("nop");
SetLcdWR;
SetLcdA0;
lcd_data=dataH;
ClrLcdWR;
// asm("nop");
SetLcdWR;
lcd_data=dataL;
ClrLcdWR;
// asm("nop");
SetLcdWR;
SetLcdCS;
}
void LCD_Init()
{
LCD_WR_REG(0x00,0x0001);
LCD_WR_REG(0x12,0x0109);
LCD_WR_REG(0x13,0x0e1d);
LCD_WR_REG(0x14,0x6224);
LCD_WR_REG(0x10,0x2004);
Delay_nms(50);
LCD_WR_REG(0x13,0x0e5d);
Delay_nms(50);
LCD_WR_REG(0x01,0x010f);
LCD_WR_REG(0x02,0x0700);
LCD_WR_REG(0x03,0x1030);
LCD_WR_REG(0x07,0x0000);
LCD_WR_REG(0x08,0x0202);
LCD_WR_REG(0x0b,0x0001);
LCD_WR_REG(0x0c,0x0000);
LCD_WR_REG(0x40,0x0000);
LCD_WR_REG(0x42,0x8300);
LCD_WR_REG(0x43,0x0000);
LCD_WR_REG(0x44,0x8304);
LCD_WR_REG(0x45,0x7f00);
LCD_WR_REG(0x25,0x0002);
LCD_WR_REG(0x26,0x0002);
LCD_WR_REG(0x30,0x0000);
LCD_WR_REG(0x31,0x0102);
LCD_WR_REG(0x32,0x0001);
LCD_WR_REG(0x33,0x0202);
LCD_WR_REG(0x34,0x0707);
LCD_WR_REG(0x35,0x0707);
LCD_WR_REG(0x36,0x0707);
LCD_WR_REG(0x37,0x0202);
LCD_WR_REG(0x07,0x0005);
Delay_nms(50);
LCD_WR_REG(0x07,0x0015);
Delay_nms(50);
LCD_WR_REG(0x21,0x0004);
Delay_nms(50);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -