久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
TFT液晶SSD2119的stm32單片機驅動
[打印本頁]
作者:
回首夢煙云
時間:
2017-9-6 12:25
標題:
TFT液晶SSD2119的stm32單片機驅動
SSD2119 ID:9919;基于stm32f1的
0.png
(36.85 KB, 下載次數: 74)
下載附件
2017-9-6 16:31 上傳
單片機源程序如下:
//-------------------------------------------------------------------------*
//文件名: LCD.c (LCD操作函數文件) *
//-------------------------------------------------------------------------*
#include "LCD.h"
#include "font.h"
//內部調用的函數聲明
static void WriteRegister(uint16 index,uint16 data);//寫指定地址寄存器的值
static void WriteIndex(uint16 index);//寫 SSD2119 控制器寄存器地址
static void WriteData(uint16 data);//寫 SSD2119 寄存器數據
static uint16 ReadRegister(uint16 index);//讀取指定地址寄存器的值
static uint16 ReadData(void);//讀取控制器數據
static void SetCursor(uint16 x,uint16 y);//設置屏幕坐標
static void Reset();//復位 SSD2119 控制器
static void LCDDrawChar(uint16 x, uint16 y, uint8 *c);//在屏幕上畫一個字符
static void LCDDrawChinese(uint16 x, uint16 y, uint16 *c);//在屏幕上畫一個漢字
//-------------------------------------------------------------------------*
//函數名: LCDInit *
//功 能: 液晶初始化程序 *
//參 數: 無 *
//返 回: 無 *
//內部調用:WriteRegister *
//說 明: 初始化液晶的顯示方式 *
//-------------------------------------------------------------------------*
void LCDInit(void)
{
uint8 tmp;
uint16 i;
static uint16 DeviceCode;
PIN_FUNCTION();//配置引腳功能為GPIO
CONTROL_OUTPUT();//配置控制引腳為輸出
//設置GPIO為輸出
DATA_OUTPUT();
WriteData(0xffff);
Set_RST;
Set_Cs;
Set_Rs;
Set_nWr;
Set_nRd;
Set_RST;
Reset();
Delay(200);
WriteRegister(0x0000,0x0001);
Delay(200);
for(i=50000;i>0;i--);
for(i=50000;i>0;i--);
//DeviceCode = ReadRegister(0x0000);
DeviceCode=0x9919;
if(DeviceCode == 0x9919)
{
//*********POWER ON &RESET DISPLAY OFF
WriteRegister(0x28,0x0006);
WriteRegister(0x00,0x0001);
WriteRegister(0x10,0x0000);
WriteRegister(0x01,0x72ef);
WriteRegister(0x02,0x0600);
WriteRegister(0x03,0x6a38);
//WriteRegister(0x11,0x6874);//70//從左到右(橫屏顯示)
WriteRegister(0x11,0x685C); //70//從上到下(豎屏顯示)
// RAM WRITE DATA MASK
WriteRegister(0x0f,0x0000);
// RAM WRITE DATA MASK
WriteRegister(0x0b,0x5308);
WriteRegister(0x0c,0x0003);
WriteRegister(0x0d,0x000a);
WriteRegister(0x0e,0x2e00); //0030
WriteRegister(0x1e,0x00be);
WriteRegister(0x25,0x8000);
WriteRegister(0x26,0x7800);
WriteRegister(0x27,0x0078);
WriteRegister(0x4e,0x0000);
WriteRegister(0x4f,0x0000);
WriteRegister(0x12,0x08d9);
// -----------------Adjust the Gamma Curve----//
WriteRegister(0x30,0x0000); //0007
WriteRegister(0x31,0x0104); //0203
WriteRegister(0x32,0x0100); //0001
WriteRegister(0x33,0x0305); //0007
WriteRegister(0x34,0x0505); //0007
WriteRegister(0x35,0x0305); //0407
WriteRegister(0x36,0x0707); //0407
WriteRegister(0x37,0x0300); //0607
WriteRegister(0x3a,0x1200); //0106
WriteRegister(0x3b,0x0800);
WriteRegister(0x07,0x0033);
}
for(i=50000;i>0;i--);
//LCDClear(0xff00);
}
//-------------------------------------------------------------------------*
//函數名: LCDClear *
//功 能: 將屏幕填充成指定的顏色,如清屏,則填充 0xffff *
//參 數: ClearColor:填充顏色 *
//返 回: 無 *
//內部調用:SetCursor,WriteIndex,WriteData *
//說 明: 將屏幕填充成指定的顏色 *
//-------------------------------------------------------------------------*
void LCDClear(uint16 ClearColor)
{
uint32 i;
SetCursor(0x0000, 0x0000);
Clr_Cs;
WriteIndex(0x0022);
Set_Rs;
for(i=0;i<76800;i++)
{
WriteData(ClearColor);
Clr_nWr;
Set_nWr;
}
Set_Cs;
}
//-------------------------------------------------------------------------*
//函數名: LCDTest *
//功 能: 測試液晶屏 *
//參 數: 無 *
//返 回: 無 *
//內部調用:WriteIndex,WriteRegister,WriteData *
//說 明: *
//-------------------------------------------------------------------------*
void LCDTest(void)
{
uint16 i,j;
WriteRegister(0x4e, 0);
WriteRegister(0x4f, 0);
Clr_Cs;
WriteIndex(0x22);
for(i=0;i<320;i++)
for(j=0;j<240;j++)
{
if(i>279)WriteData(0xffff);
else if(i>239)WriteData(0x001f);
else if(i>199)WriteData(0x07e0);
else if(i>159)WriteData(0x07ff);
else if(i>119)WriteData(0xf800);
else if(i>79)WriteData(0xf81f);
else if(i>39)WriteData(0xffe0);
else WriteData(0xffff);
}
Set_Cs;
}
//-------------------------------------------------------------------------*
//函數名: LCDSetPixel *
//功 能: 在指定座標畫點 *
//參 數: x 行座標 *
// y 列座標 *
// PixcelColor 像素的顏色 *
//返 回: 無 *
//內部調用:SetCursor,WriteIndex,WriteData *
//說 明: *
//-------------------------------------------------------------------------*
void LCDSetPixel(uint16 x,uint16 y,uint16 PixcelColor)
{
if ( (x>320)||(y>240) ) return;
SetCursor(x,y);
Clr_Cs;
WriteIndex(0x0022);
WriteData(PixcelColor);
Set_Cs;
}
//-------------------------------------------------------------------------*
//函數名: LCDShowChar *
//功 能: 顯示一個字符(8*16點陣) *
//參 數: ln:字符要顯示的行 *
// col:字符要顯示的列 *
// c:要顯示的字符 *
//返 回: 無 *
//內部調用:LCDDrawChar *
//說 明: *
//-------------------------------------------------------------------------*
void LCDShowChar(uint16 ln, uint16 col, uint8 c)
{
c -= 32;
LCDDrawChar(ln, col, &ASCII_Character[c*16]);
}
//-------------------------------------------------------------------------*
//函數名: LCDShowStringLn *
//功 能: 在指定的行顯示字符串 *
//參 數: ln:要顯示的行 *
// *s: 指向字符串的指針 *
//返 回: 無 *
//內部調用:LCDDrawChar *
//說 明: *
//-------------------------------------------------------------------------*
void LCDShowStringLn(uint16 ln, uint8 *s)
{
uint16 i = 1;
uint16 Count=0;
//uint16 refcolumn = (WIDTH/*-1*/)-16;
uint16 refcolumn = 240;
uint8 *p;
p=s;
//統計字符個數
while(*p!= 0)
{
Count++;
p++;
}
UartSend1(0,Count);
while ((*s != 0) && (i <= Count)) //在屏幕上依次寫每個字符
{
LCDShowChar(ln, refcolumn, *s);
refcolumn -= 8; //列減去一個字符
s++;
if((i%30)==0)
{
refcolumn=240;
ln+=16;//換行
}
i++; //統計字符的個數
}
}
//-------------------------------------------------------------------------*
//函數名: LCDShowChinese *
//功 能: 在指定的行、列顯示一個漢字 *
//參 數: ln:漢字要顯示的行 *
// col:漢字要顯示的列 *
// start:要顯示的漢字串的開始下標 *
//返 回: 無 *
//內部調用:LCDDrawChinese *
//說 明: *
//-------------------------------------------------------------------------*
void LCDShowChinese(uint16 ln, uint16 col, uint8 start)
{
LCDDrawChinese(ln, col, &ASCII_Chinese[16*start]);
}
//-------------------------------------------------------------------------*
//函數名: LCDShowChineseLine *
//功 能: 在指定的行顯示一串漢字 *
//參 數: ln:漢字要顯示的行 *
// start:要顯示的漢字串的開始下標 *
// count:一行中要顯示的漢字個數 *
//返 回: 無 *
//內部調用:LCDDrawChinese *
//說 明: *
//-------------------------------------------------------------------------*
void LCDShowChineseLine(uint16 ln, uint8 start,uint8 count)
{
uint8 i,temp=0;
uint16 column = 240;
for(i=start;i<count+start;i++)
{
LCDDrawChinese(ln, column, &ASCII_Chinese[16*i]);
column-=16;
temp++;
if(temp%15==0)
{
ln+=16;
column=240;
}
}
}
//-------------------------------------------------------------------------*
//函數名: LCDShowBitmap *
//功 能: 顯示一幅圖片,x為水平坐標,y為垂直坐標,每個像素用16位二進制表示 *
// 5:6:5格式 *
//參 數: x: 水平起始位置 *
// y: 垂直起始位置 *
// w: 圖片的寬度 *
// h: 圖片的高度 *
// bitmap: 指向圖片數組的指針 *
//返 回: 無 *
//內部調用: *
//說 明: *
//-------------------------------------------------------------------------*
void LCDShowBitmap(uint16 x, uint16 y, uint16 w, uint16 h, uint8 *bitmap)
{
uint16 i,j;
uint16 len = w*h;
uint16 *bitmap_ptr = (uint16 *)bitmap;
for (j = 0; j< h; j++)
{
SetCursor(x,y);
Clr_Cs;
WriteIndex(0x22);
Set_Rs;
for(i = 0; i<w; i++)
{
WriteData(*bitmap_ptr++);
}
x++;//換行
Set_Cs;
}
}
//內部調用的函數
//-------------------------------------------------------------------------*
//函數名: WriteRegister *
//功 能: 寫指定地址寄存器的值 *
//參 數: index 寄存器地址 *
// data 寄存器值 *
//返 回: 無 *
//內部調用:WriteIndex,WriteData *
//說 明: 內部函數 *
//-------------------------------------------------------------------------*
static void WriteRegister(uint16 index,uint16 data)
{
/************************************************************************
** **
** nCS ----\__________________________________________/------- **
** RS ------\____________/----------------------------------- **
** nRD ------------------------------------------------------- **
** nWR --------\_______/--------\_____/----------------------- **
** DB[0:15] ---------[index]----------[data]----------------------- **
** **
************************************************************************/
Clr_Cs;
WriteIndex(index);
WriteData(data);
Set_Cs;
}
//-------------------------------------------------------------------------*
//函數名: WriteIndex *
//功 能: 寫 SSD2119 控制器寄存器地址 *
//參 數: index 寄存器地址 *
//返 回: 無 *
//內部調用: *
//說 明: 調用前需先選中控制器,內部函數 *
//-------------------------------------------------------------------------*
static void WriteIndex(uint16 index)
{
Clr_Rs;
Set_nRd;
DATA_LO_PORT = index;
DATA_HI1_PORT = (index>>8);
DATA_HI2_PORT = (index>>12);
Clr_nWr;
Set_nWr;
Set_Rs;
}
//-------------------------------------------------------------------------*
//函數名: WriteData *
//功 能: 寫 SSD2119 寄存器數據 *
//參 數: data 寄存器數據 *
//返 回: 無 *
//內部調用: *
//說 明: 向控制器指定地址寫入數據,調用前需先寫寄存器地址,內部函數 *
//-------------------------------------------------------------------------*
static void WriteData(uint16 data)
{
Set_Rs;
Set_nRd;
DATA_LO_PORT = data;
DATA_HI1_PORT = (data>>8);
DATA_HI2_PORT = (data>>12);
Clr_nWr;
Set_nWr;
}
//-------------------------------------------------------------------------*
//函數名: ReadRegister *
//功 能: 讀取指定地址寄存器的值 *
//參 數: index 寄存器地址 *
//返 回: 寄存器值 *
//內部調用: WriteIndex, ReadData *
//說 明: 內部函數 *
//-------------------------------------------------------------------------*
static uint16 ReadRegister(uint16 index)
{
Clr_Cs;
WriteIndex(index);
Clr_nRd;
index = ReadData();
Set_nRd;
Set_Cs;
return index;
}
//-------------------------------------------------------------------------*
//函數名: ReadData *
//功 能: 讀取控制器數據 *
//參 數: 無 *
//返 回:返回讀取到的數據 *
//內部調用: *
//說 明: 內部函數 *
//-------------------------------------------------------------------------*
static uint16 ReadData(void)
{
//========================================================================
// ** **
// ** nCS ----\__________________________________________/------- **
// ** RS ------\____________/----------------------------------- **
// ** nRD -------------------------\_____/--------------------- **
// ** nWR --------\_______/-------------------------------------- **
// ** DB[0:15] ---------[index]----------[data]----------------------- **
// ** **
//========================================================================
uint16 tmp;
DATA_INPUT();
tmp =DATA_HI2_PORT;
tmp = (tmp << 4) + DATA_HI1_PORT; /* 讀入高8位數據*/
tmp = (tmp << 8) + DATA_LO_PORT; /* 讀入低8位數據*/
DATA_OUTPUT();
return tmp;
}
//-------------------------------------------------------------------------*
//函數名: SetCursor *
//功 能: 設置屏幕坐標 *
//參 數: x 行坐標 *
// y 列坐標 *
//返 回:無 *
//內部調用: *
//說 明: 內部函數 *
//-------------------------------------------------------------------------*
static void SetCursor(uint16 x,uint16 y)
{
WriteRegister(0x004e,x); // 行
WriteRegister(0x004f,y); // 列
}
//-------------------------------------------------------------------------*
//函數名: Reset *
//功 能: 復位 SSD2119 控制器 *
//參 數: 無 *
//返 回: 無 *
//內部調用: *
//說 明: 復位控制器,內部函數 *
//-------------------------------------------------------------------------*
static void Reset()
{
/***************************************
** **
** -------\______________/------- **
** | <---Tres---> | **
** **
** Tres: Min.1ms **
***************************************/
Set_RST;
Delay(50);
Cls_RST;
Delay(50);
Set_RST;
Delay(50);
}
//-------------------------------------------------------------------------*
//函數名: LCDDrawChar *
//功 能: 在給定的行、列畫一個字符(8*16點陣) *
//參 數: x :字符所在的行 *
// y :字符所在的列 *
// c*:指向字符的指針 *
//返 回: 無 *
//內部調用: *
//說 明: 內部函數 *
//-------------------------------------------------------------------------*
static void LCDDrawChar(uint16 x, uint16 y, uint8 *c)
{
uint16 index = 0;
int32 i = 0;
uint16 Xaddress = 0;
Xaddress = x;
WriteRegister(0x4e, Xaddress);
WriteRegister(0x4f, y);
for(index = 0; index < 16; index++)
{
Clr_Cs;
WriteIndex(0x22);
for(i = 8; i >= 0; i--)
{
if((c[index] & (1 << i)) == 0x00)
{
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
SSD2119驅動.rar
(5.03 KB, 下載次數: 60)
2017-9-6 12:25 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
回首夢煙云
時間:
2017-9-6 12:26
TFT液晶!!!
作者:
dengmcu
時間:
2018-6-14 09:53
SSD2119是不是也是屬于8080接口的?
作者:
lg2911
時間:
2018-8-31 22:53
本帖最后由 lg2911 于 2018-9-1 11:26 編輯
dengmcu 發表于 2018-6-14 09:53
SSD2119是不是也是屬于8080接口的?
看手冊確認了一下,SSD2119本身是8080和6800兩種接口都支持的,用PS3-PS0來選擇,要看液晶模組是否把這4根線引出來了,要是引出了,那就是可以使用者自己設置的
作者:
imaginever
時間:
2018-11-13 13:52
謝謝分享,正在學習這方面知識
作者:
sunlinfei
時間:
2021-6-15 16:15
謝謝分享,正在學習這方面知識
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
网站av
|
免费看黄色小视频
|
久在线
|
精品理论片
|
黄色成人免费网站
|
精品一区二区三区免费
|
亚洲三级视频在线观看
|
久久爱综合
|
国模无码大尺度一区二区三区
|
欧美又大又硬又粗bbbbb
|
亚洲第一免费视频
|
午夜国产在线
|
brazzers精品成人一区
|
国内精品偷拍
|
日韩二区三区
|
精品99视频
|
人人干人人爱
|
午夜一级片
|
国产精品福利在线
|
一区二区三区在线看
|
成人国产在线
|
天堂免费av
|
久久久久久一区二区
|
日韩专区在线观看
|
日本不卡视频在线观看
|
亚洲观看黄色网
|
亚洲综合二区
|
日韩特级毛片
|
欧美日韩精品久久久免费观看
|
天天操天天干天天
|
超碰一区二区
|
又色又爽又黄gif动态图
|
国产无遮挡又黄又爽又色
|
日韩一级片在线观看
|
日本黄色免费看
|
国产1级片
|
日韩精品视频在线播放
|
黄大色黄大片女爽一次
|
久久黄色网址
|
久久av资源
|
日本www色
|