“LCD12864子程序”的版本间的差异

来自丢石头百科
(目 的: 建立LCD12864操作库 目标系统: 基于AVR单片机 应用软件: ICCAVR)
 
(文本替换 - 替换“www.waveshare.net”为“{{SERVERNAME}}”)
第3行: 第3行:
  
 
/*********************************************************************
 
/*********************************************************************
 微 雪 电 子   WaveShare   <a class="Blue_2_12px_" href="http://www.waveshare.net/" style="color: rgb(7, 66, 184);">http://www.waveShare.net
+
 微 雪 电 子   WaveShare   <a class="Blue_2_12px_" href="http://{{SERVERNAME}}/" style="color: rgb(7, 66, 184);">http://www.waveShare.net
 
             
 
             
 
目    的:   建立LCD12864操作库
 
目    的:   建立LCD12864操作库

2019年11月19日 (二) 09:21的版本

<tbody></tbody>

/*********************************************************************  微 雪 电 子   WaveShare   <a class="Blue_2_12px_" href="http://wiki.diustou.com/" style="color: rgb(7, 66, 184);">http://www.waveShare.net               目    的:   建立LCD12864操作库 目标系统:   基于AVR单片机                                                  应用软件:   ICCAVR                                                       版    本:   Version 1.0                                                        圆版时间:   2005-06-25 开发人员:   SEE 说    明:   若用于商业用途,请保留此段文字或注明代码来源   深 圳 市 微 雪 电 子 有 限 公 司 保 留 所 有 的 版 权     

                                                                                                                                          • /

/*01010101010101010101010101010101010101010101010101010101010101010101


版本更新记录:  


入口参数说明: //#define OUT_LCD_CS sbi(DDRD,0) //#define SET_LCD_CS sbi(PORTD,0) //#define CLR_LCD_CS cbi(PORTD,0)


待定参数说明:


 

对外变量说明:


对外函数说明:


10101010101010101010101010101010101010101010101010101010101010101010*/

/*-------------------------------------------------------------------- 接口定义: LCD12864_ST7920 ATmega16 1.GND -------- GND 2.VCC -------- VCC 3.V0 -------- V0 4.RS(CS) -------- VCC 5.R/W(SID) -------- MOSI/PB5 6.E(SCLK) -------- SCK/PB7 7.D0 -------- NC 8.D1 -------- NC 9.D2 -------- NC 10.D3 -------- NC 11.D4 -------- NC 12.D5 -------- NC 13.D6 -------- NC 14.D7 -------- NC 15.PSB -------- GND 16.NC -------- NC 17.RST -------- NC 18.NC -------- NC 19.LED+ -------- VCC 20.LED- -------- GND 说明: (1)使用ATmega16的硬件SPI操作LCD12864_ST7920 (2)PIN4/CS接VCC,其实也可接到特定的IO口,但外部程序需要指定


*/
  1. ifndef LCD12864_ST7920_H
  2. define LCD12864_ST7920_H
  3. include "D:\ICC_H\CmmIcc.h"

void SPI_init() { DDRB |= 0xB0; SPCR = 0x50; //setup SPI SPSR = 0x01; //setup SPI SEI();  } void lcd_wrByte(uint8 data) {  SPDR = data;  while ((SPSR & 0x80) == 0);  } void lcd_wrCmd(uint8 HC,uint8 LC) { lcd_wrByte(0xF8); lcd_wrByte(HC); //传输高四位 lcd_wrByte(LC); //传输低四位 } void lcd_wrDat(uint8 HD,uint8 LD) { lcd_wrByte(0xFA); lcd_wrByte(HD); //传输高四位 lcd_wrByte(LD); //传输低四位 } /* x表示在第几行显示,y表示在第几列显示

  • /

void lcd_set_xy(uint8 x,uint8 y)  { uint8 adr; switch(x) { case 1: adr = 0x7F + y; break; //在第1行y列显示 case 2: adr = 0x8F + y; break; //在第2行y列显示 case 3: adr = 0x87 + y; break; //在第3行y列显示 case 4: adr = 0x97 + y; break; //在第4行y列显示 default: ; } lcd_wrCmd(adr&0xF0,(adr&0x0F)<<4); } void lcd_putc(uint8 x,uint8 y,uint8 ch) { lcd_set_xy(x,y); delay50us(20);  lcd_wrDat(ch&0xF0,(ch&0x0F)<<4); } void lcd_putd0(uint8 x,uint8 y,uint32 dat,uint8 length) { sint8 i; speaData(dat,length); lcd_set_xy(x,y); delay50us(40); for(i=length-1;i>=0;i--) { lcd_wrDat( (dataElem[i]+0x30)&0xF0 ,( (dataElem[i]+0x30)&0x0F )<<4 ); delay50us(40);  } } void lcd_putd(uint8 x,uint8 y,uint32 dat,uint8 length) { sint8 i; sint8 effectLen; if(dat>999999) effectLen=7; else if(dat>99999) effectLen=6; else if(dat>9999) effectLen=5; else if(dat>999) effectLen=4; else if(dat>99) effectLen=3; else if(dat>9) effectLen=2; else effectLen=1; speaData(dat,effectLen); lcd_set_xy(x,y); delay50us(40);  if(length>effectLen) { for(i=length-effectLen-1;i>=0;i--) { lcd_wrDat(' '&0xF0,(' '&0x0F)<<4); delay50us(40);  } } for(i=effectLen-1;i>=0;i--) { lcd_wrDat( (dataElem[i]+0x30)&0xF0 ,( (dataElem[i]+0x30)&0x0F )<<4 ); delay50us(40); } } void lcd_puts(uint8 x,uint8 y,uint8 *str) {  lcd_set_xy(x,y); delay50us(20);  while(*str) { lcd_wrDat((*(str))&0xF0,((*(str))&0x0F)<<4); str++; delay50us(20); }  } void lcd_puts_(uint8 x,uint8 y,uint8 *str,uint8 dlyMs) {  lcd_set_xy(x,y); delay50us(20);  while(*str) { lcd_wrDat((*(str))&0xF0,((*(str))&0x0F)<<4); str++; delay50ms(dlyMs); }  } void lcd_clr() { lcd_wrCmd(0x00,0x10); //显示右移 delay50us(200); } void lcd_init(void) { SPI_init();  //OUT_LCD_CS; //若LCD_CS //SET_LCD_CS;  delay50ms(1); lcd_wrCmd(0x30,0x30); //使用8位控制界面,使用基本指令集 //lcd_wrCmd(0x00,0xF0); //整体显示ON lcd_wrCmd(0x00,0xC0); //整体显示ON lcd_wrCmd(0x00,0x10); //清屏 //lcd_wrCmd(0x10,0x00); //光标 lcd_wrCmd(0x00,0x60); //lcd_wrCmd(0x00,0x70); //显示右移 delay50ms(1); //不可省去!!! }

  1. endif