ATMEGA16四线驱动LCD

发布者:Serendipitous55最新更新时间:2016-01-19 来源: eefocus关键字:ATMEGA16  四线驱动  LCD 手机看文章 扫描二维码
随时随地手机看文章
#include

#include

#define uchar unsigned char
#define uint unsigned int
//定义LCD1602的端口应用
#define RS_CLI PORTB&=~BIT(PB1)
#define RS_SEI PORTB|=BIT(PB1)

#define RW_CLI PORTB&=~BIT(PB2)
#define RW_SEI PORTB|=BIT(PB2)

#define EN_CLI PORTB&=~BIT(PB3)
#define EN_SEI PORTB|=BIT(PB3)
//设置命令
#define left     //左移整屏
#define right    //右移整屏

void delay(uint ms)
{
   uint i=0,j=0;
   for(i=ms;i>0;i--)
      for(j=1141;j>0;j--);
}

void delay_us(uint us)
{
   uint i,j;
   for(i=0;i<8;i++)
   {
      for(j=0;j    NOP();
   }
}

void port_init(void)
{
   DDRB=0XFF;
   PORTB=0XFF;
}

void LCD_EN_Write(void)
{
   EN_CLI;
   delay_us(5);
   EN_SEI;
}

void LCD_Write(uchar icom,uchar data)
{
   if(0==icom)  //写命令
      RS_CLI;
   else         //写数据
      RS_SEI;
   RW_CLI;
   PORTB&=0X0F;         //先清除PORTB的高四位
   PORTB|=(data&0XF0);  //将写入的数据取出高四位先发送
   LCD_EN_Write();      //使能LCD
   delay_us(35);        //延时 确保高四位的写入正确
   data=data<<4;        //屏蔽高四位
   PORTB&=0X0F;         // 取出数据的低四位数据
   PORTB|=(data&0XF0);  //发送低四位数据
   LCD_EN_Write();      //使能LCD
}

void LCD_Clear(void)
{
   LCD_Write(0,0X01);
   delay(5);
}

void lcd_init(void)
{
   delay(15);
   LCD_Write(0,0x28);//四线数据线、16X2显示、5x7点阵
   LCD_EN_Write();  //这句很重要,切忌,丢失可能LCD就是一块黑板,什么都没有
   delay(5);
   LCD_Write(0,0x28);//四线数据线、16X2显示、5x7点阵
   LCD_Write(0,0x08);//关闭显示
   delay(5);
   LCD_Write(0,0x01);//清除屏幕显示
 
   LCD_Write(0,0x06);//当读写一字符后地址指针加一光标加一,整屏不移动
   delay(5);
  
   LCD_Write(0,0x0c);//开显示、显示光标、光标闪烁
   delay(5);
}

void LCD_Write_Byte(uchar Line,uchar addr,uchar data)
{
   if(1==Line)
     LCD_Write(0,0x80+addr);
   else if(2==Line)
     LCD_Write(0,0xc0+addr);
   LCD_Write(1,data);
}

void LCD_Write_Str(uchar Line,uchar addr,uchar *p)
{
   if(1==Line)
     LCD_Write(0,0x80+addr);
   else if(2==Line)
     LCD_Write(0,0xc0+addr);
   while(*p)
   {
      LCD_Write(1,*p);
   p++;
   }
}

void lcdshift(uchar DR,uchar n,uint nms )     //DR=0 左移 DR=1 右移 n为左移或右移的次数
                                                     //每滚动一个字符的延时delay_nms
   uchar i;
   if(DR==left)
   {
      for(i=n;i>0;i--)                    //左移
      {
        LCD_Write(0,0x18);
        delay(nms);
      }
         
   else if(DR == right)
   {
      for(i = n; i > 0; i--)              //右移
      {
         LCD_Write(0,0x1C);
         delay(nms);
      }
   }
}

void LCD_Display(void)
{
   uchar i=0,j=0;
   uchar *p="I Love BeiJin!";
   uchar *s="Marry Crismioss!";
   LCD_Write_Str(1,0,"I Love AVR!");
   delay(500);
   LCD_Write_Str(2,0,"WWW.SINA.COM/");
   delay(500);
   LCD_Clear();
   LCD_Write_Str(1,0,"my346270797");
   delay(500);
   LCD_Write_Str(2,0,"MY Home of AVR!");
   delay(500);
   LCD_Clear();
   LCD_Write_Str(1,0,"GOOD studty!");
   delay(500);
   LCD_Write_Str(2,0,"DAY DAY UP");
   delay(500);
   LCD_Clear();
  
   for(i=0;i<3;i++)
   {
    LCD_Write_Byte(1,i,'a');
    delay(500);
    LCD_Write_Byte(2,i,'b');
    delay(500);
   }
   LCD_Clear();
   while(*p)
   {
      LCD_Write_Byte(1,j,*p);
      j++;
      p++;
      delay(200);
   }
   j=0;
   LCD_Clear();
   while(*s)
   {
      LCD_Write_Byte(2,j,*s);
      j++;
      s++;
      delay(200);
   }
   LCD_Clear();
   while(*s)
   {
      LCD_Write_Byte(2,50+j,*s);
      j++;
      s++;
      delay(200);
   }
   LCD_Clear();
}

void main(void)
{
   port_init();
   delay(5);
   lcd_init();
   LCD_Clear();
   while(1)
   {
       LCD_Display();
   }
}


关键字:ATMEGA16  四线驱动  LCD 引用地址:ATMEGA16四线驱动LCD

上一篇:ATMAGE16定时器0初始值计算总结
下一篇:ATMEGA16四线驱动LCD显示时间-DS1302

推荐阅读最新更新时间:2024-03-16 14:44

OLED与LCD并非取代与被取代关系
    近期媒体上出现了大量的OLED将取代 LCD的大量报道,特别是在一些日韩大厂在OLED上正加紧布局敏感时刻,这种观点更是甚器尘上。而大陆企业进入LCD液晶显示产业本身就起步晚,产业链布局还没完善,难道又要面临被落后的命运?下面,我们从技术的发展角度来分析比较OLED和LCD发展趋势: 一、从技术发展阶段看:LCD与OLED将长期并存 现代新型显示器是指相对于传统真空显示器(CRT)而言的平板固体显示器(FPT),主要包括液晶显示器(TFT-LCD),有机电致发光显示器(OLED),等离子显示器(PDP),无机厚膜电致发光显示器(TDEL),场发射显示器(FED),发光二极管大屏幕显示器,激光显示器,投影显示器等。
[手机便携]
Atmega16在开关磁阻电机调速系统中的应用
摘要:针对开关磁阻电机调速系统的设计要求,提出了以Atmega16作为CPU,并利用该单片机硬件和软件上的优点来提高系统处理速度,简化外围电路和提高性价比的设计方法。 关键词:电机调速;开关磁阻电机;标准单脉冲数;Atmega16 1 引言 目前,随着汽车工业的发展,能源短缺问题日趋严峻。为此,国家科技部启动了“863电动汽车重大专项”,而开关磁阻电机(Switched Reluctance Motor,简称SRM)以其启动转矩大、调速范围宽等优点被作为未来电动汽车的理想驱动电机之一。开关磁阻电机是一种必须在控制器协调控制下才能运转起来的电机,因而控制器性能的好坏直接影响电机的运转性能。以往控制系统所采用的CPU主要有三种
[单片机]
51单片机lcd1602d电子时钟设计
由于课程设计需要,本人做了一个基于51单片机控制的lcd1602d显示的电子时钟电子设计产品。可以显示万年历,星期。 本来还想加上温湿度的检测,发现屏幕空间不够用了。。有需要可以再另外共享那个设计。第一次 单片机源程序如下: #include reg52.h #define uint unsigned int #define uchar unsigned char sbit rs=P1^0; sbit rw=P1^1; sbit en=P1^2; sbit key_set=P3^4; sb
[单片机]
51单片机<font color='red'>lcd</font>1602d电子时钟设计
Diodes 推出最高输入 40V 的 LED/LCD 升压控制器
Diodes 公司 (Nasdaq:DIOD) 推出 AL3353 最高输入 40V 的 LED/LCD 升压控制器,适用于各种需要恒定电压或恒定电流的产品应用,以 100:1 的调光比例驱动显示器和背光。非常适合用于 LCD 电视、LCD 显示器、平板显示器的背光驱动器,以及商业照明应用的 LED 驱动器。 AL3353 是多功能升压控制器,具 9V 至 40V 的宽广输入电压,可轻松适应各种常见供应电压,如 12V、24V 和 36V,无须另行配置或担心效率耗损。AL3353 更配备以专有技术为基础的电路保护,全面且稳固。 透过采用偏移消除截波电路的 Diodes 动态线性补偿技术,AL3353 能维持温度和制程变化的
[电源管理]
PIC单片机+LCD12864显示汉字程序
#include pic.h #define RS RD2 #define CS2 RD1 #define CS1 RD0 #define E RD4 #define RW RD3 #define BUSY RC7 const unsigned char tab2 ={ /*-- 文字: 福 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x08,0x08,0x89,0xCE,0x28,0x18,0x02,0x7A,0x4A,0x4A,0x4A,0x4A,0x4A,0x7A,0x02,0x00, 0x02,0x01,0x00,0xFF,0x01,0x02,0xF
[单片机]
PIC单片机+<font color='red'>LCD</font>12864显示汉字程序
中国成为LCD驱动芯片竞争焦点
   对于显示终端市场而言,无论是大屏幕的台式机液晶显示器、液晶电视、笔记本电脑,还是小屏幕的手持终端设备,TFT-LCD面板和驱动芯片都是关键器件。而对于这一市场而言,高成长率的中国市场成为兵家必争之地。TFT-LCD面板行业在中国的角逐已经逐步展开,LCD驱动芯片也开始面临生存压力。对于我国内地企业而言,这一波冲击虽然少了些美国大厂,但却直接与日本、韩国以及我国台湾地区的厂商进行激烈碰撞。由于同为亚洲厂商,企业间的竞争将更加白热化。      全球冲击在亚洲 亚洲潜力在中国   国际市场风云变幻,与TFT-LCD面板相结合,LCD驱动芯片也是日本。与美国的半导体芯片策略相同,只不过是一个集中在半导体核心而另一个则集中在显示
[焦点新闻]
atmega16/32加锁后的解锁方法
先介绍我的开发环境,笔记本用的操作系统是win7 64位,我用的avr是atmega16A,用progisp烧写程序,今天下午烧了一个程序后再往里烧程序就弹出“进入编程模式错误,请减产编程器与目标板的连接是否正确”,也就是传说中的“Chip Enable Program Error”对话框。 到网上找问题,大部分都是自己焊的板子出的问题,解决方法要么是换块新的atmega16,要么是重新检查电路,修改电路,对于我这种用着用着突然变成这样的介绍几乎没有,我以为是什么东西烧了,但感觉没闻到什么味道,也没乱写什么程序,挺奇怪的。 还是感谢progisp那个软件,在我下的软件里有个isp编程进入不了编程模式的总结,里面有句话说电压
[单片机]
<font color='red'>atmega16</font>/32加锁后的解锁方法
ATmega16驱动LCD2004的源程序(avr)
/*============================================== 20x4字符液晶主程序,编译软件(ICCAVR_6.31) CPU内部晶振8M 数据线B0~B7接PORTB, E=D7 RW=D6 RS=D5 =========================================== 接线图如下: _______________ ______________ | --1|GND | | --2| 5V | | --3|V0 | | | | PD5|--------4|RS | PD6|--------5|RW | PD7|--------6|E | CPU | | | ATmmega1
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved