欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
STM32F107_ST7756驅(qū)動(dòng)程序
[打印本頁]
作者:
sky___
時(shí)間:
2021-4-23 10:46
標(biāo)題:
STM32F107_ST7756驅(qū)動(dòng)程序
實(shí)驗(yàn)成功能夠顯示字符,程序源碼如下
單片機(jī)源程序如下:
#include <stm32f10x.h>
#include "stm_systick.h"
#include "hem12864.h"
#include "stm_gpio_init.h"
#include "FONT.H"
//#define HEM12864_RS PDout(10)
//#define HEM12864_RST PDout(9)
//#define HEM12864_CS PDout(8)
//u8 charA[] ={0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00};/*"B",0*/
//u8 chartemp[] = {0x10,0x60,0x02,0x8C,0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,0x04,0x04,0x7E,0x01,0x40,0x7E,0x42,0x42,0x7E,0x42,0x7E,0x42,0x42,0x7E,0x40,0x00};/*"?",0*/
void hem12864_gpio_init(void)
{
RCC->APB2ENR |= 1 << 5;//開GPIOD時(shí)鐘
GPIOD->CRH &= 0xFFFF0000;
GPIOD->CRH |= 0x00002222;//GPIOD0~11推挽輸出
GPIOD->ODR |= 0x7 << 8;
GPIOD->ODR &= 0 << 11;
RCC->APB2ENR |= 1 << 3;//開GPIOB時(shí)鐘
GPIOB->CRH &= 0x0F0FFFFF;
GPIOB->CRH |= 0x20200000;//PB13/PB15推挽輸出
GPIOB->ODR |= 1 << 13;//PB13上拉
GPIOB->ODR |= 1 << 15;//PB15上拉
}
/*
void HEM12864_SPI_Init(void)
{
RCC->APB2ENR |= 1 << 3;//開GPIOB時(shí)鐘
RCC->APB1ENR |= 1 << 14;//開SPI2時(shí)鐘
GPIOB->CRH &= 0x0F0FFFFF;
GPIOB->CRH |= 0xB0B00000;//PB13/PB15復(fù)用
GPIOB->ODR |= 1 << 13;//PB13上拉
GPIOB->ODR |= 1 << 15;//PB15上拉
SPI2->CR1 |= 0 << 10;//全雙工模式
SPI2->CR1 |= 1 << 9;//軟件NSS管理
SPI2->CR1 |= 1 << 8;
SPI2->CR1 |= 1 << 2;//SPI主機(jī)
SPI2->CR1 |= 0 << 11;//8Bit數(shù)據(jù)格式
SPI2->CR1 |= 1 << 1;//空閑模式下SCK為1 CPOL=1
SPI2->CR1 |= 1 << 0 ;//數(shù)據(jù)采樣從第二個(gè)時(shí)鐘邊沿開始,CPHA=1
//對SPI2屬于APB1的外設(shè),時(shí)鐘頻率最大為36M。
SPI2->CR1 |= 4 << 3; //FSCK = Fpclk1/32
SPI2->CR1 |= 0 << 7;//MSB first
SPI2->CR1 |= 1 << 6;//SPI設(shè)備使能
}
u8 SPI2_ReadWriteByte(u8 TxData)
{
u16 retry=0;
while((SPI2->SR&1<<1)==0) //等待發(fā)送區(qū)空
{
retry++;
if(retry>=0XFFFE)return 0; //超時(shí)退出
}
SPI2->DR=TxData; //發(fā)送一個(gè)Byte
retry=0;
}
*/
/*
void HEM12864_Init(void)
{
HEM12864_RST = 0;
Delay_us(40000);
HEM12864_RST = 1;
HEM12864_CS = 0;
HEM12864_RS = 0;
SPI2_ReadWriteByte(0x30);
Delay_us(120);
SPI2_ReadWriteByte(0X30);
Delay_us(40);
SPI2_ReadWriteByte(0X0F);
Delay_us(120);
SPI2_ReadWriteByte(0X01);
Delay_us(10000);
SPI2_ReadWriteByte(0X06);
}
*/
//=========================LCD??????======================
#define LCDA0 PDout(10)
#define LCDRS PDout(9)
#define HEM12864_CS PDout(8)
#define LCDSK PBout(13)
#define LCDSI PBout(15)
/*
sbit LCDA0=P2^5; //????
sbit LCDSK=P2^6; //????
sbit LCDSI=P2^7; //????
sbit LCDRS=P2^4; //????
*/
//=========================????=============================
void LCDInit(); //?????
void LCDWritecom(char com); //??????,????/????(0??,1??)
void LCDShiftWrite(char dat); //???????
void LCDSetXY(char x, char y); //??????
//void LCDcls(char); //????,????????value
//***************************????*******************************
/*
extern unsigned char code hzcode[][128]; //
extern unsigned char code gbcode[][32]; //
extern unsigned char code asc816code[][16]; //
extern unsigned char code asc1832code[][64]; //
extern unsigned char code arrow[]; //
*/
void lcd12864_display_on(void) //顯示開
{
LCDWritecom(0xaf);
}
void lcd12864_display_off(void)//顯示關(guān)
{
LCDWritecom(0xae);
}
void lcd12864_display_normal(void) //正常顯示
{
LCDWritecom(0xa6);
}
void lcd12864_display_reverse(void) //反白顯示
{
LCDWritecom(0xa7);
}
void lcd12864_display_all_point_off(void) //全屏正常顯示
{
LCDWritecom(0xa4);
}
void lcd12864_display_all_point_on(void) //全屏點(diǎn)亮
{
LCDWritecom(0xa5);
}
void lcd12864_rst(void)
{
LCDRS=0; //LCD 復(fù)位有效(L)
Delay_us(1000); // 延時(shí)1ms , Datasheet 要求至少大于1us
LCDRS = 1; //LCD 復(fù)位無效(H)
Delay_us(1000); //硬件復(fù)位
LCDWritecom(0xe2); //寄存器復(fù)位
Delay_us(1000);
}
//========================?????????=================================
void LCDInit()
{
HEM12864_CS = 0;
LCDRS=0; //LCD 復(fù)位有效(L)
Delay_us(1000); // 延時(shí)1ms , Datasheet 要求至少大于1us
LCDRS = 1; //LCD 復(fù)位無效(H)
Delay_us(1000); //硬件復(fù)位
LCDWritecom(0xe2); //寄存器復(fù)位
Delay_us(1000);
// 電源管理初始
lcd12864_display_on(); //0xaf顯示器開,0xae顯示器關(guān)
LCDWritecom(0x2f); ///0x2f升壓電路,電壓管理電路,
//電壓跟隨電路均開(0x28-0x2f為設(shè)置上電控制模式)
LCDWritecom(0x25); //0x20-0x27為V5電壓內(nèi)部電阻調(diào)整設(shè)置
LCDWritecom(0x81); //電量設(shè)置模式
LCDWritecom(0x0f); //0x01-0x3f電量寄存器設(shè)置模式
// 根據(jù)屏的方向初始化安裝方向(復(fù)位后默認(rèn)下面配置)
LCDWritecom(0xa0); //0xa0為Segment正向,0xa1 為Segment反向
//(0xa0-0xa1為ADC方向選擇)
LCDWritecom(0xc8); //0xc0正向掃描,0xc8反射掃描
// 顯示管理初始(復(fù)位后默認(rèn)下面配置)
lcd12864_display_normal(); //0xa6正向顯示,0xa7反向顯示
lcd12864_display_all_point_off(); //0xa4正常顯示,0xa5全屏點(diǎn)亮
// 指示器設(shè)置
LCDWritecom(0xac); //
LCDWritecom(0x00); //
//背壓比設(shè)置
LCDWritecom(0xf8); //
LCDWritecom(0x00); //
// LCDcls(0); //????????,????0
}
//========================?????(???????)=============================
void LCDWritecom(char com)
{
// LCDCS = 0; //CS=0.?:??????CS,???????.
LCDA0 = 0; //A0=0,????
LCDShiftWrite(com);
}
void LCDWritedata(char data)
{
LCDA0 = 1; //A0=1,????
LCDShiftWrite(data);
// LCDCS = 1; //CS=1.?:??????CS,???????.
}
//===========================??(??)??????================================
void LCDShiftWrite(char dat)
{
unsigned char i; //??????
unsigned char Series,Temp; //??????
LCDSK = 0; //SCL=0
Series = dat;
for(i=0; i<8; i++)
{
LCDSK = 0; //SCL=0
Temp=Series & 0x80; //???7?
if(Temp) //??Temp=1,??SI=1.??Temp+0,??SI=0
{
LCDSI = 1; //SI=1
}
else
{
LCDSI = 0; //SI=0
}
LCDSK = 1; //SCL=1????
Series = Series << 1; //??1?
}
}
void LCD12864_Pos(u8 x,u8 y)
{
u8 pos;
if (x==1) {x=0x80;}
else if (x==2) {x=0x90;}
else if (x==3) {x=0x88;}
else if (x==4) {x=0x98;}
else x=0x80;
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
51hei.png
(5.12 KB, 下載次數(shù): 54)
下載附件
2021-4-29 23:18 上傳
所有資料51hei提供下載:
ST7567.zip
(3.6 KB, 下載次數(shù): 4)
2021-4-23 10:45 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1