数据载入中...  
数据载入中...
时 间 记 忆
数据载入中...
最 新 评 论
数据载入中...
专 题 分 类
数据载入中...
最 新 日 志
数据载入中...
最 新 留 言
数据载入中...
搜 索
用 户 登 录
数据载入中...
友 情 连 接
博 客 信 息
数据载入中...


 
液晶1602 程序<3>----- CVAVR环境下mega8 内部8MHZ晶振
[ 2008-6-11 10:20:00 | By: 嘉哥 ]
 

//上接 液晶1602 程序<2>----- CVAVR环境下mega8 内部8MHZ晶振

//----------------------------------------------------

//检测忙标志

void BF_mang(void)

{ 

bf_loop:

      DUAN=0XFF;   //先放开总线

     

      //读忙信号状态设置

      RS=0;

      RW=1;      

      delay_us(2);//稍作延时待稳定

     

      //下跳沿

      E=0;

      delay_us(2);//稍作延时待稳定

     

      //拉回E

      E=1;

     

      DDRD.7=0;     //一定要转换成输入模式,我个人也认为不用,直接读PIND.7就行,但我试了一下,没有此句,液晶不正常显示

      delay_us(2);  //稍作延时待稳定

     

      if(PIND.7==1)  //读忙信号,若为1,则说明忙,则再从头检测忙信号

      {

        goto bf_loop;

      }

     

      //不忙则

      DDRD.7=1; //转换成输出模式

      delay_us(2);//稍作延时待稳定   

}

//----------------------------------------------------

 

 

//----------------------------------------------------

//写指令或者显示地址

void enable(void)

{    

      //写指令 或者 显示地址 状态设置

      RS=0;

      RW=0;

      delay_us(2);//稍作延时待稳定

     

      //下跳沿

      E=0;

      delay_us(2);//稍作延时待稳定

     

      BF_mang();  //读忙信号

     

      //拉回E

      E=1;

}

//----------------------------------------------------

 

 

//----------------------------------------------------

//系统初始化

void init(void)

{   

      //总线设为输出 初始时为高电平

      PORTD=0XFF;

      DDRD=0XFF;

     

      //背光控制端设为输出  初始时为高电平

      LT=0;

      DDRB.5=1;

     

      //E端输出  初始时为高电平

      E=1;

      DDRB.4=1;

     

      //RW端输出 初始时为高电平

      RW=1;

      DDRC.3=1;

     

      //RS端输出 初始时为高电平

      RS=1;

      DDRC.2=1;

     

      delay_us(2);//稍作延时待稳定

}

//----------------------------------------------------

 

//---------------------------------------------------- 

void xianshi(u8 add,u8 *str)//add为行的首地址  table为要显示的数组

{ 

     u8 i;

     for(i=0;i<=16;i++) //显示16个字符

     {

      //写要显示的地址  在这里是第二行的第一个位置(写入地址时要求最高位恒定为1,这个要注意哦!

      DUAN=add+i;  //地址的算法

      enable();

      

      DUAN= *str;  //要显示的字符

     

      //对数据寄存器开始写 的状态设置

      RS=1;

      RW=0;

      delay_us(2);//稍作延时待稳定

     

      //下跳沿

      E=0;

      delay_us(2);//稍作延时待稳定

     

      BF_mang(); //读忙信号

     

      //拉回E

      E=1;

      str++;

      }

 }    

//----------------------------------------------------

 

//----------------------------------------------------

//主函数

void main(void)

{

      init();//初始化

     

     

      //写命令

      COM_1;

      enable(); 

        

      COM_6;

      enable();

         

      COM_4;

      enable(); 

       

      COM_3;

      enable();

        

      xianshi(add1, table1);

      xianshi(add2, table2);

       

      while (1) 

      {        

           #asm("NOP");  //工作结束,原地踏步     

      }

}

//----------------------------------------------------

//液晶1602 <1> <2> <3> 文章到此结束

 
  • 标签:液晶 程序 MEGA8 CVAVR AVR 
  •  
    Re:液晶1602 程序<3>----- CVAVR环境下mega8 内部8MHZ晶振
    [ 2008-8-28 17:34:46 | By: 访客1ja4EQ(游客) ]
     
    访客1ja4EQ(游客)嘉哥你好,看了你的程序后有个疑惑:能提供硬件电路图就好了
     
    个人主页 | 引用 | 返回 | 删除 | 回复
    发表评论:
    数据载入中...
    Powered by McuBLog.