版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、/stm32-12864并行驅(qū)動程序/#include "delay.h"/必須配合 delay.c 和 delay.h 文件使用,所以要包含 delay.h。#include "display12864.h"f/* 以下是相關(guān)引腳定義。*/ A 口的#defineDisIOGPIOE/定義 12864 要使用的 I/O 端口。#defineDisClkRCC_APB2Periph_GPIOE/定義 12864 要使用的 I/O 端口 的時鐘。#defineData GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|
2、GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPI O_Pin_7/定義 12864 使用的數(shù)據(jù)引腳。#defineENGPIO_Pin_10/定義使能端使用的引腳/*/#defineDisIOIOGPIOE/定義 12864 要使用的 I/O 端口。#defineDisClkIORCC_APB2Periph_GPIOE/定義 12864 要使用的 I/O 端口的時鐘。#defineRS#defineRWGPIO_Pin_9GPIO_Pin_8/*光標(biāo)定位函數(shù)定義結(jié)束。*/#define x10x80#define x20x88#define y0x80GPIO_Init
3、TypeDefGPIOStru;/定義用于定義所以引腳為輸出的變量。/* 函數(shù)名: IOInitOut* 函數(shù)描述: 把所有端口初始化為推挽輸出模式的函數(shù)* 輸入?yún)?shù): 無* 輸出結(jié)果: 無* 返回值: 無*/void IOInitOut(void)/IO 組GPIOStru.GPIO_Mode=GPIO_Mode_Out_PP;/ 定 義 所 有 的 引 腳 為 推挽輸出的變量初始化。GPIOStru.GPIO_Speed =GPIO_Speed_50MHz; GPIOStru.GPIO_Pin=Data| EN;RCC_APB2PeriphClockCmd(DisClkIO,ENABLE)
4、; GPIO_Init(DisIO,&GPIOStru);/IO 組GPIOStru.GPIO_Mode = GPIO_Mode_Out_PP;/ 定 義 所 有 的 引 腳 為 推挽輸出的變量初始化。GPIOStru.GPIO_Speed = GPIO_Speed_50MHz; GPIOStru.GPIO_Pin =RS|RW;RCC_APB2PeriphClockCmd(DisClkIO,ENABLE); GPIO_Init(DisIO,&GPIOStru);/* 函數(shù)名: IOInitIn* 函數(shù)描述: 把數(shù)據(jù)引腳初始化為浮空輸入的函* 輸入?yún)?shù): 無* 輸出結(jié)果: 無*
5、 返回值: 無*/void IOInitIn(void)GPIOStru.GPIO_Mode = GPIO_Mode_IN_FLOATING;/ 定義數(shù)據(jù) 引腳為浮空輸 入的變量初始化。GPIOStru.GPIO_Speed = GPIO_Speed_50MHz; GPIOStru.GPIO_Pin = Data;RCC_APB2PeriphClockCmd(DisClkIO,ENABLE);/ 把 所 有 端 口 初 始 化 為輸出模式的函數(shù)。GPIO_Init(DisIO,&GPIOStru);/* 函數(shù)名: WaitBusy* 函數(shù)描述: 等待 12864 的忙狀態(tài)結(jié)束的函數(shù)*
6、輸入?yún)?shù): 無* 輸出結(jié)果: 無* 返回值: 無*/void WaitBusy(void)IOInitIn();/ 把 數(shù)據(jù)引腳定義為浮空輸入GPIO_ResetBits(DisIOIO,RS);/RS = 0GPIO_SetBits(DisIOIO,RW);/RW = 1.GPIO_SetBits(DisIO,EN);/EN = 1.while(GPIO_ReadInputData(DisIO) & 0x0080);/只要位 7 的值,位 7 是忙標(biāo)志位GPIO_ResetBits(DisIO,EN);/EN = 0;IOInitOut();/把所有引腳定義為輸出。/* 函數(shù)名: W
7、riteCmd* 函數(shù)描述: 寫命令函數(shù)* 輸入?yún)?shù): 8 位命令* 輸出結(jié)果: 無* 返回值: 無*/void WriteCmd(uint8_t cmd)WaitBusy();GPIO_ResetBits(DisIOIO,RS);/RS = 0. GPIO_ResetBits(DisIOIO,RW);/RW = 0.GPIO_SetBits(DisIO,EN);/EN = 1.DisIO->ODR=(DisIO->ODR & 0xff00)|cmd);/此處,只有直接操作寄存器才能/達(dá)到,只改變輸出數(shù)據(jù)寄存器 ODR 的低 8 位,其它位/不變的目的。因?yàn)?,只有?8 位
8、是數(shù)據(jù)引腳,/其它位可能是控制引腳,不能改變。delay_us(2);GPIO_ResetBits(DisIO,EN);/EN = 0;delay_us(2);/* 函數(shù)名: WriteData* 函數(shù)描述: 寫數(shù)據(jù)函數(shù)* 輸入?yún)?shù): 8 位命令* 輸出結(jié)果: 無* 返回值: 無*/void WriteData(uint8_t data)WaitBusy();GPIO_SetBits(DisIOIO,RS);/RS = 1.GPIO_ResetBits(DisIOIO,RW);/RW = 0. GPIO_SetBits(DisIO,EN);/EN = 1.DisIO->ODR=(DisI
9、O->ODR & 0xff00)|data);/同上。delay_us(2);GPIO_ResetBits(DisIO,EN);/EN = 0;delay_us(2);/* 函數(shù)名: ReadData* 函數(shù)描述: 讀 IO 口狀態(tài)* 輸入?yún)?shù): 無* 輸出結(jié)果: 無* 返回值: 8 位數(shù)據(jù)*/uint8_t ReadData(void)uint8_t uc_Content; WaitBusy();IOInitIn();delay_ms(10);/注意:用 BCDE 組 IO 口必須這個·延時!GPIO_SetBits(DisIOIO,RW);/RW = 1;讀模式GP
10、IO_SetBits(DisIOIO,RS);/RS = 1;數(shù)據(jù)GPIO_SetBits(DisIO,EN);/EN = 1.使能delay_us(2);/延時很重要/uc_Content = (DisIO->IDR)&0x00ff; uc_Content = GPIO_ReadInputData(DisIO);GPIO_ResetBits(DisIO,EN);/EN = 0.delay_us(2);/延時很重要IOInitOut();return uc_Content;/* 函數(shù)名: InitDis* 函數(shù)描述: 初始化 12864 和要用到的 STM 32 的引腳* 輸入?yún)?/p>
11、數(shù): 無* 輸出結(jié)果: 無* 返回值: 無*/void InitDis(void)IOInitOut();delay_init(8);/初始化延時函數(shù)的微妙計數(shù)基數(shù)。WriteCmd(0x30);/選擇基本指令集,和,8 位數(shù)據(jù)模式。 delay_ms(2);WriteCmd(0x0c);/開顯示,無游標(biāo),不反白.delay_ms(2);WriteCmd(0x01);/清除顯示,并將 DDRAM 的地址計數(shù)器 AC 設(shè)為 00H. delay_ms(2);WriteCmd(0x06);/設(shè)置,外部讀寫數(shù)據(jù)后,地址記數(shù)器 AC 會自動加 1。delay_ms(2);WriteCmd(0x80);
12、/將 DDRAM 地址計數(shù)器 AC 設(shè)為 0. delay_ms(2);/* 函數(shù)名: DisStr* 函數(shù)描述: 顯示字符串的函數(shù)* 輸入?yún)?shù): 字符串地址* 輸出結(jié)果: 無* 返回值: 無*/void DisStr(uint8_t *s)while(*s != '0')WriteData(*s); s+;delay_ms(2);/* 函數(shù)名: DisInt* 函數(shù)描述: 顯示整型變量的函數(shù),最多顯示 16 位的整數(shù)(只能顯示正數(shù))* 輸入?yún)?shù): 16 位二進(jìn)制無符號整型數(shù)據(jù)* 輸出結(jié)果: 無* 返回值: 無*/void DisInt(uint16_t num)數(shù)倍,uint
13、8_t temp17; uint8_t str17; int i=0,j=0;while(num != 0)/這里不能用 num%10 != 0,如果 num 是 10 的整/例如,100,這樣就會出錯,根本就不能進(jìn)入循環(huán)體。tempi = (num%10) + 0x30; num /= 10;i+;i-;/因?yàn)?i 在退出循環(huán)之前還自加了一次,此時,/ 指向最后一個存儲有用值的元素的后一個位置。while(i != -1)/因?yàn)?i=0 時,temp0還是有用值。strj = tempi; j+;i-;strj = '0'/因?yàn)?i 在退出循環(huán)之前還自加了一次,此時,/ 指向
14、最后一個存儲有用值的元素的后一個位置。DisStr(str);/* 函數(shù)名: DisFloat* 函數(shù)描述: 顯示有 n 位小數(shù)的浮點(diǎn)數(shù),總位數(shù)不超過 16 位* 輸入?yún)?shù): 16 位數(shù)據(jù)* 輸出結(jié)果: 無* 返回值: 無*/void DisFloat(int n,float fnum)long int num = fnum*10; uint8_t temp17; uint8_t str17;int i=0,j=0; while(num != 0)tempi = (num%10)+0x30; num/=10;i+;if(i = n)/4 位小數(shù)處理完后,加入小數(shù)點(diǎn)。 i-;tempi =
15、39;.' i+;while(i != -1)strj = tempi; j+;i-;strj='0' DisStr(str);/* 函數(shù)名: Locate16* 函數(shù)描述: 光標(biāo)定位函數(shù), 第一個參數(shù)為行坐標(biāo), 第二個為列坐標(biāo),起始坐標(biāo)是 1 行 1 列, 只能以 16 個點(diǎn)的寬度為單位移動* 輸入?yún)?shù): row - 行, col - 列* 輸出結(jié)果: 無* 返回值: 無*/void Locate16(int row, int col)switch(row)case 1: WriteCmd(0x80+col-1); break; case 2: WriteCmd(0x
16、90+col-1); break; case 3: WriteCmd(0x88+col-1); break; case 4: WriteCmd(0x98+col-1); break;/顯示繪圖 全屏/* 函數(shù)名: DisInt* 函數(shù)描述: 顯示有 1 位小數(shù)的浮點(diǎn)數(shù),總位數(shù)不超過 16 位* 輸入?yún)?shù): 數(shù)據(jù)* 輸出結(jié)果: 無* 返回值: 無*/void ImageWhole(uint8_t *img)uint8_t i,j; for(j=0;j<32;j+)/上半屏for(i=0;i<8;i+)WriteCmd(0x34);WriteCmd(y+j);/給命令給第幾行垂直坐標(biāo)
17、WriteCmd(x1+i);/給命令給第幾列水平坐標(biāo) WriteCmd(0x30);WriteData(imgj*16+i*2); WriteData(imgj*16+i*2+1);for(j=32;j<64;j+)/下半屏for(i=0;i<8;i+)WriteCmd(0x34);/關(guān)閉繪圖WriteCmd(y+j-32);/給命令給第幾行垂直坐標(biāo) WriteCmd(x2+i);/給命令給第幾列水平坐標(biāo) WriteCmd(0x30);WriteData(imgj*16+i*2); WriteData(imgj*16+i*2+1);WriteCmd(0x36);/打開繪圖/* 函
18、數(shù)名: DrawPoint* 函數(shù)描述: 畫點(diǎn)函數(shù)* 輸入?yún)?shù): xx - 行, yy - 列 (x, y)* 輸出結(jié)果: 無* 返回值: 無*/void DrawPoint(uint8_t xx,uint8_t yy)uint8_t x_byte, x_bit;/在橫坐標(biāo)的哪一個字節(jié),哪一個位 uint8_t y_byte, y_bit;uint8_t tmph, tmpl;/定義兩個臨時變量,用于存放讀出來的數(shù)據(jù)tmph=0; tmpl=0;xx = xx & 0x7F; yy = yy & 0x3F;x_byte = xx / 16;/算出它在哪一個字節(jié)(地址)注意一個地
19、址是 16 位的x_bit = xx & 0x0F;/算出它在哪一個位y_byte = yy /32;/y 是沒在哪個字節(jié)這個說法 這里只是確定它在上半屏還是下半屏上半屏 1:下半屏y_bit = yy & 0x1F;/y_bit 確定它是在第幾行WriteCmd(0x34);/擴(kuò)展指令集WriteCmd(0x34);/繪圖顯示關(guān)閉WriteCmd(0x80 + y_bit);/先寫垂直地址(最高位必須為 1)具體參照數(shù)據(jù)手冊WriteCmd(0x80 + x_byte + 8*y_byte);/水平坐標(biāo)/下半屏的水平坐標(biāo)起始地址為 0x88/(+8*y_byte)就是用來確定
20、在上半屏還是下半屏ReadData();/先空讀一次tmph = ReadData();/讀高位tmpl = ReadData();/讀低位WriteCmd(0x80 + y_bit);/讀操作會改變 AC,所以重新設(shè)置一次 WriteCmd(0x80 + x_byte + 8*y_byte);/0:/if (x_bit < 8)/如果 x_bit 位數(shù)小于 8WriteData(tmph|(0x01 << (7 - x_bit);/寫高字節(jié)。因?yàn)樽鴺?biāo)是從左向右的/而 GDRAM 高位在左,底位在右WriteData(tmpl);/原數(shù)據(jù)送回elseWriteData(tmp
21、h);/原數(shù)據(jù)送回WriteData(tmpl | (0x01 << (15 - x_bit);WriteCmd(0x36);/打開繪圖顯示W(wǎng)riteCmd(0x30);/回到基本指令集,畢竟 ST7920是以字符為主的/* 函數(shù)名: ClearPoint* 函數(shù)描述: 清除點(diǎn)函數(shù)* 輸入?yún)?shù): xx - 行, yy - 列 (x, y)* 輸出結(jié)果: 無* 返回值: 無*/void ClearPoint(uint8_t xx,uint8_t yy)uint8_t x_byte, x_bit;/在橫坐標(biāo)的哪一個字節(jié),哪一個位 uint8_t y_byte, y_bit;uint8_
22、t tmph, tmpl;/定義兩個臨時變量,用于存放讀出來的數(shù)據(jù)tmph=0; tmpl=0;xx = xx & 0x7F; yy = yy & 0x3F;x_byte = xx / 16;/算出它在哪一個字節(jié)(地址)注意一個地址是 16 位的x_bit = xx & 0x0F;/算出它在哪一個位y_byte = yy /32;/y 是沒在哪個字節(jié)這個說法 這里只是確定它在上半屏還是下半屏上半屏 1:下半屏/0:y_bit = yy & 0x1F;/y_bit 確定它是在第幾行WriteCmd(0x34);/擴(kuò)展指令集WriteCmd(0x34);/繪圖顯示關(guān)
23、閉WriteCmd(0x80 + y_bit);/先寫垂直地址(最高位必須為 1)/具體參照數(shù)據(jù)手冊WriteCmd(0x80 + x_byte + 8*y_byte); /水平坐標(biāo)/下半屏的水平坐標(biāo)起始地址為 0x88/(+8*y_byte)就是用來確定在上半屏還是下半屏ReadData();/先空讀一次tmph = ReadData();/讀高位tmpl = ReadData();/讀低位WriteCmd(0x80 + y_bit);/讀操作會改變 AC,所以重新設(shè)置一次 WriteCmd(0x80 + x_byte + 8*y_byte);if (x_bit < 8)/如果 x_b
24、it 位數(shù)小于 8WriteData(tmph&(0xfe << (7 - x_bit);/寫高字節(jié)。因?yàn)樽鴺?biāo)是從左向右的右/而 GDRAM 高位在左,底位在WriteData(tmpl);/ 原 數(shù)據(jù)送回elseWriteData(tmph);/原數(shù)據(jù)送回WriteData(tmpl & (0xfe << (15 - x_bit);WriteCmd(0x36);/打開繪圖顯示W(wǎng)riteCmd(0x30);/回到基本指令集,畢竟 ST7920是以字符為主的/* 函數(shù)名: ClearAll* 函數(shù)描述: 清整個 GDRAM 空間* 輸入?yún)?shù): 無* 輸出結(jié)
25、果: 無* 返回值: 無*/void ClearAll(void)uint8_t xxx, yyy; for(yyy=0; yyy<64; yyy+)for(xxx=0; xxx<16; xxx+)WriteCmd(0x34); WriteCmd(yyy+0x80);/行地址WriteCmd(xxx+0x80);/列地址 WriteCmd(0x30); WriteData(0x00); WriteData(0x00);/* 函數(shù)名: DrawLineX* 函數(shù)描述: 畫水平線* 輸入?yún)?shù): xx0 - X 起始, xx1 - X 結(jié)束, yy - Y* 輸出結(jié)果: 無* 返回值:
26、無*/void DrawLineX(uint8_t xx0,uint8_t xx1,uint8_t yy)uint8_t temp; if(xx0 > xx1)temp = xx0; xx0 = xx1; xx1 = temp;for(xx0=xx0; xx0<=xx1; xx0+)DrawPoint(xx0, yy);/* 函數(shù)名: DrawLineY* 函數(shù)描述: 畫垂直線* 輸入?yún)?shù): yy0 - Y 起始, yy1 - Y 結(jié)束, xxX* 輸出結(jié)果: 無* 返回值: 無*/void DrawLineY(uint8_t xx, uint8_t yy0, uint8_t yy
27、1)uint8_t temp; if(yy0>yy1)temp=yy0; yy0=yy1; yy1=temp;for(yy0=yy0;yy0<=yy1;yy0+)DrawPoint(xx,yy0);/* 函數(shù)名: DrawLine* 函數(shù)描述: 畫直線* 輸入?yún)?shù): xx1 - X 起始, yy1 - Y 起始, xx2 - X 結(jié)束, yy2 - Y 結(jié)束,x:橫坐標(biāo)值,范圍 0127 y:縱坐標(biāo)值,范圍 063 xx2>=xx1* 輸出結(jié)果: 無* 返回值: 無*/void DrawLine(uint8_t xx1,uint8_t yy1,uint8_t xx2,uint8_t yy2)uint8_t x_add,y_add,y_temp,Line_K;xx1&=0x7f;xx2&=0x7f;/去掉 128 倍yy1&=0x3f;yy2&=0x3f;/去掉 64 倍if(xx2>xx1)if( yy2>yy1 | yy2=yy1 )Line_K=(yy2-yy1)/(xx2-xx1); for(x_add=0;x_ad
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 八年級歷史下冊 第二學(xué)習(xí)主題 社會主義道路的探索 第5課 艱苦創(chuàng)業(yè)的民族脊梁教案 川教版
- 2024學(xué)年九年級英語上冊 Unit 2 Great People Lesson 7 What Is the Meaning of Life教案(新版)冀教版
- 2024年春八年級生物下冊 第7單元 第1章 第1節(jié) 植物的生殖教案 (新版)新人教版
- 2024年五年級數(shù)學(xué)下冊 五 分?jǐn)?shù)除法第1課時 分?jǐn)?shù)除法(一)教案 北師大版
- 八年級生物上冊 第四單元 第一章 第一節(jié)花的結(jié)構(gòu)和類型教案 (新版)濟(jì)南版
- 2024-2025學(xué)年高中歷史 第三單元 第二次世界大戰(zhàn) 探究活動課一 世界大戰(zhàn)的啟示-戰(zhàn)爭給人類帶來了什么(2)教學(xué)教案 新人教版選修3
- 總經(jīng)理聘用合同(2篇)
- 銀行免還款合同(2篇)
- 麻雀人教版課件
- 第13課《唐詩五首·黃鶴樓》八年級語文上冊精講同步課堂(統(tǒng)編版)
- 紅色故事演講
- 《大學(xué)語文2》課程教學(xué)大綱
- 《NBA球隊介紹》課件
- 馬克思主義政治經(jīng)濟(jì)學(xué)題庫
- 《建構(gòu)主義學(xué)習(xí)理論》課件
- 病案室應(yīng)急預(yù)案及處置流程
- 三《協(xié)商》(課件)-【中職專用】高二語文同步課件(高教版2023·職業(yè)模塊)
- 比特幣介紹課件
- 腫瘤患者的心理支持與疏導(dǎo)
- 2024病歷書寫規(guī)范理論考試題
- 長安CS35汽車說明書
評論
0/150
提交評論