查看: 2114|回复: 1
打印 上一主题 下一主题

atmega168 Xplained mini 驱动1602

[复制链接]
  • TA的每日心情
    慵懒
    2014-7-28 10:46
  • 签到天数: 35 天

    连续签到: 1 天

    [LV.5]常住居民I

    跳转到指定楼层
    楼主
    发表于 2014-5-31 13:00:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
    分享到:
    额也许很简单  不过这个是我的学习过程  我想争取一直写  知道把avr单片机玩透彻0.0
    因为1602液晶曾经在51单片机上写过 这回呢 我只看资料 没有例程也没有其他的什么  就徒手去写这个程序
    虽然程序不是最精简 有效的  毕竟是一笔一笔写出来的很有感觉

    废话就不说开始进入正题!
    资料是用的之前学51郭天祥教程里的资料、
    1602液晶说明_长沙太阳人_lxy.pdf (246.31 KB, 下载次数: 0)
    然后根据资料链接查看

    在引脚上1602有3个功能引脚 分别是r/s , r/w , e
    r/s 是  数据/命令选择端  高电平为数据,低电平为命令
    r/w是 读/写选择端    高电平读,低电平写
    e是使能端  高电平有效

    简单的来说操作这个液晶并没有什么难度;很多人都会,写出来 1 是为给新手看,2 是自己的学习记录
    上程序吧  读写时序或者神马的都在文档里看看就知道了

    /*
    * GccApplication8.c
    *
    * Created: 2014/5/29 19:34:10
    *  Author: -Shadow-
    */


    #include <avr/io.h>

    // rs  数据/命令 1/0  PB0
    // r/w   读/写   1/0  PB1
    // E                  PB2

    void init_1602();
    void init_avr168();
    void delay_1ms();
    void delay_ms(unsigned int n);

    unsigned char read_mang();
    unsigned char read_data(unsigned char i);
    void write_Instruction(unsigned char i);
    void write_data(unsigned char i);

    unsigned char k1[]="I LOVE YOU";
    unsigned char k2[]="";

    int main(void)
    {
        while(1)
        {
            //TODO:: Please write your application code
                    unsigned char i;
                    init_avr168();
                    init_1602();
                    delay_ms(100);
                   
                    write_Instruction(0x80);
                    for(i=0;i<10;i++)
                    {
                            write_data(k1);
                            delay_ms(20);
                    }
                    while(1);
            }
    }

    void init_avr168()
    {
            DDRD = 0xff;
            DDRB = 0xff;
    }

    void init_1602()
    {
            PORTB = 0x00;
            write_Instruction(0x38);
            delay_1ms();
            write_Instruction(0x0e);
            delay_1ms();
            write_Instruction(0x06);
            delay_1ms();
            write_Instruction(0x01);
            delay_1ms();       
    }

    void delay_1ms()        //1ms延时函数
    {
            volatile unsigned int i;
            for(i=1;i<2000;i++);
    }

    void delay_ms(unsigned int n)         //延时函数
    {
            volatile unsigned int i;
            for(i=1;i<n;i++);
    }

    unsigned char read_mang()        //读状态 判忙
    {
            DDRD = 0x00;
            PORTB = 0x04;
            delay_1ms();
            return PIND;
    }

    void write_Instruction(unsigned char i)                //写指令
    {
            DDRD = 0xff;
            PORTD = i;
            PORTB = 0x00;
            delay_1ms();
            PORTB = 0x04;
            delay_1ms();
            PORTB = 0x00;       
    }

    void write_data(unsigned char i)         //写数据
    {
            DDRD = 0xff;
            PORTD = i;
            PORTB = 0x00;
            delay_1ms();
            PORTB = 0x05;
            delay_1ms();
            PORTB = 0x01;
    }




    额由于偏压的问题开始没有显示    没办法 就用之前的51上的电位器代替下0.0
    希望对新手能有点帮助!


    回复

    举报

  • TA的每日心情
    慵懒
    2014-7-28 10:46
  • 签到天数: 35 天

    连续签到: 1 天

    [LV.5]常住居民I

    沙发
     楼主| 发表于 2014-6-1 10:06:37 | 只看该作者
    额额  貌似太基础了0.0  好吧  慢慢的 会上比较有分量的0.0  
    回复 支持 反对

    举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 3/5 下一条

    【预约|参会享"豪"礼】2025慕尼黑上海设备展
    “2025慕尼黑上海电子生产设备展”将于2025年03月26-28日上海新国际博览中心开幕诚邀您的光临!

    查看 »

    手机版|小黑屋|与非网

    GMT+8, 2025-4-29 20:33 , Processed in 0.121906 second(s), 20 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.5

    Copyright © 2001-2024, Tencent Cloud.