×
单片机 > 单片机程序设计 > 详情

AVR drive LCD via SPI module

发布时间:2020-08-21 发布时间:
|
 
//********************written by ovie.xuan 2010.08.12---------------------
#include
#include
#include
#include
//#include
#define sce0   PORTC&=0XFd  //片选
#define rst0   PORTC&=0XFb  //复位
#define dc0    PORTC&=0XEF   //1写数据,0写指令
#define sdin0  PORTB&=0XF7   //数据
#define sclk0  PORTB&=0XDF   //时钟
#define sce1   PORTC|=0X02  //片选
#define rst1   PORTC|=0X04  //复位
#define dc1    PORTC|=0X10   //1写数据,0写指令
#define sdin1  PORTB|=0X08   //数据
#define sclk1  PORTB|=0X20   //时钟
#define hc138dis    PORTB&=0XEF   //g=0
#define hc138en     PORTB|=0X10   //g=1
const prog_char  font6x8[] =
{
 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// sp
 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00,// !
 0x00, 0x00, 0x07, 0x00, 0x07, 0x00,// "
 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14,// #
 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12,// $
 0x00, 0x62, 0x64, 0x08, 0x13, 0x23,// %
 0x00, 0x36, 0x49, 0x55, 0x22, 0x50,// &
 0x00, 0x00, 0x05, 0x03, 0x00, 0x00,// '
 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00,// (
 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00,// )
 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14,// *
 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08,// +
 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00,// ,
 0x00, 0x08, 0x08, 0x08, 0x08, 0x08,// -
 0x00, 0x00, 0x60, 0x60, 0x00, 0x00,// .
 0x00, 0x20, 0x10, 0x08, 0x04, 0x02,// /
 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E,// 0
 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00,// 1
 0x00, 0x42, 0x61, 0x51, 0x49, 0x46,// 2
 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31,// 3
 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10,// 4
 0x00, 0x27, 0x45, 0x45, 0x45, 0x39,// 5
 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30,// 6
 0x00, 0x01, 0x71, 0x09, 0x05, 0x03,// 7
 0x00, 0x36, 0x49, 0x49, 0x49, 0x36,// 8
 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E,// 9
 0x00, 0x00, 0x36, 0x36, 0x00, 0x00,// :
 0x00, 0x00, 0x56, 0x36, 0x00, 0x00,// ;
 0x00, 0x08, 0x14, 0x22, 0x41, 0x00,// <
 0x00, 0x14, 0x14, 0x14, 0x14, 0x14,// =
 0x00, 0x00, 0x41, 0x22, 0x14, 0x08,// >
 0x00, 0x02, 0x01, 0x51, 0x09, 0x06,// ?
 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E,// @
 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C,// A
 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36,// B
 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22,// C
 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C,// D
 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41,// E
 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01,// F
 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A,// G
 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F,// H
 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00,// I
 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01,// J
 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41,// K
 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40,// L
 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F,// M
 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F,// N
 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E,// O
 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06,// P
 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E,// Q
 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46,// R
 0x00, 0x46, 0x49, 0x49, 0x49, 0x31,// S
 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01,// T
 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F,// U
 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F,// V
 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F,// W
 0x00, 0x63, 0x14, 0x08, 0x14, 0x63,// X
 0x00, 0x07, 0x08, 0x70, 0x08, 0x07,// Y
 0x00, 0x61, 0x51, 0x49, 0x45, 0x43,// Z
 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00,// [
 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55,// 55
 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00,// ]
 0x00, 0x04, 0x02, 0x01, 0x02, 0x04,// ^
 0x00, 0x40, 0x40, 0x40, 0x40, 0x40,// _
 0x00, 0x00, 0x01, 0x02, 0x04, 0x00,// '
 0x00, 0x20, 0x54, 0x54, 0x54, 0x78,// a
 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38,// b
 0x00, 0x38, 0x44, 0x44, 0x44, 0x20,// c
 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F,// d
 0x00, 0x38, 0x54, 0x54, 0x54, 0x18,// e
 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02,// f
 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C,// g
 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78,// h
 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00,// i
 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00,// j
 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00,// k
 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00,// l
 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78,// m
 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78,// n
 0x00, 0x38, 0x44, 0x44, 0x44, 0x38,// o
 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18,// p
 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC,// q
 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08,// r
 0x00, 0x48, 0x54, 0x54, 0x54, 0x20,// s
 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20,// t
 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C,// u
 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C,// v
 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C,// w
 0x00, 0x44, 0x28, 0x10, 0x28, 0x44,// x
 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C,// y
 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44,// z
 0x14, 0x14, 0x14, 0x14, 0x14, 0x14// horiz lines
};
//****write data to lcd via spi module******************
void LCD_write_byte(unsigned char dt, unsigned char command)
{
 SPCR=0b01010000;//unable spi interrupt,enable spi,send MSB firetly,   
   //主机模式,空闲时SCK位低电平,起始沿采样SCK频率fosc/4,
 sce0;  
 if(command)
  dc1;
 else
  dc0;  
 SPDR=dt;                              //开始发送数据        
 while((SPSR>>7)==0);                 //等待发送接收结束 
}
//---------------initial lcd--------------
void LCD_init(void)
{
 LCD_write_byte(0x21,0);//LCD功能设置:芯片活动,水平寻址,使用扩展指令
 LCD_write_byte(0xc0,0);//设置VOP值
 LCD_write_byte(0x20,0);//LCD功能设置:芯片活动,水平寻址,使用基本指令
 LCD_write_byte(0x0C,0);//设定显示配置:普通模式
 sce1;
}

//-------set XY coordinate----------------
void LCD_set_XY(unsigned char X, unsigned char Y)
{
 LCD_write_byte(0x40 | Y, 0);// column
 LCD_write_byte(0x80 | X, 0);// row
 sce1;
}

//-------clear lcd---------------
void LCD_clear(void)
{
 unsigned char t;
 unsigned char k;
 LCD_set_XY(0,0);
 for(t=0;t<6;t++)
 { 
  for(k=0;k<84;k++)
  { 
   LCD_write_byte(0x00,1);        
  } 
 }
 sce1;
}
//-----display english char-----------------
void LCD_write_char(unsigned char c)
{
 unsigned char line;
 c-=32;
 for (line=0; line<6; line++)
 LCD_write_byte(pgm_read_byte(font6x8+c*6+line), 1);
 
}
//------display english char string-----------
void LCD_write_String(unsigned char X,unsigned char Y,char *s)
{
 LCD_set_XY(X,Y);
 while (*s) 
 {
  LCD_write_char(*s);
  s++;
 }
}
 
int main(void)
{
 DDRC=0x16;
 DDRB=0x3a;
 _delay_ms(100);
 rst0;
 _delay_ms(10);
 rst1;//复位的正边缘之后sce为低,串行接口准备接收命令、数据的位7,数据传送依次从最高位到最低位。
 LCD_init();
 LCD_clear();
 LCD_write_String(1,0,"Ovie is num1 !");
 LCD_write_String(1,1,"Sorry,I cannot");
 LCD_write_String(1,2,"tell you anyt");
 LCD_write_String(1,3,"hing about her ");
 LCD_write_String(1,4,"and me,it is");
 LCD_write_String(1,5,"private thing."); 
 
 hc138dis;
 //wdt_enable(WDTO_2S); //enable wdt,2秒复位
 while(1)
 {   
  //wdt_reset();       //喂狗指令
  
 }


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32中断向量表的位置.重定向