本实验开发板的电源选择5V。
单片机源程序:
- //ATMEGA128的1602型LCD显示驱动程序
- //编译环境 ICCAVR 7.16A
- //系统时钟7.3728MHZ,设置熔丝位为外部高频石英晶体振荡,启动时间4.1ms
- //忠兴电子元件店编辑
- //日期:2010.01.14
- //***********************************************************************
- // 包含文件
- //***********************************************************************
- #include
- #include
- #include
- #include
- #define uchar unsigned char
- #define uint unsigned int
- #define RS_CLR PORTF &= ~(1 << PF1) //RS置低
- #define RS_SET PORTF |= (1 << PF1) //RS置高
- #define RW_CLR PORTF &= ~(1 << PF2) //RW置低
- #define RW_SET PORTF |= (1 << PF2) //RW置高
- #define EN_CLR PORTF &= ~(1 << PF3) //E置低
- #define EN_SET PORTF |= (1 << PF3) //E置高
- #define Data_IO PORTA //液晶数据口
- #define Data_DDR DDRA //数据口方向寄存器
- #define D_LE0 PORTD &= ~(1 << PD4) //数码管段控制位为0,锁存端口数据
- #define D_LE1 PORTD |= (1 << PD4) //数码管段控制位为1,锁存器输出与端口一致
- #define W_LE0 PORTD &= ~(1 << PD5) //数码管位控制位为0
- #define W_LE1 PORTD |= (1 << PD5) //数码管位控制位为1
- //*************************************************************************
- // 初始化子程序
- //*************************************************************************
- void system_init()
- {
- Data_IO = 0xFF; //电平设置
- Data_DDR = 0xFF; //方向输出
- PORTF = 0xFF; //电平设置
- DDRF = 0xFF; //方向输出
- PORTD=0xFF;
- DDRD=0xFF;
- D_LE1; //关掉数码管,以免显示乱码
- W_LE1;
- Data_IO=0xFF; //关数码管
- W_LE0;
- }
- //***********************************************************************
- // 显示屏命令写入函数
- //***********************************************************************
- void LCD_write_com(unsigned char com)
- {
- RS_CLR;
- RW_CLR;
- EN_SET;
- Data_IO = com;
- delay_nms(5);
- EN_CLR;
- }
- //***********************************************************************
- // 显示屏数据写入函数
- //***********************************************************************
- void LCD_write_data(unsigned char data)
- {
- RS_SET;
- RW_CLR;
- EN_SET;
- Data_IO = data;
- delay_nms(5);
- EN_CLR;
- }
- //***********************************************************************
- // 显示屏清空显示
- //***********************************************************************
- void LCD_clear(void)
- {
- LCD_write_com(0x01);
- delay_nms(5);
- }
- //***********************************************************************
- // 显示屏字符串写入函数
- //***********************************************************************
- void LCD_write_str(unsigned char x,unsigned char y,unsigned char *s)
- {
- if (y == 0)
- {
- LCD_write_com(0x80 + x);
- }
- else
- {
- LCD_write_com(0xC0 + x);
- }
- while (*s)
- {
- LCD_write_data( *s);
- s ++;
- }
- }
- //***********************************************************************
- // 显示屏单字符写入函数
- //***********************************************************************
- void LCD_write_char(unsigned char x,unsigned char y,unsigned char data)
- {
- if (y == 0)
- {
- LCD_write_com(0x80 + x);
- }
- else
- {
- LCD_write_com(0xC0 + x);
- }
- LCD_write_data( data);
- }
- //***********************************************************************
- // 显示屏初始化函数
- //***********************************************************************
- void LCD_init(void)
- {
- DDRA = 0xFF; //I/O口方向设置
- DDRA |= (1 << PA5) | (1 << PA6) | (1 << PA7);
- LCD_write_com(0x38); //显示模式设置
- delay_nms(5);
- LCD_write_com(0x08); //显示关闭
- delay_nms(5);
- LCD_write_com(0x01); //显示清屏
- delay_nms(5);
- LCD_write_com(0x06); //显示光标移动设置
- delay_nms(5);
- LCD_write_com(0x0C); //显示开及光标设置
- delay_nms(5);
- }
- //*************************************************************************
- // 主程序
- //*************************************************************************
- void main(void)
- {
- unsigned char i;
- unsigned char *p;
- system_init(); //系统初始化,设置IO口属性
- delay_nms(100); //延时100ms
- LCD_init(); //液晶参数初始化设置
- while (1)
- {
- i = 1;
- p = "zhongxingdianzi"; //字符串输出显示
- …………限于本文篇幅 余下代码请从电子发烧友下载附件…………
下载:
9.1602液晶显示实验.zip
|