/*********************************************************************
目 的: 建立LCD12864操作庫
目標系統: 基于AVR單片機
應用軟件: ICCAVR
版 本: Version 1.0
*********************************************************************/
/*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口,但外部程序需要指定
--------------------------------------------------------------------*/
#ifndef LCD12864_ST7920_H
#define LCD12864_ST7920_H
#include "D:ICC_HCmmIcc.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); //不可省去!!!
}
#endif
上一篇:AVR調試和下載官方平臺的建立
下一篇:AVR PS/2 硬件中斷控制程序
推薦閱讀
史海拾趣
AK-Nord_GmbH公司自成立之初,便以技術創新為核心競爭力。在公司發展的早期階段,團隊研發出了一款具有革命性的電源管理芯片,該芯片以其高效能和穩定性迅速贏得了市場的認可。隨著技術的不斷完善和迭代,公司逐漸在電源管理領域樹立了領先地位。隨后,AK-Nord_GmbH又投入大量資源進行無線通信技術的研發,成功推出了一系列高性能的無線通信模塊,進一步鞏固了其在電子行業中的地位。
為了進一步拓寬業務范圍和提升技術實力,Fullywell在2015年進行了一次重要的收購。公司成功收購了某家專注于傳感器技術的初創企業,將其先進的技術和產品線納入麾下。這次收購不僅豐富了Fullywell的產品線,還使其在物聯網、智能家居等新興領域具備了更強的競爭力。隨后,公司進行了業務整合,優化了資源配置,實現了優勢互補,為公司的持續發展注入了新的動力。
隨著科技的快速發展,EPI意識到只有不斷創新才能在競爭激烈的電子行業中立足。因此,公司加大了對研發的投入,并成功推出了一系列具有創新性和領先性的電子產品。這些產品不僅提升了用戶體驗,還為公司帶來了更多的市場份額和利潤。
面對全球經濟的不確定性和市場競爭的加劇,光大芯業始終保持著清醒的頭腦和堅定的信念。他們積極應對各種挑戰,通過優化管理、提升效率、降低成本等措施,不斷提高自身的競爭力。同時,公司還加大了對新技術、新產品的研發投入,以保持在市場上的領先地位。正是這種不斷進取的精神和堅定的信念,讓光大芯業在電子行業中不斷發展壯大。
自1948年成立以來,Daito公司一直致力于電子元器件的研發與生產。在公司的早期階段,他們意識到保險絲在電子設備中的重要性,并決定投入大量資源進行研發。經過數年的努力,Daito公司成功開發出了高精度報警保險絲,這一創新產品憑借其卓越的性能和可靠性,迅速在市場上獲得了認可。
高精度報警保險絲的成功并沒有讓Daito公司停止創新的步伐。他們不斷對保險絲的失效原因與壽命進行預測和分析,通過全面質量管理,使產品質量得到了顯著的提高。同時,Daito公司還將各系列保險絲的額定值多層次化,以滿足不同客戶的需求,擴大了顧客的選擇余地。
為了進一步擴大市場份額,Directed Energy Inc積極尋求與全球范圍內的合作伙伴建立合作關系。通過與知名電子產品制造商、分銷商和解決方案提供商的合作,公司成功將其產品推向了全球各地。這些合作伙伴不僅為Directed Energy Inc帶來了更多的商業機會,還幫助公司更好地了解不同市場的需求和趨勢,從而不斷調整和優化產品策略。
PCB設計方法與技巧〈一〉 (提示:如果圖片顯示不完整,請保存下來再看就行了。) 1、如何選擇pcb板材? 選擇pcb板材必須在滿足設計需求和可量產性及成本中間取得平衡點。設計需求包含電氣和機構這兩部分。通常在設計非常高速的pcb板子(大于ghz的頻 ...… 查看全部問答∨ |
|
STM32 DSPLib 數字濾波FIR沒例子啊!不知到如何使用。;void fir_16by16_stm32(void *a, void *x, COEFS *c, u32 N) 哪位大蝦指教一下。謝謝!… 查看全部問答∨ |
TPS61059 可為作為相機閃光燈或電影照明燈的白光 LED 供電 使用白光 LED 的一個難題在于如何使用輸入電壓寬泛的電池為其供電。 德州儀器 (TI) 便攜式電源 DC/DC 應用部工程師Scot Lester為您答疑解惑。… 查看全部問答∨ |
本帖最后由 paulhyde 于 2014-9-15 03:26 編輯 L298N的續流回路分析就是不出來 還有續流二極管工作于續流狀態時是正向導通還是反向導通狀態,望有懂的大俠能夠指教下 [ 本帖最后由 electricsboy 于 2011-5-29 15:48 編輯 ] … 查看全部問答∨ |
|
【實驗內容】 基于FSPAD_702平板,實現串口通信。 【實驗目的】 熟悉FSPAD_702平板串口通信的整體流程。 【實驗環境】 Ubuntu 10.04虛擬機,FSPAD_702開源平板,usb轉網口模塊,usb轉串口數 ...… 查看全部問答∨ |
|
inrevium的TB-FMCH-12GSDI-Ehttp://solutions.inrevium.com/pr ... B-FMCH-12GSDI-E.pdf … 查看全部問答∨ |