文章目录

  • 概述
  • 改过的工程实现如下
  • 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如果不点背光,啥也看不见相关推荐

  1. “智能+”时代,看见别人看不见的才是赢家

    当科技.商业和社会均发生天翻地覆的变革,我们可以确定的是,"智能+"时代的浪潮已掀起波澜. 这将是智慧无处不在的时代,曾经无法解决的问题,都将在科技的发展下找到答案: 这也是技术普 ...

  2. 隐藏表白图“我喜欢你”就像你看不见但它也依然存在

    导语 浪漫至死不渝,温柔绝对屈服. -12月份到来了-没啥送的-那就送大家一些表白的代码吧- 大兄弟小姐妹们,大家好! 我是准时上线更新代码+讲故事的程序媛小姐姐! 整理了一款超火的『隐藏表白代码』希 ...

  3. 数论计算机科学与技术专业就业前景好,【数学】数学专业就业前景:你看不见的“前途似锦”...

    数学专业,在大众化的眼光看来,毕业后的就业前景无非是当老师或者搞科研,这个专业似乎太古板且就业道路狭窄.然而,这些都是偏见,数学专业毕业的研究生早已是金融界.IT界.科研界的"香饽饽&quo ...

  4. 因看不见而恐惧!企业亟需“看得见”威胁

    在以云计算.大数据.移动互联网为代表的新一代信息通信技术的快速发展的今天,新兴的网络攻击也日益复杂多变,保障业务安全实现安全可视变得十分重要.我们只有"看见"风险,才能有效地进行预 ...

  5. 科技领域看不见的手如何影响企业未来命运

    作者:刘锋 "看不见的手"像幽灵一样盘踞在人类社会的发展过程中,时隐时现,在亚当·斯密的<国富论>中,看不见的手推动了经济的发展:在达尔文的进化论中,看不见的手推动了生 ...

  6. 用户不见了_屋面瓦/外墙板再也看不见螺丝打胶了

    屋面瓦/外墙板再也看不见螺丝打胶了 生活中,我们的屋面瓦/外墙板安装,大多数都是用螺丝.钉子固定好,必要的时候,再打胶处理,用来防水.可是,市场上大多数螺丝钉子都是镀锌的,时间长了钉帽(螺丝处)都生锈 ...

  7. 看不见的Unicode码让敏感词轻松逃过审核,谷歌IBM都中招

    丰色 发自 凹非寺 量子位 报道 | 公众号 QbitAI Unicode码作为全世界文字的统一编码,使用范围广,用它去对NLP模型做对抗攻击,可谓中招一大片. 就比如下面这个谷歌翻译: 文字部分都没 ...

  8. 3D打印攻破无人车激光雷达,这个奇怪的盒子它看不见

    晓查 发自 凹非寺  量子位 报道 | 公众号 QbitAI 深度神经网络容易受到某些对抗样本的攻击,比如图像分类网络,只需在图中加入一点微小的扰动,就能让它把熊猫当成长臂猿. 如果把对抗攻击用在自动 ...

  9. 3 事务隔离:为什么你改了我还看不见?

    3 事务隔离:为什么你改了我还看不见? 在数据库中,事务是要保证一组数据库操作,要么全部成功,要么全部失败,在mysql中,事务在引擎层实现,innodb支持事务 隔离性与隔离级别 事务,ACID(a ...

最新文章

  1. Pandas常见的性能优化方法
  2. php7 定义变量,基于PHP7的PHP扩展开发之七(定义变量)
  3. 78. Spring Boot完美使用FastJson解析JSON数据【从零开始学Spring Boot】
  4. python库--pandas--Series.str--字符串处理
  5. 手机玩html5游戏很卡,手机游戏卡怎么办_手机玩游戏卡顿解决办法-系统城
  6. Java 蓝桥杯 分解质因数
  7. Visual Studio 2017在编译OpenCV 4.2.0时出现编译器错误C2001:常量中有换行符
  8. Qt Creator 第一个插件
  9. 初窥JQuery(二)-事件机制(1)
  10. hg255d php,hg255d强刷华硕rt-n13u官方固件果断中继成功
  11. 百度文库免费下载,精选六种方法!
  12. no properties discovered to create BeanSerializer 问题解决
  13. 高中关于人工智能方面的课题_AI相关专业或成热门?高中生也可以入门“人工智能”...
  14. Win10截屏的几种方法介绍
  15. 用java代码执行命令行并获取返回结果
  16. NGUI的localize的更换KEY后刷新的问题
  17. profix使用过程中遇到的一些问题
  18. 【jQuery】- form 表单 reset()方法不生效解决
  19. Deblur-NeRF CVPR 2022
  20. [FineReport帆软]决策报表frm中实现添加监控声音报警

热门文章

  1. python之pandas df.dropna()
  2. 学术讲座: 如何把科研变成兴趣 (程序猿专场)
  3. php中pcntl_fork详解
  4. 影视剪辑怎么学?磨金石教育正规吗?在这里学习怎么样?
  5. [转]爆肝一周,完成了一款第一人称3D射击游戏,现在把源代码分享给大家,适合新手跟着学习
  6. 【驱动】【算法】一种yuv格式转灰度算法
  7. 最小外接矩形(RotatedRect返回角度angle、width、height问题)
  8. python字典是无序的吗_Python 有序字典 OrderedDict 和无序字典 Dict
  9. k8s入门教程详解(一)
  10. Python、Kivy、Buildozer打包成功的apk在安卓平台安装打开后闪退(崩溃)?