VimIy微民网,让世界倾听微民的声音! 设为首页 | 加入收藏 | 网站地图
当前位置:主页 > 大杂烩 >

来点大神帮看下AVR单片机的程序吧。

整理时间:2013-05-09 06:39 来源:www.vimiy.com 作者:编辑 点击:

【楼主】2013-05-06 21:07

» 来点大神帮看下AVR单片机的程序吧。
    #include <iom88v.h>
    #include <macros.h>
    
    
    #define uchar unsigned char
    #define uint unsigned int
    
    
    #define LCM_Data PORTD
    
    
    #define RS_1 PORTC |= BIT(1)
    #define RS_0 PORTC &= ~BIT(1)
    #define RS_OUT DDRC |= BIT(1)
    #define RW_1 PORTC |= BIT(2)
    #define RW_0 PORTC &= ~BIT(2)
    #define RW_OUT DDRC |= BIT(2)
    #define E_1 PORTC |= BIT(3)
    #define E_0 PORTC &= ~BIT(3)
    #define E_OUT DDRC |= BIT(3)
    #define B_1 PORTB |= BIT(0)
    #define B_OUT DDRB |= BIT(0)
    
    
    void delay_ms(uint ms);
    void delay_us(uint us);
    void Writedat(unsigned char dat); //写数据
    void Writecom(unsigned char com); //写指令
    void Init_12864(void); //12864初始化
    void display(void); //显示
    void port_init(void); //AVR端口初始化
    
    
    uchar table="AVR";
    
    
    void delay_us(uint us) //延时微秒
    {
     uint i;
     us=us*2*5/4;
     for(i=0;i<us;i++);
    }
    
    void delay_ms(uint ms) //延时毫秒
    {
     uint i,j;
     for(i=0;i<ms;i++)
     {
     for(j=0;j<1141;j++);
     }
    }
    
    
    void display(void) //显示 ok
    {
     uchar i;
     Writecom(0x80); //第一行起始地址
     delay_ms(100);
     for(i=0;i<3;i++)
     {
     Writedat(table);
     delay_ms(100);
     }
    }
    
    void port_init(void) //AVR端口初始化 ok
    {
     PORTD = 0x00;
     DDRD = 0xff;
     RS_OUT;
     RW_OUT;
     E_OUT;
     B_OUT;
     B_1 ; //并行设置
     delay_ms(200);
    }
    
    void Init_12864(void) //12864初始化 ok
    {
     delay_ms(1000);
     Writecom(0x30); //功能设置
     delay_ms(10);
     Writecom(0x30); //判断设置是否成功
     delay_ms(10);
     Writecom(0x0f);
     delay_ms(10);
     Writecom(0x01); //清屏
     delay_ms(100);
     Writecom(0x06); //光标移动
     delay_ms(100);
    }
    
    void Writedat(uchar dat) //写数据 ok
    {
     RW_0;
     RS_1;
     delay_us(500);
     LCM_Data = dat;
     delay_ms(10);
     E_1;
     delay_ms(10);
     E_0;
     delay_ms(10);
    }
    
    
    void Writecom(uchar com) //写指令 OK
    {
     RW_0;
     RS_0;
     delay_us(500);
     LCM_Data = com;
     delay_ms(10);
     E_1;
     delay_ms(10);
     E_0;
     delay_ms(10);
    }
    
    void main(void)
    {
     port_init();
     Init_12864(); //12864初始化
     while(1)
     {
     display();
     while(1);
     }
    }
    
    
    
    
    
    
    控制12864的 但是为什么不行了。。。都一天的,感觉程序没问题吧。
    
网友评论2013-05-06 21:48


    没法王就没人吗
    
网友评论2013-05-06 22:01


    标题看一半就滚进来了,看了看内容就滚出去了。
    
网友评论2013-05-06 22:07


    看了下 不是还很懂啊
    
