本实验开发板的电源选择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"; //字符串输出显示 …………
上一篇:基于AVR单片机的多功能智能小车系统设计
下一篇:AVR单片机高精度延时程序汇编语言 可以直接使用
推荐阅读最新更新时间:2024-11-01 18:21