久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
lcd12864程序看不懂
[打印本頁]
作者:
rrrlll
時間:
2017-11-8 20:41
標題:
lcd12864程序看不懂
**************************************************************************************************/
這是12864的程序,這個程序比較看不懂,麻煩進行簡單的顯示嘛
原理圖如下:
FY2PN[~XTRUEQ(X3~M]{WWK.png
(207.12 KB, 下載次數: 57)
下載附件
2017-11-8 20:40 上傳
#include"FYD12864.h"
/*************************************************************************************************/
void Delay_nus(unsigned int nTime)
{
unsigned long j;
while(nTime--)
{
j=12;
while(j--);
}
}
/*************************************************************************************************/
void LCD12864_Init(void) //初始化LCD12864
{
//----------------------------------------------------------------------
Delay_nus(200);
SET_LCD12864_CS;
//----------------------------------------------------------------------
LCD2864Write_char(0, 0x01); //清除屏幕顯示,將DDRAM的地址計數器清零
Delay_nus(200);
LCD2864Write_char(0, 0x30); //8BIT控制界面,基本指令集
Delay_nus(200);
LCD2864Write_char(0, 0X0C);
Delay_nus(200);
LCD2864Write_char(0, 0x01); // 清除屏幕顯示,將DDRAM的地址計數器清零
Delay_nus(200);
LCD2864Write_char(0, 0x06); // DDRAM的地址計數器(AC)加1
Delay_nus(200);
//----------------------------------------------------------------------
LCD12864_Clear();
}
/*************************************************************************************************/
/*************************************************************************************************/
void Send_byte(unsigned char bbyte) //發送一個字節
{
unsigned char i;
for(i = 0; i < 8; i++)
{
if((bbyte & 0x80) == 0x80) //取出最高位
{
SET_LCD12864_STD;
}
else
{
CLR_LCD12864_STD;
}
SET_LCD12864_SCLK;
CLR_LCD12864_SCLK;
bbyte <<= 1; //左移
}
}
void LCD2864Write_char(unsigned char Mode, unsigned char ddata) //寫指令或數據
{
unsigned char CMD_data, Hdata, Ldata;
if(Mode == 0X00)
CMD_data = 0xf8; //寫指令
else
CMD_data = 0xfa; //寫數據
Hdata = ddata & 0xf0; //取高四位
Ldata = (ddata << 4) & 0xf0; //取低四位
Send_byte(CMD_data); //發送起始信號
Delay_nus(10); //延時是必須的
Send_byte(Hdata); //發送高四位
Delay_nus(10); //延時是必須的
Send_byte(Ldata); //發送低四位
Delay_nus(10); //延時是必須的
}
/*************************************************************************************************/
/*************************************************************************************************/
void LCD12864_Clear(void) //清屏函數
{
// LCD2864Write_char(0,0x01);
LCD12864_lineclr(1);
LCD12864_lineclr(2);
LCD12864_lineclr(3);
LCD12864_lineclr(4);
}
void LCD12864_dispClear(void) //清屏函數
{
// LCD2864Write_char(0,0x01);
LCD12864_lineclr(2);
LCD12864_lineclr(3);
LCD12864_lineclr(4);
}
/*************************************************************************************************/
void LCD12864_RE_0_1(void) //文字模式,指令集由0變為1
{
LCD2864Write_char(0, 0x30);
Delay_nus(50);
LCD2864Write_char(0, 0x34);
Delay_nus(50);
LCD2864Write_char(0, 0x36);
Delay_nus(50);
}
//此函數如果在文本模式,可以不要,如果同時顯示圖和顯示字就要及時更換指令集,實現具體是什么操作
void LCD12864_RE_1_0(void) //圖形模式,指令集由1變為0
{
LCD2864Write_char(0, 0x36);
Delay_nus(50);
LCD2864Write_char(0, 0x32);
Delay_nus(50);
}
/*************************************************************************************************/
void LCD12864_SetAddr(unsigned char VerticalAddr, unsigned char HorizontalAddr) //設定地址
{
VerticalAddr &= 0x1F;
HorizontalAddr &= 0xFF;
LCD2864Write_char(0,VerticalAddr | 0x80);
Delay_nus(100);
LCD2864Write_char(0,HorizontalAddr | 0x80);
Delay_nus(100);
}
void LCD12864_Write_String(uint8_t hang, uint8_t lie, char *StringBuf)
{
uint8_t address, i = 0;
switch(hang)
{
case 1:
address = 0x80;
break;
case 2:
address = 0x90;
break;
case 3:
address = 0x88;
break;
case 4:
address = 0x98;
break;
default:
address = 0x80;
}
LCD2864Write_char(0, address + lie);
for(i = 0; i < 16; i++)
{
LCD2864Write_char(1, *StringBuf);
StringBuf++;
}
}
void LCD12864_DispString2(uint8_t hang, uint8_t lie, char *StringBuf, uint8_t LEN)
{
uint8_t address, i = 0;
switch(hang)
{
case 1:
address = 0x80;
break;
case 2:
address = 0x90;
break;
case 3:
address = 0x88;
break;
case 4:
address = 0x98;
break;
default:
address = 0x80;
}
LCD2864Write_char(0, address + lie);
for(i = 0; i < LEN; i++)
{
LCD2864Write_char(1, *StringBuf);
StringBuf++;
}
}
void LCD12864_DispString3(uint8_t hang, uint8_t lie, const char *StringBuf, uint8_t LEN)
{
uint8_t address, i = 0;
switch(hang)
{
case 1:
address = 0x80;
break;
case 2:
address = 0x90;
break;
case 3:
address = 0x88;
break;
case 4:
address = 0x98;
break;
default:
address = 0x80;
}
LCD2864Write_char(0, address + lie);
for(i = 0; i < LEN; i++)
{
LCD2864Write_char(1, *StringBuf);
StringBuf++;
}
}
void LCD12864_DispString4(uint8_t hang, uint8_t lie, const char *StringBuf, uint8_t LEN)
{
uint8_t address, i = 0;
switch(hang)
{
case 1:
address = 0x80;
break;
case 2:
address = 0x90;
break;
case 3:
address = 0x88;
break;
case 4:
address = 0x98;
break;
default:
address = 0x80;
}
LCD2864Write_char(0, address + lie);
for(i = 0; i < LEN; i++)
{
LCD2864Write_char(1, *StringBuf);
StringBuf++;
}
}
/*********************************************************************************************************
** 函數名稱: Lcd_lineclr()
** 功能描述: 清除一行的顯示
** 輸 入: unsigned char row 要清除顯示的行
** 輸 出:
** 全局變量: 無
** 調用模塊: 無
** 說明:
** 注意:
*******************************************************************************************************/
void LCD12864_lineclr(unsigned char row)
{
unsigned char i;
switch(row)
{
case 1:
{
LCD2864Write_char(0, 0x80);
for(i = 0; i < 16; i++) LCD2864Write_char(1, ' ');
break;
}
case 2:
{
LCD2864Write_char(0, 0x90);
for(i = 0; i < 16; i++) LCD2864Write_char(1, ' ');
break;
}
case 3:
{
LCD2864Write_char(0, 0x88);
for(i = 0; i < 16; i++) LCD2864Write_char(1, ' ');
break;
}
case 4:
{
LCD2864Write_char(0, 0x98);
for(i = 0; i < 16; i++) LCD2864Write_char(1, ' ');
break;
}
default:
break;
}
}
/*************************************************************************************************
** END FILE
**************************************************************************************************/
**************************************************************************************************/
#ifndef __FYD12864_H__
#define __FYD12864_H__
/*************************************************************/
#include<stc15.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
#include<intrins.h>
#define uint8_t unsigned char
#define uint16_t unsigned int
/*************************************************************************************************/
#define LCD12864_RS_PIN P20 //RS
#define LCD12864_RW_PIN P21 //RW
#define LCD12864_RD_PIN P22 //RD-EN
/*************************************************************************************************/
//PSB接GND----是串行模式
//PSB接VCC----是并行模式
#define SET_LCD12864_CS LCD12864_RS_PIN=1;
#define CLR_LCD12864_CS LCD12864_RS_PIN=0;
#define SET_LCD12864_STD LCD12864_RW_PIN=1;
#define CLR_LCD12864_STD LCD12864_RW_PIN=0;
#define SET_LCD12864_SCLK LCD12864_RD_PIN=1;
#define CLR_LCD12864_SCLK LCD12864_RD_PIN=0;
/*************************************************************************************************/
//定義7920LCD控制命令 基本命令
#define Lcd_Clear 0x01 //清除顯示
#define Lcd_Adress_Rest 0x02 //地址歸0
#define Lcd_Set_Entrance_Point 0x04 //設定光標移動方向并指定整體顯示是否移動,offset 0x04/0x05/0x06/0x07
#define Lcd_Display_Status 0x08 //顯示狀態(整體顯示,整體不顯示,光標閃爍,光標不閃爍),offset 0x08/0x0C/0x0D/0x0E/0x0F
#define Lcd_Display_Shift 0x10 //光標或顯示移位控制 offset 10H/14H/18H/1CH
#define Lcd_Set_Function_Basic 0x30 //基本指令集
#define Lcd_Set_Function_Extend 0x34 //擴展指令集
#define Lcd_Set_Cgram 0x40 //設定CGRAM 地址 offset 0x00-0x3f
#define Lcd_Set_Ddram 0x80 //設定DDRAM 地址
//定義7920LCD控制命令 擴充命令
#define Lcd_Wait_Mode 0x01 //待命模式 進入待命模式,執行其它命令都可終止待命模式
#define Lcd_Enable_Iram 0x02 //sr=0 允許設定CGRAM 地址(基本指令)
#define Lcd_Enable_Vectical_Roll 0x03 //sr=1 允許輸入卷動地址
#define Lcd_Iram_Address 0x40 //sr=1:offset 0x00~0x3
#define Lcd_Back_White 0x04 //offset 0~3 反白選擇
#define Lcd_Enter_Sleep_Mode 0x08
#define Lcd_Escape_Sleep_Mode 0x0c
#define Lcd_Dram_On 0x36
#define Lcd_Dram_Off 0x34
#define Lcd_Set_Gdram 0x80 //offset 0x00~0x7f
extern void LCD12864_Init(void); //初始化LCD12864
extern void LCD2864Write_char(unsigned char Mode, unsigned char ddata); //寫指令或數據
extern void LCD12864_Clear(void); //清屏函數
extern void LCD12864_dispClear(void); //清屏函數
extern void LCD12864_RE_0_1(void); //文字模式,指令集由0變為1
//此函數如果在文本模式,可以不要,如果同時顯示圖和顯示字就要及時更換指令集,實現具體是什么操作
extern void LCD12864_RE_1_0(void); //圖形模式,指令集由1變為0
extern void LCD12864_SetAddr(unsigned char VerticalAddr, unsigned char HorizontalAddr);
extern void LCD12864_Write_String(uint8_t hang, uint8_t lie, char *StringBuf);
extern void LCD12864_DispString2(uint8_t hang, uint8_t lie, char *StringBuf, uint8_t LEN);
extern void LCD12864_DispString3(uint8_t hang, uint8_t lie, const char *StringBuf, uint8_t LEN) ;
extern void Disp_img(const unsigned char *img); //圖形方式12864顯示,字模221--橫向取膜
extern void LCD12864_lineclr(unsigned char row);
extern void Lcd_linedisp(unsigned char *p, unsigned char row);
extern void LCDDisp_HEX(uint8_t hang, uint8_t lie, unsigned char HEX_num[], unsigned char cnt); //顯示十六進制數
#endif
/*****************************************************************/
//** END FILE
/*****************************************************************/
復制代碼
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
国产成人在线视频
|
国产精品精品视频一区二区三区
|
国产精品99久
|
午夜激情影院
|
欧美精品1区2区
|
亚洲狠狠爱
|
日韩免费在线视频
|
一区二区三区回区在观看免费视频
|
欧美视频
|
91精品国产综合久久久亚洲
|
在线观看亚洲专区
|
色精品视频
|
99久久久无码国产精品
|
成人免费看黄网站在线观看
|
成人免费淫片aa视频免费
|
国产aⅴ爽av久久久久久久
|
精品国产乱码久久久久久图片
|
www.男人天堂.com
|
成年男女免费视频网站
|
91久久精品国产91久久
|
婷婷久久五月
|
成人在线观看免费
|
成人不卡视频
|
国产精品亚洲欧美日韩一区在线
|
成人在线观看欧美
|
www.jizzjizz
|
欧美亚州综合
|
成人不卡视频
|
国产精品久久久久久婷婷天堂
|
国产亚洲精品精品国产亚洲综合
|
天天天操
|
日韩成人在线观看
|
一区二区三区在线观看视频
|
狠狠爱综合
|
天天艹逼网
|
日本网站免费观看
|
中文字幕一级毛片视频
|
成人啊啊啊
|
国产欧美精品一区
|
欧美日韩视频
|
av在线播放网站
|