📄 1602zhuzi.txt
字号:
#include <iom8v.h>
#include <macros.h>
/*
#define RS PORTC0
#define RW PORTC1
#define EN PORTC2
#define LCD_DATA 0Xff
*/
#define RS 0
#define RW 1
#define EN 2
#define LCD_DATA 0Xff
#define PORT_DATA PORTD
void LCD_init ();
void LCD_en_write ();
void LCD_write_char(unsigned char com);
void LCD_wait_ready();
void LCD_set_xy(unsigned char x,unsigned char y);
void LCD_write_string (unsigned char X,unsigned char Y,unsigned char *s);
void delay_nus (unsigned int n);
void delay_nms (unsigned int n);
void delay_1nus()
{
asm("nop");
}
void delay_nus(unsigned int n)
{
unsigned int i;
for(i=0;i<n;i++)
delay_1nus();
}
void delay_1nms()
{
unsigned int i ;
for(i=0;i<1140;i++)
;
}
void delay_nms (unsigned int n)
{
unsigned int i;
for (i=0;i<n;i++)
delay_1nms();
}
void LCD_wait_ready() //LCD是否空闲
{
unsigned int temp;
DDRD=0X00;//===
PORTB&=~(1<<RS);
PORTB|=(1<<EN);
PORTB|=(1<<RW);
while((PIND&0x80)==0x80){;}
PORTB&=~(1<<EN);
DDRD=0Xff;//===
}
void LCD_en_write () //使能EN
{
PORTB|=0X04;
delay_nus(1);
PORTB&=~0X04;
}
void LCD_write_char(unsigned char com)//写指令
{
LCD_wait_ready ();
DDRD=0XFF;//===
PORTB&=~(1<<RS);
PORTB&=~(1<<RW);
PORTD&=0x00;//===
PORTD|=com;//===
PORTB|=(1<<EN);
asm("nop");
PORTB&=~(1<<EN);
}
void clear () //清屏
{
LCD_write_char(0x01);
}
void LCD_init() //LCD初始化
{
delay_nms(15);
DDRB|=0X07;
LCD_write_char(0x38);//配置16*2显示,5*7点阵,8位数据
delay_nms(1);
LCD_write_char(0x38);//配置16*2显示,5*7点阵,8位数据
delay_nms(1);
LCD_write_char(0x08);//关显示
delay_nms(1);
LCD_write_char(0x01);//清屏
delay_nms(2);
LCD_write_char(0x06);//读写字符后地址指针加1;
delay_nms(2);//设置延时40us
LCD_write_char(0x01);//开显示.不显示光标,光标不闪烁
delay_nms(1);//设置延时40us
}
void LCD_writedata(unsigned char data) //写数据
{
LCD_wait_ready ();
DDRD=0XFF;//===
PORTB|=(1<<RS);//写数据指令
PORTB&=~(1<<RW);
PORTD&=0x00;//===
PORTD|=data;//===
PORTB|=(1<<EN);
asm("nop");
PORTB&=~(1<<EN);
}
void w_character(unsigned char character)
{
LCD_writedata(character);
}
void lcd_set_xy( unsigned char x, unsigned char y )
{
unsigned char address;
if (y == 0)
address = 0x80 + x;
else
address = 0xc0 + x;
LCD_write_char(address);//一定需要检查忙信号,所以为1
}
void display(unsigned char x,unsigned char y,unsigned char char_data) //显示函数
{
lcd_set_xy(x,y);
LCD_writedata(char_data);
}
void display_string(unsigned char x,unsigned char y,unsigned char *ptr)//字符串显示
{
lcd_set_xy(x,y);
while (*ptr)
{
LCD_writedata(*ptr);
ptr++;
}
}
void main()
{
LCD_init();
display(0,2,'o');
while(1)
{
;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -