AVR 1602液晶字符移动

发布者:Yuexiang最新更新时间:2015-06-23 来源: 51hei关键字:AVR  1602液晶  字符移动 手机看文章 扫描二维码
随时随地手机看文章
#include
#include
#define uchar unsigned char
#define uint unsigned int
 uchar str1[16]="This is a ASCII";
 uchar str2[16]="      Test     ";
#include "1602.h"
void port_init()
{
  PORTA=0xff;
  DDRA=0xff;
  PORTB=0xff;
  DDRB=0xff;
  PORTD=0xff;
  DDRD=0xff;
}
void init()
{
  MCUCR=0x0a;
  GICR=0xc0;
  SREG=0x80;
}
void disline(uchar w)       //字符移动函数
{
  uchar i;
  for(i=0;i<16;i++)
  {
    displayonechar(i,1,w);          //字符显示在第二行 即字母A--Z
    w++;
    if(w>90)w=65;                   //字符显示限定范围A--Z
   
  }
  delay(500);
}
   
void main()
{
  uchar w=65;
  port_init();
  init();
  //1602设备初始化
   delay(15);
writecmd(0x38);
delay(5);
writecmd(0x38);
delay(5);
writecmd(0x38);
writecmd(0x80);
writecmd(0x01);
writecmd(0x06);
writecmd(0x0c);
delay(500);
  //初始化结束
    writecmd(0x01);
    writecmd(0x0c);
    displaychar(0,0,str1);
    delay(1000);
    writecmd(0x01);
    writecmd(0x0c);
    displaychar(0,1,str2);
    delay(1000);
    writecmd(0x01);
    writecmd(0x0c);
  while(1)
  { 
  disline(w++);               //字符移动模式 
  if(w>90)w=65;
  }
}

