单片机用的是AVR系列的Atmega64 LCD1602源程序+proteus仿真
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #include <iom64v.h>
- #include <macros.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define RS_H PORTE|=BV(0)
- #define RS_L PORTE&=~BV(0)
- #define RW_H PORTE|=BV(1)
- #define RW_L PORTE&=~BV(1)
- #define EN_H PORTE|=BV(2)
- #define EN_L PORTE&=~BV(2)
- void delay(uint ms)
- {
- uint i,j;
- for(i=0;i<ms;i++)
- {
- for(j=0;j<1141;j++);
- }
- }
- void write_com(uchar com) //写命令函数
- {
- RS_L; //RS置低,写指令
- RW_L; //RW置低,写操作
- PORTD=com;
- delay(1);
- EN_H; //使能端拉高
- delay(1);
- EN_L; //使能端拉低
- }
- void write_dat(uchar dat) //写数据函数
- {
- RS_H;
- RW_L;
- PORTD=dat;
- delay(1);
- EN_H;
- delay(1);
- EN_L;
- }
- void Lcd1602_init()
- {
- DDRD=0XFF;
- DDRE|=BV(0)|BV(1)|BV(2);
- EN_L;
- write_com(0X38);
- delay(1);
- write_com(0X01);
- delay(1);
- write_com(0X06);
- delay(1);
- write_com(0X0c);
- delay(1);
- }
- void Lcd1602_Display(uchar addr,uchar num,uchar dat)
- {
- write_com(addr+num);
- write_dat(dat);
- }
- void main()
- {
- uchar i;
-
- Lcd1602_init();
- //write_com(0X80+n); n=0,1,2...15 第一行显示
- //write_com(0x80+0x40+n); n=0,1,2...15 第二行显示
- Lcd1602_Display(0x80,0,'5');
- Lcd1602_Display(0x80+0x40,0,'5');
-
- }
复制代码
所有资料51hei提供下载:
LCD1602.zip
(72.6 KB, 下载次数: 62)
|