1602A如果不点背光,啥也看不见
文章目录
- 概述
- 改过的工程实现如下
- END
概述
买的1602A到货了, 用STC15实验箱4的官方自带的demo工程试了一下, 居然没反应.
看了一下, 好像点亮背光这里有点怪, 只给了1602的15脚A一个高, 但是却没操作1602的16脚K.
尝试给1602的16脚低电平, 搞定.
就是说, 官方demo没问题, 可能是原版的官方板子用的1602模块的K和GND已经在模块内部连上了. 所以不需要操作K脚.
而我买的1602A是有K脚的, 所以要显势操作K脚.
官方1602引脚插座图:
可以看到16脚是不使用的.
在网上查到的1602A的引脚定义图:
可以看到是有背光负极的.
那现在买不到, 也弄不清官方板子用的1602的具体型号. 只能改一下官方工程了.
就加一句, 将1602的16脚K赋值为低电平.
改过的工程实现如下
/*---------------------------------------------------------------------*/
/* --- STC MCU International Limited ----------------------------------*/
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
/* --- Mobile: (86)13922805190 ----------------------------------------*/
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
/* --- Web: www.GXWMCU.com --------------------------------------------*/
/* --- QQ: 800003751 -------------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了宏晶科技的资料及程序 */
/*---------------------------------------------------------------------*//************* 本程序功能说明 **************驱动LCD1602字符屏.显示效果为: LCD显示时间.第一行显示 ---Clock demo---
第二行显示 12-00-00******************************************/#define MAIN_Fosc 22118400L //定义主时钟#include "STC15Fxxxx.H"/************* IO口定义 **************/
sbit P_HC595_SER = P4^0; //pin 14 SER data input
sbit P_HC595_RCLK = P5^4; //pin 12 RCLk store (latch) clock
sbit P_HC595_SRCLK = P4^3; //pin 11 SRCLK Shift data clock/************* 本地变量声明 **************/u8 hour,minute,second;void DisplayRTC(void);
void RTC(void);
void delay_ms(u8 ms);
void DisableHC595(void);
void Initialize_LCD(void);
void Write_AC(u8 hang,u8 lie);
void Write_DIS_Data(u8 DIS_Data);
void ClearLine(u8 row);
u8 BIN_ASCII(u8 tmp);
void PutString(u8 row, u8 column, u8 *puts);
void WriteChar(u8 row, u8 column, u8 dat);//========================================================================
// 函数: void main(void)
// 描述: 主函数。
// 参数: none.
// 返回: none.
// 版本: VER1.0
// 日期: 2013-4-1
// 备注:
//========================================================================
void main(void)
{P0M1 = 0; P0M0 = 0; //设置为准双向口P1M1 = 0; P1M0 = 0; //设置为准双向口P2M1 = 0; P2M0 = 0; //设置为准双向口P3M1 = 0; P3M0 = 0; //设置为准双向口P4M1 = 0; P4M0 = 0; //设置为准双向口P5M1 = 0; P5M0 = 0; //设置为准双向口P6M1 = 0; P6M0 = 0; //设置为准双向口P7M1 = 0; P7M0 = 0; //设置为准双向口Initialize_LCD();ClearLine(0);ClearLine(1);P2M1 &= ~(1<<4); //P2.4设置为推挽输出P2M0 |= (1<<4);P24 = 1; //背光P22 = 0; // add by lostspeed : 1602A的15脚是LED+, 16脚是LED-. 要使LED+为+, 也要使LED-为GND// 程序逻辑是对的, 如果背光不打开, 看不到内容// 我使用的是1602A, 估计STC官方原始板子用的1602的K脚从模块内部已经接地了.DisableHC595(); //禁止掉学习板上的HC595显示,省电PutString(0,0,"---Clock demo---");hour = 12; //初始化时间值minute = 0;second = 0;DisplayRTC();while(1){delay_ms(250); //延时1秒delay_ms(250);delay_ms(250);delay_ms(250);RTC();DisplayRTC();}
}
/**********************************************///========================================================================
// 函数: void delay_ms(u8 ms)
// 描述: 延时函数。
// 参数: ms,要延时的ms数, 这里只支持1~255ms. 自动适应主时钟.
// 返回: none.
// 版本: VER1.0
// 日期: 2013-4-1
// 备注:
//========================================================================
void delay_ms(u8 ms)
{unsigned int i;do{i = MAIN_Fosc / 13000;while(--i) ; //14T per loop}while(--ms);
}//========================================================================
// 函数: void DisableHC595(void)
// 描述: 禁止HC595数码管显示函数。
// 参数: none.
// 返回: none.
// 版本: VER1.0
// 日期: 2013-4-1
// 备注:
//========================================================================
void DisableHC595(void)
{ u8 i;P_HC595_SER = 1;for(i=0; i<20; i++){P_HC595_SRCLK = 1;P_HC595_SRCLK = 0;}P_HC595_RCLK = 1;P_HC595_RCLK = 0; //锁存输出数据P_HC595_RCLK = 1;P_HC595_RCLK = 0; //锁存输出数据
}//========================================================================
// 函数: void DisplayRTC(void)
// 描述: 显示时钟函数
// 参数: none.
// 返回: none.
// 版本: VER1.0
// 日期: 2013-4-1
// 备注:
//========================================================================
void DisplayRTC(void)
{if(hour >= 10) WriteChar(1,4,hour / 10 + '0');else WriteChar(1,4,' ');WriteChar(1,5,hour % 10 +'0');WriteChar(1,6,'-');WriteChar(1,7,minute / 10+'0');WriteChar(1,8,minute % 10+'0');WriteChar(1,9,'-');WriteChar(1,10,second / 10 +'0');WriteChar(1,11,second % 10 +'0');
}//========================================================================
// 函数: void RTC(void)
// 描述: RTC演示函数
// 参数: none.
// 返回: none.
// 版本: VER1.0
// 日期: 2013-4-1
// 备注:
//========================================================================
void RTC(void)
{if(++second >= 60){second = 0;if(++minute >= 60){minute = 0;if(++hour >= 24) hour = 0;}}
}/************* LCD1602相关程序 *****************************************************/
//8位数据访问方式 LCD1602 标准程序 梁工编写 2014-2-21#define LineLength 16 //16x2/************* Pin define *****************************************************/sfr LCD_BUS = 0x80; //P0--0x80, P1--0x90, P2--0xA0, P3--0xB0sbit LCD_B7 = LCD_BUS^7; //D7 -- Pin 14 LED- -- Pin 16
sbit LCD_B6 = LCD_BUS^6; //D6 -- Pin 13 LED+ -- Pin 15
sbit LCD_B5 = LCD_BUS^5; //D5 -- Pin 12 Vo -- Pin 3
sbit LCD_B4 = LCD_BUS^4; //D4 -- Pin 11 VDD -- Pin 2
sbit LCD_B3 = LCD_BUS^3; //D3 -- Pin 10 VSS -- Pin 1
sbit LCD_B2 = LCD_BUS^2; //D2 -- Pin 9
sbit LCD_B1 = LCD_BUS^1; //D1 -- Pin 8
sbit LCD_B0 = LCD_BUS^0; //D0 -- Pin 7sbit LCD_ENA = P2^7; //Pin 6
sbit LCD_RW = P2^6; //Pin 5 //LCD_RS R/W DB7--DB0 FOUNCTION
sbit LCD_RS = P2^5; //Pin 4 // 0 0 INPUT write the command to LCD model// 0 1 OUTPUT read BF and AC pointer from LCD model// 1 0 INPUT write the data to LCD model// 1 1 OUTPUT read the data from LCD model
/*
total 2 lines, 16x2= 32
first line address: 0~15
second line address: 64~79*/#define C_CLEAR 0x01 //clear LCD
#define C_HOME 0x02 //cursor go home
#define C_CUR_L 0x04 //cursor shift left after input
#define C_RIGHT 0x05 //picture shift right after input
#define C_CUR_R 0x06 //cursor shift right after input
#define C_LEFT 0x07 //picture shift left after input
#define C_OFF 0x08 //turn off LCD
#define C_ON 0x0C //turn on LCD
#define C_FLASH 0x0D //turn on LCD, flash
#define C_CURSOR 0x0E //turn on LCD and cursor
#define C_FLASH_ALL 0x0F //turn on LCD and cursor, flash
#define C_CURSOR_LEFT 0x10 //single cursor shift left
#define C_CURSOR_RIGHT 0x10 //single cursor shift right
#define C_PICTURE_LEFT 0x10 //single picture shift left
#define C_PICTURE_RIGHT 0x10 //single picture shift right
#define C_BIT8 0x30 //set the data is 8 bits
#define C_BIT4 0x20 //set the data is 4 bits
#define C_L1DOT7 0x30 //8 bits,one line 5*7 dots
#define C_L1DOT10 0x34 //8 bits,one line 5*10 dots
#define C_L2DOT7 0x38 //8 bits,tow lines 5*7 dots
#define C_4bitL2DOT7 0x28 //4 bits,tow lines 5*7 dots
#define C_CGADDRESS0 0x40 //CGRAM address0 (addr=40H+x)
#define C_DDADDRESS0 0x80 //DDRAM address0 (addr=80H+x)#define LCD_DelayNop() NOP(15)#define LCD_BusData(dat) LCD_BUS = dat//========================================================================
// 函数: void CheckBusy(void)
// 描述: 检测忙函数
// 参数: none.
// 返回: none.
// 版本: VER1.0
// 日期: 2013-4-1
// 备注:
//========================================================================
void CheckBusy(void)
{u16 i;for(i=0; i<5000; i++) {if(!LCD_B7) break;} //check the LCD busy or not. With time out
// while(LCD_B7); //check the LCD busy or not. Without time out
}//========================================================================
// 函数: void IniSendCMD(u8 cmd)
// 描述: 初始化写命令(不检测忙)
// 参数: cmd: 要写的命令.
// 返回: none.
// 版本: VER1.0
// 日期: 2013-4-1
// 备注:
//========================================================================
void IniSendCMD(u8 cmd)
{LCD_RW = 0;LCD_BusData(cmd);LCD_DelayNop();LCD_ENA = 1;LCD_DelayNop();LCD_ENA = 0;LCD_BusData(0xff);
}//========================================================================
// 函数: void Write_CMD(u8 cmd)
// 描述: 写命令(检测忙)
// 参数: cmd: 要写的命令.
// 返回: none.
// 版本: VER1.0
// 日期: 2013-4-1
// 备注:
//========================================================================
void Write_CMD(u8 cmd)
{LCD_RS = 0;LCD_RW = 1;LCD_BusData(0xff);LCD_DelayNop();LCD_ENA = 1;CheckBusy(); //check the LCD busy or not.LCD_ENA = 0;LCD_RW = 0;LCD_BusData(cmd);LCD_DelayNop();LCD_ENA = 1;LCD_DelayNop();LCD_ENA = 0;LCD_BusData(0xff);
}//========================================================================
// 函数: void Write_DIS_Data(u8 dat)
// 描述: 写显示数据(检测忙)
// 参数: dat: 要写的数据.
// 返回: none.
// 版本: VER1.0
// 日期: 2013-4-1
// 备注:
//========================================================================
void Write_DIS_Data(u8 dat)
{LCD_RS = 0;LCD_RW = 1;LCD_BusData(0xff);LCD_DelayNop();LCD_ENA = 1;CheckBusy(); //check the LCD busy or not.LCD_ENA = 0;LCD_RW = 0;LCD_RS = 1;LCD_BusData(dat);LCD_DelayNop();LCD_ENA = 1;LCD_DelayNop();LCD_ENA = 0;LCD_BusData(0xff);
}//========================================================================
// 函数: void Initialize_LCD(void)
// 描述: 初始化函数
// 参数: none.
// 返回: none.
// 版本: VER1.0
// 日期: 2013-4-1
// 备注:
//========================================================================
void Initialize_LCD(void)
{LCD_ENA = 0;LCD_RS = 0;LCD_RW = 0;delay_ms(100);IniSendCMD(C_BIT8); //set the data is 8 bitsdelay_ms(10);Write_CMD(C_L2DOT7); //tow lines 5*7 dotsdelay_ms(6);Write_CMD(C_CLEAR); //clear LCD RAMWrite_CMD(C_CUR_R); //Curror Shift RightWrite_CMD(C_ON); //turn on LCD
}//========================================================================
// 函数: void ClearLine(u8 row)
// 描述: 清除1行
// 参数: row: 行(0或1)
// 返回: none.
// 版本: VER1.0
// 日期: 2013-4-1
// 备注:
//========================================================================
void ClearLine(u8 row)
{u8 i;Write_CMD(((row & 1) << 6) | 0x80);for(i=0; i<LineLength; i++) Write_DIS_Data(' ');
}//========================================================================
// 函数: void WriteChar(u8 row, u8 column, u8 dat)
// 描述: 指定行、列和字符, 写一个字符
// 参数: row: 行(0或1), column: 第几个字符(0~15), dat: 要写的字符.
// 返回: none.
// 版本: VER1.0
// 日期: 2013-4-1
// 备注:
//========================================================================
void WriteChar(u8 row, u8 column, u8 dat)
{Write_CMD((((row & 1) << 6) + column) | 0x80);Write_DIS_Data(dat);
}//========================================================================
// 函数: void PutString(u8 row, u8 column, u8 *puts)
// 描述: 写一个字符串,指定行、列和字符串首地址
// 参数: row: 行(0或1), column: 第几个字符(0~15), puts: 要写的字符串指针.
// 返回: none.
// 版本: VER1.0
// 日期: 2013-4-1
// 备注:
//========================================================================
void PutString(u8 row, u8 column, u8 *puts)
{Write_CMD((((row & 1) << 6) + column) | 0x80);for ( ; *puts != 0; puts++) //遇到停止符0结束{Write_DIS_Data(*puts);if(++column >= LineLength) break;}
}//******************** LCD20 Module END ***************************
END
1602A如果不点背光,啥也看不见相关推荐
- “智能+”时代,看见别人看不见的才是赢家
当科技.商业和社会均发生天翻地覆的变革,我们可以确定的是,"智能+"时代的浪潮已掀起波澜. 这将是智慧无处不在的时代,曾经无法解决的问题,都将在科技的发展下找到答案: 这也是技术普 ...
- 隐藏表白图“我喜欢你”就像你看不见但它也依然存在
导语 浪漫至死不渝,温柔绝对屈服. -12月份到来了-没啥送的-那就送大家一些表白的代码吧- 大兄弟小姐妹们,大家好! 我是准时上线更新代码+讲故事的程序媛小姐姐! 整理了一款超火的『隐藏表白代码』希 ...
- 数论计算机科学与技术专业就业前景好,【数学】数学专业就业前景:你看不见的“前途似锦”...
数学专业,在大众化的眼光看来,毕业后的就业前景无非是当老师或者搞科研,这个专业似乎太古板且就业道路狭窄.然而,这些都是偏见,数学专业毕业的研究生早已是金融界.IT界.科研界的"香饽饽&quo ...
- 因看不见而恐惧!企业亟需“看得见”威胁
在以云计算.大数据.移动互联网为代表的新一代信息通信技术的快速发展的今天,新兴的网络攻击也日益复杂多变,保障业务安全实现安全可视变得十分重要.我们只有"看见"风险,才能有效地进行预 ...
- 科技领域看不见的手如何影响企业未来命运
作者:刘锋 "看不见的手"像幽灵一样盘踞在人类社会的发展过程中,时隐时现,在亚当·斯密的<国富论>中,看不见的手推动了经济的发展:在达尔文的进化论中,看不见的手推动了生 ...
- 用户不见了_屋面瓦/外墙板再也看不见螺丝打胶了
屋面瓦/外墙板再也看不见螺丝打胶了 生活中,我们的屋面瓦/外墙板安装,大多数都是用螺丝.钉子固定好,必要的时候,再打胶处理,用来防水.可是,市场上大多数螺丝钉子都是镀锌的,时间长了钉帽(螺丝处)都生锈 ...
- 看不见的Unicode码让敏感词轻松逃过审核,谷歌IBM都中招
丰色 发自 凹非寺 量子位 报道 | 公众号 QbitAI Unicode码作为全世界文字的统一编码,使用范围广,用它去对NLP模型做对抗攻击,可谓中招一大片. 就比如下面这个谷歌翻译: 文字部分都没 ...
- 3D打印攻破无人车激光雷达,这个奇怪的盒子它看不见
晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI 深度神经网络容易受到某些对抗样本的攻击,比如图像分类网络,只需在图中加入一点微小的扰动,就能让它把熊猫当成长臂猿. 如果把对抗攻击用在自动 ...
- 3 事务隔离:为什么你改了我还看不见?
3 事务隔离:为什么你改了我还看不见? 在数据库中,事务是要保证一组数据库操作,要么全部成功,要么全部失败,在mysql中,事务在引擎层实现,innodb支持事务 隔离性与隔离级别 事务,ACID(a ...
最新文章
- Pandas常见的性能优化方法
- php7 定义变量,基于PHP7的PHP扩展开发之七(定义变量)
- 78. Spring Boot完美使用FastJson解析JSON数据【从零开始学Spring Boot】
- python库--pandas--Series.str--字符串处理
- 手机玩html5游戏很卡,手机游戏卡怎么办_手机玩游戏卡顿解决办法-系统城
- Java 蓝桥杯 分解质因数
- Visual Studio 2017在编译OpenCV 4.2.0时出现编译器错误C2001:常量中有换行符
- Qt Creator 第一个插件
- 初窥JQuery(二)-事件机制(1)
- hg255d php,hg255d强刷华硕rt-n13u官方固件果断中继成功
- 百度文库免费下载,精选六种方法!
- no properties discovered to create BeanSerializer 问题解决
- 高中关于人工智能方面的课题_AI相关专业或成热门?高中生也可以入门“人工智能”...
- Win10截屏的几种方法介绍
- 用java代码执行命令行并获取返回结果
- NGUI的localize的更换KEY后刷新的问题
- profix使用过程中遇到的一些问题
- 【jQuery】- form 表单 reset()方法不生效解决
- Deblur-NeRF CVPR 2022
- [FineReport帆软]决策报表frm中实现添加监控声音报警
热门文章
- python之pandas df.dropna()
- 学术讲座: 如何把科研变成兴趣 (程序猿专场)
- php中pcntl_fork详解
- 影视剪辑怎么学?磨金石教育正规吗?在这里学习怎么样?
- [转]爆肝一周,完成了一款第一人称3D射击游戏,现在把源代码分享给大家,适合新手跟着学习
- 【驱动】【算法】一种yuv格式转灰度算法
- 最小外接矩形(RotatedRect返回角度angle、width、height问题)
- python字典是无序的吗_Python 有序字典 OrderedDict 和无序字典 Dict
- k8s入门教程详解(一)
- Python、Kivy、Buildozer打包成功的apk在安卓平台安装打开后闪退(崩溃)?