//-----------------1602库函数-----------------------
#define RS PORTB_Bit0
#define RW PORTB_Bit1
#define EN PORTB_Bit2
#define DATA PORTA
#define busy 0x80
[page]
void delay(int k)
{
  int i,j;
  for(i=0;i   {
    for(j=0;j<1140;j++);
  }
}
void wait()
{
  uchar val;
  DATA=0xff;
  RS=0;
  RW=1;
  __no_operation();
  __no_operation();
  EN=1;
  __no_operation();
  __no_operation();
  DDRA=0x00;
  val=PINA;
  while(val&busy)
  {
    val=PINA;
  }
  EN=0;
  DDRA=0xff;
}

void writecmd(uchar cmd)
{
  wait();
  RS=0;
  RW=0;
  __no_operation();
  DATA=cmd;
  __no_operation();
  EN=1;
  __no_operation();
  __no_operation();
  EN=0;
}
void writedata(uchar data)
{
  wait();
  RS=1;
  RW=0;
 __no_operation();
 DATA=data;
 __no_operation();
 EN=1;
 __no_operation();
 __no_operation();
 EN=0;
}
  
void displayonechar(uchar x,uchar y,uchar dda)
{
  y&=0x01;
  x&=0x0f;
  if(y)x|=0x40;
  x|=0x80;
  writecmd(x);
  writedata(dda);
}
 
void displaychar(uchar x,uchar y,uchar *p)
{
  y&=0x01;
  x&=0x0f;
  while(*p!='')
  {
    if(x<=0x0f)
    {
      displayonechar(x,y,*p);
      p++;
      x++;
    }
  }
}
关键字:AVR  1602液晶  字符移动 引用地址:AVR 1602液晶字符移动

上一篇:AVR CTC模式波形输出实验
下一篇:AVR的EEPROM简单实验

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

AVR 32位FlexRay评估环境(Atmel)
Atmel(R) Corporation 宣布推出其 AVR(R) 32 位 FlexRay(R) 评估环境。此外,Atmel 在德国斯图加特召开的 FlexRay 会议上,以线控驾驶、驾驶和刹车功能实现先进车内网络的仿制车来展示其新技术。 该评估环境的核心是一个基于 Atmel AVR32 专有架构的32位微控制器,该架构拥有 Robert Bosch GmbH 授权的 FlexRay IP(FlexRay网络协议)——一种硬件 LIN IP。此外,该环境还包括一个双重 CAN IP、一个 Ethernet MAC 和一套通用外设。该环境也包括了 AVR32 开发工具箱、FlexRay 堆栈、FlexRay 配置工具和一个网
[单片机]
基于AVR单片机的高压防护系统的研究
目前,我国铁路上运行的电力机车所使用的电源,是接触网提供的25kV单相交流电。在电气化铁路区段运行和整备作业的机车,经常需要作业人员通过人孔盖登上车顶,对机车进行检查维修工作。通常在上车顶工作前,作业人员应当按照登顶作业程序,在地面对作业网断电,再打开车顶人孔盖登顶作业。 然而,因为作业人员疏忽大意,未认真执行接触网断电的操作程序,在接触网上仍带电的情况下,就盲目登车顶工作,多次造成被电击伤亡的事故。针对这一情况,我们研制了机车车顶人孔盖安全报警联运接地装置,可以为登顶作业的工作人员提供可靠、有效的人身安全保护,确保登顶作业人员的人身安全。 本文将介绍一套可靠检测接触网有无高电压的告警装置和一套受告警装置控制的联运接地装置。
[单片机]
avr EEPROM 数据丢失问题 原因与解决方案
总结一下引起 AVR 内部 EEPROM 数据丢失的原因: 1. 程序问题; 2. 程序跑飞; 3. EEPROM相关寄存器因强磁场、高压静电等外部干扰出错所产生的写入动作; 4. 系统有很大的感性负载,在断电的时候会产生一个反向高压,EEPROM有可能会自擦除。 (还有什么原因,欢迎大家继续列举,以便完善及想办法解决) 针对问题1,程序问题不再该文讨论范围内。 针对问题2,程序跑飞,这个因该是引起 EEPROM 数据丢失的主要原因。但是引起程序跑飞的原因却是多方面的。 第一. 电压不正常,工作不稳定,程序跑飞。针对这个问题,可以开启内部BOD、或者外加复位芯片解决,在
[单片机]
<font color='red'>avr</font> EEPROM 数据丢失问题 原因与解决方案
AVR单片机视觉智能寻迹车设计与实现
0 引 言 智能运输系统是未来交通运输系统发展的趋势,智能汽车在智能运输系统中扮演着十分重要的角色。作者提出智能寻迹车作为构建未来智能交通运输系统中重要部分,针对未来交通运输系统有导航线的环境命题假设下智能汽车的自主寻迹问题,提出一种基于视觉的智能寻迹车模设计方案,作为该假设问题的解决方案。 基于视觉的智能寻迹车模设计方案能够在线型复杂,转弯半径不确定性大的情况下,利用视觉自主寻迹前进,分级精确转向。 1 系统总体设计 基于视觉的智能寻迹车模系统以AVR单片机MEGAl6为核心,由单片机模块、路径识别模块、直流电机驱动模块、舵机驱动模块等组成,如图1所示。 直流电动机为车辆的驱动装置,转向电动机用于控
[单片机]
使用AVR单片机驱动舵机
1.舵机驱动的基本原理   (可以参考http://blog.sina.com.cn/s/blog_8240cbef01018hu1.html)    控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。 简单的来讲,就是输出一个周期为20Ms,不同的占空比对应舵机转过不同的角度。 难点主要在于 舵机控制信号需要保持,这样就比用脉冲控制步进电机要复杂一些。 你需要
[单片机]
使用<font color='red'>AVR</font>单片机驱动舵机
AVR单片机中左移位和右移位指令
计算机的指令系统是一套控制计算机操作的代码,称之为机器语言。计算机只能识别和执行机器语言的指令。为了便于人们理解、记忆和使用,通常用汇编语言指令来描述计算机的指令系统。汇编语言指令可通过汇编器翻译成计算机能识别的机器语言。 AVR单片机指令系统是RISC结构的精简指令集,是一种简明易掌握﹑效率高的指令系统。 SL-DIY02-3开发实验器使用AT90S8535单片机,有118条指令, 而我们所做的11个实验程序仅用了34条指令, 我们重点讲这34条指令, 其余指令就可自学了。 AVR器件(指令速查表) 118条指令器件 AT90S2313/2323/2343/2333 ,AT90S4414/4433/4434/85
[单片机]
<font color='red'>AVR</font>单片机中左移位和右移位指令
[AVR]高压并行编程---基础知识
手一抖就锁了好几片Mega16,这可是几十块钱啊...有必要造一个高压并行编程器了 一、接线方式及端口定义 RDY/BSY 判忙标志位。(0:设备正忙 1:等待新的命令) OE 输出使能位 低电平有效 WR 写脉冲 低电平有效 BS 字节选择1(0:选择低位字节 1:选择高位字节) XA XTAL动作位 00加载Flash或者EEPROM地址 01加载数据 10加载命令 11保留 PAGEL 加载程序存储器和EEPROM数据页 DATA 双向数据/命令口 0x80 芯片擦除 0x40 写熔丝位 0x20 写锁定位 0x10 写FLASH 0x11 写EEPROM 0x08 读标示字节和校准字节 0x04 读熔丝位及锁定位 0x
[单片机]
基于AVR单片机高精度电子秤设计
0 引言 随着电子技术和自动化测量技术的不断发展,传统的称重系统在功能、精度、性价比等方面已难以满足人们的需要,尤其在智能化、便携式、对微小质量的测量方面更显得力不从心。近年来,新型单片机的出现和集成电路技术的发展为更新产品设计,研制高性价比的称重控制器提供了条件。本设计采用AVR单片机为控制核心,结合电阻应变式压力传感器和相应的信号采集电路,设计出一种高精度、多功能、低成本的新型电子秤。 1 系统总体设计 首先由称重传感器采集因压力变化而产生的电压信号,通过A/D转换器将模拟信号转换为数字信号,把数字信号送入AVR单片机,单片机做相应的处理后,得到当前物体重量的数据,并通过LCD显示出来。系统硬件结构如图1所示。 系
[单片机]
基于<font color='red'>AVR</font>单片机高精度电子秤设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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