网友评论2013-05-06 22:15


    我发个我经常用的吧,你自己对照一下,晚上不想看程序了 MSP430单片机,但时序过程是一样的
    
    
    
    *******************************************************************************/
    #define CLEAR_SCREEN 0x01 //清屏指令:清屏且AC值为00H
    #define AC_INIT 0x02 //将AC设置为00H。且游标移到原点位置
    #define CURSE_ADD 0x06 //设定游标移到方向及图像整体移动方向
     //(默认游标右移,图像整体不动)
    #define FUN_MODE 0x30 //工作模式:8位基本指令集
    #define DISPLAY_ON 0x0c //显示开,显示游标,且游标位置反白
    #define DISPLAY_OFF 0x08 //显示关
    #define CURSE_DIR 0x14 //游标向右移动:AC=AC+1
    #define SET_CG_AC 0x40 //设置AC,范围为:00H~3FH
    #define SET_DD_AC 0x80
    
    /******************************************************************************
    
    液晶端口设定
    
    *******************************************************************************/
    #define LCD_DATA P4OUT
    
    
    #define PSB_SET P5OUT|=BIT0//PSB置高
    #define PSB_CLR P5OUT&=~BIT0
    
    #define RS_SET P5OUT|=BIT5
    #define RS_CLR P5OUT&=~BIT5
    
    
    #define RW_SET P5OUT|=BIT6
    #define RW_CLR P5OUT&=~BIT6
    
    #define EN_SET P5OUT|=BIT7
    #define EN_CLR P5OUT&=~BIT7
    
    //#define RST_CLR P5OUT &= ~BIT0 //RST置低
    //#define RST_SET P5OUT |= BIT0 //RST置高
    
    /*******************************************************************************
    名称:void write_cmd(uchar cmd)
    功能:向液晶写入命令段
    入口参数:cmd 操作液晶功能的数字段
    出口参数:无
    *******************************************************************************/
    void write_cmd(uchar cmd)
    {
     RS_CLR;
     RW_CLR;
     EN_SET;
     LCD_DATA=cmd;
     delay_ms(5);
     EN_CLR;
    }
    /*******************************************************************************
    名称:void LCD_init(void)
    功能:液晶功能的初始化设定
    入口参数:无
    出口参数:无
    *******************************************************************************/
    void LCD_init(void)
    {
    
     P4SEL = 0x00;
     P4DIR = 0xFF;
     P5SEL = 0x00;
     P5DIR|= BIT0 + BIT1 + BIT5 + BIT6 + BIT7;
     PSB_SET; //液晶并口方式
    
     write_cmd(FUN_MODE); //显示模式设置
     delay_ms(5);
     write_cmd(FUN_MODE); //显示模式设置
     delay_ms(5);
     write_cmd(0x0c); //显示开
     delay_ms(5);
     write_cmd(CLEAR_SCREEN); //清屏
     delay_ms(5);
    }
    
    /*******************************************************************************
    名称:void write_data(uchar data)
    功能:向液晶写入数据
    入口参数:data 液晶显示的数据
    出口参数:无
    *******************************************************************************/
    void write_data(uchar data)
    {
     RS_SET;
     RW_CLR;
     EN_SET;
     LCD_DATA=data;
     delay_ms(5);
     EN_CLR;
    }
    /*******************************************************************************
    名称:void lcd_clear(void)
    功能:清除液晶显示,清屏
    入口参数:无
    出口参数:无
    *******************************************************************************/
    void lcd_clear(void)
    {
     write_cmd(0x01);
     delay_ms(5);
    }
    /*******************************************************************************
    名称:void DisplayCgrom(uchar addr,uchar *hz)
    功能:向液晶的某地址写入字符串或数组或某变量(用指针表示)
    入口参数: addr:表示液晶显示的地址 *hz:指针变量
    出口参数:无
    说明:如DisplayCgrom(0x080,&num)
    *******************************************************************************/
    void DisplayCgrom(uchar addr,uchar *hz)
    {
     write_cmd(addr);
     delay_ms(5);
     while(*hz!='\0')
     {
     write_data(*hz);
     hz++;
     delay_ms(5);
     }
    
    }
    

    
    
    

上一篇:马刺和勇士的这场比赛太刺激了
下一篇:没有了
关于网站 | 网站声明 | 用户反馈 | 合作伙伴 | 联系我们
Copyright © 2012年2月8日