• 诗然
    了解作者
  • C/C++
    开发工具
  • 1KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 13
    下载次数
  • 2014-02-25 13:17
    上传日期
AVR ATmage16单片机SPI驱动1602液晶显示屏。节省IO资源。
SPI_lcd1602.zip
  • SPI_lcd1602.txt
    1.4KB
内容介绍
/* * SPI.c *用SPI通讯方式和595连接的LCD进行数据传输,IO接口如下: * PA0——>1602_RS * PA1---->1602_RW * PA2---->1602_EN * PB4---->595_RCK * PB5---->595_DS * PB7---->595_SCLK * Created: 2012/9/2 21:13:12 * Author: 诗然 */ #include <avr/io.h rel='nofollow' onclick='return false;'> #define BIT(x) (1<<x) #define RS 0 #define RW 1 #define EN 2 unsigned char table1[]="I LOVE YOU !"; unsigned char i; void delay (unsigned int a) { unsigned int y,z; for(y=0;y<a;y++) for (z=410;z rel='nofollow' onclick='return false;'>0;z--); } void SPISEG_init() //SPI初始化 { DDRB=0XFF; PORTB=0XF0; DDRB|=(1<<7)|(1<<5); SPCR|=(1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0); } void SEG(unsigned char data1) { PORTB&=~(1<<4); SPDR=data1; //数据放入SPI寄存器中 while(!(SPSR&(1<<SPIF))); //等待数据传输完毕 PORTB|=(1<<4); } void write_lcd (unsigned char com ,unsigned char dat) { if(com==0) PORTA&=~BIT(RS); if(com==1) PORTA|=BIT(RS); PORTA&=~BIT(RW); PORTA|=BIT(EN); delay(5); SEG(dat); delay(5); PORTA&=~BIT(EN); } void lcd_ini () { write_lcd(0,0x38); delay(5); write_lcd(0,0x01); delay(5); write_lcd(0,0x0c); delay(5); write_lcd(0,0x06); delay(5); } int main(void) { DDRA|=(BIT(RW)+BIT(RS)+BIT(EN)); PORTA&=~BIT(EN); SPISEG_init(); lcd_ini(); write_lcd(0,0x80); for (i=0;i<12;i++) { write_lcd(1,table1[i]); } }
评论
    相关推荐