专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
51单片机
一个12864屏,不知如何辨认脚位,只有9根线。
2020-02-04 09:24
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
2401
24
24
一个12864屏,不知如何辨认脚位,只有9根线。
(原文件名:未命名12864.jpg)
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
24条回答
Hamyou
2020-02-05 10:24
传一个这个屏的驱动,测试过,没问题
#ifndef __12864COG_H__
#define __12864COG_H__
#define uchar unsigned char
#define uint unsigned int
#define DISPLAY_ON 0xAF
#define DISPLAY_OFF 0xAE
#define DISPLAY_START_LINE 0x40 //0
#define DISPLAY_PAGE 0xB0
#define DISPLAY_ADC_L 0xA0 //the LSB is first
#define DISPLAY_ADC_M 0xA1
#define DISPLAY_REVERSE_OFF 0xA6
#define DISPLAY_REVERSE_ON 0xA7
#define DISPLAY_ENTIRE_ON 0xA5
#define DISPLAY_ENTIRE_OFF 0xA4
#define DISPLAY_SHL_NOM 0xC0
#define DISPLAY_SHL_REV 0xC8
#define LCD_POWER_CV 0x2C
#define LCD_POWER_RV 0x2E
#define LCD_POWER_FV 0x2F
#define LCD_REPOWER_1 0x81
#define LCD_REPOWER_2 0x31
#define LCD_RESISTOR 0x20
#define LCD_RESET 0xE2
#define DISPLAY_COLUMN_MSB 0x10 //0
#define DISPLAY_COLUMN_LSB 0x00 //0
sbit LCD_CS=P1^0;
sbit LCD_RES=P1^1;
sbit LCD_RS=P1^2;
sbit LCD_SCK=P1^3;
sbit LCD_SDA=P1^4;
#define LCD_CS_H LCD_CS=1
#define LCD_CS_L LCD_CS=0
#define LCD_RES_H LCD_RES=1
#define LCD_RES_L LCD_RES=0
#define LCD_RS_H LCD_RS=1
#define LCD_RS_L LCD_RS=0
#define LCD_SCK_H LCD_SCK=1
#define LCD_SCK_L LCD_SCK=0
#define LCD_SDA_H LCD_SDA=1
#define LCD_SDA_L LCD_SDA=0
void Write_DAT(uchar dat);
void Write_CMD(uchar com);
void Initialize_LCD(void);
void Write_word(uchar x,uchar y,uchar dat[]);
void Write_char(uchar x,uchar y,uchar dat[]);
void Displaychars(uchar x,uchar y,uchar dat[]);
void Displaywords(uchar x,uchar y,uchar dat[]);
void Clr_LCD(void);
/*******************************************************************************
*函数名:延时函数
*功能:延时
*输入:uchar n(延时长度)
*输出:无
*调用函数:无
*版本:1.0
*
*******************************************************************************/
void Delayus(uchar n)
{
for(;n>0;n--);
}
/*******************************************************************************
*函数名:写数据函数
*功能:写一个数据到液晶
*输入:uchar com(数据)
*输出:无
*调用函数:延时函数Delay()
*版本:1.0
*
*******************************************************************************/
/*******************发送数据***********************/
void Write_DAT(uchar dat)
{
uchar i;
LCD_RS_H;
LCD_CS_L;
LCD_SCK_L;
for(i=0;i<8;i++)
{
if(dat&0x80) LCD_SDA_H;
else LCD_SDA_L;
LCD_SCK_H;
//Delayus(5);
LCD_SCK_L;
dat=dat<<1;
}
LCD_CS_H;
}
/*******************************************************************************
*函数名:写指令函数
*功能:写一个指令到液晶
*输入:uchar com(命令)
*输出:无
*调用函数:延时函数Delay()
*版本:1.0
*
*******************************************************************************/
/*******************发送命令***********************/
void Write_CMD(uchar com)
{
uchar i;
LCD_RS_L;
LCD_CS_L;
LCD_SCK_L;
for(i=0;i<8;i++)
{
if(com&0x80) LCD_SDA_H;
else LCD_SDA_L;
LCD_SCK_H;
//Delayus(5);
LCD_SCK_L;
com=com<<1;
}
LCD_CS_H;
}
/*******************************************************************************
*函数名:初始化函数
*功能:启动液晶,初始化液晶
*输入:无
*输出:无
*调用函数:写数据函数Write_DAT(),写命令函数Write_CMD(),延时函数Delay()
*版本:1.0
*
*******************************************************************************/
void Initialize_LCD(void)
{
LCD_RES_L;
delayms(100);
LCD_RES_H;
Write_CMD(DISPLAY_ADC_L);
Write_CMD(DISPLAY_SHL_NOM);
Write_CMD(0xA2);
Write_CMD(LCD_POWER_CV);
delayms(100);
Write_CMD(LCD_POWER_RV);
delayms(100);
Write_CMD(LCD_POWER_FV);
Write_CMD(LCD_REPOWER_1);
Write_CMD(LCD_REPOWER_2);
Write_CMD(LCD_RESISTOR);
Write_CMD(DISPLAY_START_LINE+32);
Write_CMD(DISPLAY_SHL_REV);
Write_CMD(DISPLAY_ON);
}
void Write_oneDat(uchar x,uchar y,uchar p)
{
uchar COH,COL;
COH=DISPLAY_COLUMN_MSB + x/16;
COL=DISPLAY_COLUMN_LSB + x%16;
Write_CMD(COH);
Write_CMD(COL);
Write_CMD(DISPLAY_PAGE + y-1);
Write_DAT(p);
}
/*******************************************************************************
*函数名:写字符函数
*功能:写字符函数,写一个字符到固定的位置
*输入:uchar c 字符的列号; uchar l 字符的行号; uchar dat[] 字符数据
*输出:无
*调用函数:写数据函数Write_DAT(),写命令函数Write_CMD()
*版本:1.0
*
*******************************************************************************/
void Write_char(uchar x,uchar y,uchar *p)
{
uchar i,COH,COL;
COH=DISPLAY_COLUMN_MSB + x/16;
COL=DISPLAY_COLUMN_LSB + x%16;
Write_CMD(COH);
Write_CMD(COL);
Write_CMD(DISPLAY_PAGE + 2*(y-1));
for(i=0;i<8;i++)
{
Write_DAT(*(p+i));
}
Write_CMD(COH);
Write_CMD(COL);
Write_CMD(DISPLAY_PAGE + 2*(y-1) + 1);
for(i=0;i<8;i++)
{
Write_DAT(*(p+i+8));
}
}
void Write_word(uchar x,uchar y,uchar *p)
{
uchar i,COH,COL;
COH=DISPLAY_COLUMN_MSB + x/16;
COL=DISPLAY_COLUMN_LSB + x%16;
Write_CMD(COH);
Write_CMD(COL);
Write_CMD(DISPLAY_PAGE + 2*(y-1));
for(i=0;i<16;i++)
{
Write_DAT(*(p+i));
}
Write_CMD(COH);
Write_CMD(COL);
Write_CMD(DISPLAY_PAGE + 2*(y-1) + 1);
for(i=0;i<16;i++)
{
Write_DAT(*(p+i+16));
}
}
void Write_words(uchar x,uchar y,uchar num,uchar *p)
{
uchar i;
for(i=0;i<num;i++)
{
Write_word(x,y,p);
x+=16;
p+=32;
}
}
/*******************************************************************************
*函数名:清屏函数
*功能:将液晶清屏液晶
*输入:无
*输出:无
*调用函数:写数据函数Write_DAT(),写命令函数Write_CMD()
*版本:1.0
*
*******************************************************************************/
void Clr_LCD(void)
{
uchar i,j;
Write_CMD(DISPLAY_COLUMN_MSB);
Write_CMD(DISPLAY_COLUMN_LSB);
for(i=0;i<9;i++)
{
Write_CMD(DISPLAY_PAGE + i);
Write_CMD(DISPLAY_COLUMN_MSB);
Write_CMD(DISPLAY_COLUMN_LSB);
for(j=0;j<132;j++)
{
Write_DAT(0x00);
}
}
}
#endif
加载中...
查看其它24个回答
一周热门
更多
>
相关问题
【东软载波ESF0654 PDS开发板活动】开箱
1 个回答
东软载波ESF0654 PDS开发板外部中断
1 个回答
东软载波ESF0654 PDS开发板高级控制定时器AD16C4T
1 个回答
用串口调试助手为什么只能在hex模式接收发送而在文本模式不行
9 个回答
触摸芯片SC02B/SC04B在地砖灯的设计方案
1 个回答
相关文章
51单片机与蓝牙模块连接
0个评论
51单片机的硬件结构
0个评论
基于51单片机的无线遥控器制作
0个评论
51单片机 AD转换
0个评论
51单片机数码管递增显示
0个评论
如何实现对单片机寄存器的访问
0个评论
基于51单片机的指纹密码锁
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
51单片机
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
#ifndef __12864COG_H__
#define __12864COG_H__
#define uchar unsigned char
#define uint unsigned int
#define DISPLAY_ON 0xAF
#define DISPLAY_OFF 0xAE
#define DISPLAY_START_LINE 0x40 //0
#define DISPLAY_PAGE 0xB0
#define DISPLAY_ADC_L 0xA0 //the LSB is first
#define DISPLAY_ADC_M 0xA1
#define DISPLAY_REVERSE_OFF 0xA6
#define DISPLAY_REVERSE_ON 0xA7
#define DISPLAY_ENTIRE_ON 0xA5
#define DISPLAY_ENTIRE_OFF 0xA4
#define DISPLAY_SHL_NOM 0xC0
#define DISPLAY_SHL_REV 0xC8
#define LCD_POWER_CV 0x2C
#define LCD_POWER_RV 0x2E
#define LCD_POWER_FV 0x2F
#define LCD_REPOWER_1 0x81
#define LCD_REPOWER_2 0x31
#define LCD_RESISTOR 0x20
#define LCD_RESET 0xE2
#define DISPLAY_COLUMN_MSB 0x10 //0
#define DISPLAY_COLUMN_LSB 0x00 //0
sbit LCD_CS=P1^0;
sbit LCD_RES=P1^1;
sbit LCD_RS=P1^2;
sbit LCD_SCK=P1^3;
sbit LCD_SDA=P1^4;
#define LCD_CS_H LCD_CS=1
#define LCD_CS_L LCD_CS=0
#define LCD_RES_H LCD_RES=1
#define LCD_RES_L LCD_RES=0
#define LCD_RS_H LCD_RS=1
#define LCD_RS_L LCD_RS=0
#define LCD_SCK_H LCD_SCK=1
#define LCD_SCK_L LCD_SCK=0
#define LCD_SDA_H LCD_SDA=1
#define LCD_SDA_L LCD_SDA=0
void Write_DAT(uchar dat);
void Write_CMD(uchar com);
void Initialize_LCD(void);
void Write_word(uchar x,uchar y,uchar dat[]);
void Write_char(uchar x,uchar y,uchar dat[]);
void Displaychars(uchar x,uchar y,uchar dat[]);
void Displaywords(uchar x,uchar y,uchar dat[]);
void Clr_LCD(void);
/*******************************************************************************
*函数名:延时函数
*功能:延时
*输入:uchar n(延时长度)
*输出:无
*调用函数:无
*版本:1.0
*
*******************************************************************************/
void Delayus(uchar n)
{
for(;n>0;n--);
}
/*******************************************************************************
*函数名:写数据函数
*功能:写一个数据到液晶
*输入:uchar com(数据)
*输出:无
*调用函数:延时函数Delay()
*版本:1.0
*
*******************************************************************************/
/*******************发送数据***********************/
void Write_DAT(uchar dat)
{
uchar i;
LCD_RS_H;
LCD_CS_L;
LCD_SCK_L;
for(i=0;i<8;i++)
{
if(dat&0x80) LCD_SDA_H;
else LCD_SDA_L;
LCD_SCK_H;
//Delayus(5);
LCD_SCK_L;
dat=dat<<1;
}
LCD_CS_H;
}
/*******************************************************************************
*函数名:写指令函数
*功能:写一个指令到液晶
*输入:uchar com(命令)
*输出:无
*调用函数:延时函数Delay()
*版本:1.0
*
*******************************************************************************/
/*******************发送命令***********************/
void Write_CMD(uchar com)
{
uchar i;
LCD_RS_L;
LCD_CS_L;
LCD_SCK_L;
for(i=0;i<8;i++)
{
if(com&0x80) LCD_SDA_H;
else LCD_SDA_L;
LCD_SCK_H;
//Delayus(5);
LCD_SCK_L;
com=com<<1;
}
LCD_CS_H;
}
/*******************************************************************************
*函数名:初始化函数
*功能:启动液晶,初始化液晶
*输入:无
*输出:无
*调用函数:写数据函数Write_DAT(),写命令函数Write_CMD(),延时函数Delay()
*版本:1.0
*
*******************************************************************************/
void Initialize_LCD(void)
{
LCD_RES_L;
delayms(100);
LCD_RES_H;
Write_CMD(DISPLAY_ADC_L);
Write_CMD(DISPLAY_SHL_NOM);
Write_CMD(0xA2);
Write_CMD(LCD_POWER_CV);
delayms(100);
Write_CMD(LCD_POWER_RV);
delayms(100);
Write_CMD(LCD_POWER_FV);
Write_CMD(LCD_REPOWER_1);
Write_CMD(LCD_REPOWER_2);
Write_CMD(LCD_RESISTOR);
Write_CMD(DISPLAY_START_LINE+32);
Write_CMD(DISPLAY_SHL_REV);
Write_CMD(DISPLAY_ON);
}
void Write_oneDat(uchar x,uchar y,uchar p)
{
uchar COH,COL;
COH=DISPLAY_COLUMN_MSB + x/16;
COL=DISPLAY_COLUMN_LSB + x%16;
Write_CMD(COH);
Write_CMD(COL);
Write_CMD(DISPLAY_PAGE + y-1);
Write_DAT(p);
}
/*******************************************************************************
*函数名:写字符函数
*功能:写字符函数,写一个字符到固定的位置
*输入:uchar c 字符的列号; uchar l 字符的行号; uchar dat[] 字符数据
*输出:无
*调用函数:写数据函数Write_DAT(),写命令函数Write_CMD()
*版本:1.0
*
*******************************************************************************/
void Write_char(uchar x,uchar y,uchar *p)
{
uchar i,COH,COL;
COH=DISPLAY_COLUMN_MSB + x/16;
COL=DISPLAY_COLUMN_LSB + x%16;
Write_CMD(COH);
Write_CMD(COL);
Write_CMD(DISPLAY_PAGE + 2*(y-1));
for(i=0;i<8;i++)
{
Write_DAT(*(p+i));
}
Write_CMD(COH);
Write_CMD(COL);
Write_CMD(DISPLAY_PAGE + 2*(y-1) + 1);
for(i=0;i<8;i++)
{
Write_DAT(*(p+i+8));
}
}
void Write_word(uchar x,uchar y,uchar *p)
{
uchar i,COH,COL;
COH=DISPLAY_COLUMN_MSB + x/16;
COL=DISPLAY_COLUMN_LSB + x%16;
Write_CMD(COH);
Write_CMD(COL);
Write_CMD(DISPLAY_PAGE + 2*(y-1));
for(i=0;i<16;i++)
{
Write_DAT(*(p+i));
}
Write_CMD(COH);
Write_CMD(COL);
Write_CMD(DISPLAY_PAGE + 2*(y-1) + 1);
for(i=0;i<16;i++)
{
Write_DAT(*(p+i+16));
}
}
void Write_words(uchar x,uchar y,uchar num,uchar *p)
{
uchar i;
for(i=0;i<num;i++)
{
Write_word(x,y,p);
x+=16;
p+=32;
}
}
/*******************************************************************************
*函数名:清屏函数
*功能:将液晶清屏液晶
*输入:无
*输出:无
*调用函数:写数据函数Write_DAT(),写命令函数Write_CMD()
*版本:1.0
*
*******************************************************************************/
void Clr_LCD(void)
{
uchar i,j;
Write_CMD(DISPLAY_COLUMN_MSB);
Write_CMD(DISPLAY_COLUMN_LSB);
for(i=0;i<9;i++)
{
Write_CMD(DISPLAY_PAGE + i);
Write_CMD(DISPLAY_COLUMN_MSB);
Write_CMD(DISPLAY_COLUMN_LSB);
for(j=0;j<132;j++)
{
Write_DAT(0x00);
}
}
}
#endif
一周热门 更多>