[51单片机] 在21IC如何粘贴代码

[复制链接]
 楼主| 刺客_阿瑞 发表于 2017-1-6 00:15 | 显示全部楼层 |阅读模式
为什么在21IC无法粘贴代码,还是我没有找对方法 ?


我用了“添加代码文字”,插入后发表,却显示您无法发表URL

  1. #include <string.h>
  2. #include "common.h"
  3. #include "LCD1602.h"
  4. void main(void)
  5. {
  6.         UB8 i ;
  7.         UB8 author[] = "Author:YangRui" ;
  8.         Lcd1602Init();
  9.         for(i=0 ; i<sizeof(author)-1 ; i++)
  10.         {
  11.         Lcd1602AddressWriteByte(LCD1602_ROW0,i,author[i]);
  12.         }
  13.         Lcd1602AddressWriteString(LCD1602_ROW1,0,"QQ:279729201") ;
  14.         while(1);
  15. }


长的帅怪我落 发表于 2017-1-6 08:56 | 显示全部楼层
多水贴,等级上去了就有权限发了
xyz549040622 发表于 2017-1-6 09:45 | 显示全部楼层
权限不够,无法添加外链的,防止广告的做法
KNK550489325 发表于 2017-1-6 09:54 | 显示全部楼层
级别不够。。。 我也想发链接。。。
 楼主| 刺客_阿瑞 发表于 2017-1-6 10:33 | 显示全部楼层
长的帅怪我落 发表于 2017-1-6 08:56
多水贴,等级上去了就有权限发了

但是我的代码里面没有网址链接啊,这是什么情况?
 楼主| 刺客_阿瑞 发表于 2017-1-6 10:37 | 显示全部楼层
xyz549040622 发表于 2017-1-6 09:45
权限不够,无法添加外链的,防止广告的做法

您好,首先谢谢回复,但是我的代码里面没有网址链接啊,这为什么还是不行呢 ?  举一个例子,本帖子的代码,我第一次粘贴的时候提示我无法发表URL链接,第二次我又发了一个帖子(也就是这个帖子),发现又可以粘贴了,同样的操作,我进行了第三次还是失败了,那么如果我想100%成功,该如何呢 ?
 楼主| 刺客_阿瑞 发表于 2017-1-6 10:46 | 显示全部楼层
KNK550489325 发表于 2017-1-6 09:54
级别不够。。。 我也想发链接。。。

是的,我的级别比较低,但是我的代码里面没有URL链接啊 ?   怎么解释呢 ?
KNK550489325 发表于 2017-1-6 11:42 | 显示全部楼层
刺客_阿瑞 发表于 2017-1-6 10:46
是的,我的级别比较低,但是我的代码里面没有URL链接啊 ?   怎么解释呢 ?
...

你把你要发的内容在编辑框输入不要发出来截个图看看
 楼主| 刺客_阿瑞 发表于 2017-1-6 13:10 | 显示全部楼层
KNK550489325 发表于 2017-1-6 11:42
你把你要发的内容在编辑框输入不要发出来截个图看看

我试过了,编辑框内输入也不行啊。可以百度搜索:单片机 1602 刺客阿瑞  CSDN  ,第一个就是我的,我粘贴的就是这篇博客的代码。
KNK550489325 发表于 2017-1-6 13:19 | 显示全部楼层
刺客_阿瑞 发表于 2017-1-6 13:10
我试过了,编辑框内输入也不行啊。可以百度搜索:单片机 1602 刺客阿瑞  CSDN  ,第一个就是我的,我粘贴 ...

你把代码上面的选项栏删了试试
xyz549040622 发表于 2017-1-6 15:37 | 显示全部楼层
  1. #ifndef __LCD1602_H__
  2. #define __LCD1602_H__

  3. #include "common.h"

  4. sbit lcd1602_rs_bit = P2^6;/*【根据实际需要修改】*/
  5. sbit lcd1602_rw_bit = P2^5;/*【根据实际需要修改】*/
  6. sbit lcd1602_en_bit = P2^7;/*【根据实际需要修改】*/


  7. #define LCD1602_DATA_PORT        P0/*【根据实际需要修改】*/
  8. /*default type:  
  9. px^0---DB0(LSB)  
  10. px^1---DB1  
  11. px^2---DB2            
  12. px^3---DB3  
  13. px^4---DB4  
  14. px^5---DB5  
  15. px^6---DB6  
  16. px^7---DB7(MSB)  
  17. */

  18. /*  
  19.     RS          Rw  
  20.     0           0   ---->写命令
  21.     0           1   ---->读状态
  22.     1           0   ---->写数据
  23.     1           1   ---->读数据
  24.          
  25. */

  26. /*LCD1602 RW 引脚选择*/
  27. #define LCD1602_READ_OPERATION                1/*读操作*/
  28. #define LCD1602_WRITE_OPERATION                0/*写操作*/

  29. /*LCD1602 RS 引脚选择*/
  30. #define LCD1602_DATA_OPERATION                1/*数据模式*/
  31. #define LCD1602_COMMAND_OPERATION        0/*命令模式*/

  32. /*LCD1602 EN 引脚选择*/
  33. #define LCD1602_ENABLE                                1/*允许操作LCD1602*/
  34. #define LCD1602_DISABLE                                0/*禁止操作LCD1602*/


  35. /*显示模式:16X2个字符, 5X7点阵,8位数据口*/
  36. #define LCD1602_DEFAULT_DISPALY_MODE        0x38

  37. /*
  38. ====================================================
  39. LCD1602设置:显示允许或禁止、光标显示或禁止、光标闪烁或禁止  
  40. ====================================================
  41. /*  
  42. 0   0   0   0   1   D   C   B     
  43.                     |   |   |------光标闪烁  : 1-->允许 ; 0-->禁止  
  44.                     |   |----------光标显示         : 1-->允许 ; 0-->禁止  
  45.                     |-------------液晶屏显示 : 1-->允许 ; 0-->禁止   
  46.       
  47. */
  48. #define LCD1602_DISPLAY_ENABLE                        0X04                                 /*允许液晶显示*/
  49. #define LCD1602_CURSOR_DISPLAY_ENABLE        0X02                                 /*允许光标显示*/
  50. #define LCD1602_CURSOR_BLINK_ENABLE         0X01                                 /*允许光标闪烁*/

  51. #define LCD1602_DISPLAY_DISABLE                        (0X04 & (~(0x01<<2)))/*禁止液晶显示*/
  52. #define LCD1602_CURSOR_DISPLAY_DISABLE        (0X02 & (~(0x01<<1)))/*禁止光标显示*/
  53. #define LCD1602_CURSOR_BLINK_DISABLE         (0X01 & (~(0x01<<0)))/*禁止光标闪烁*/

  54. /*默认设置:lcd显示,光标显示,光标闪烁*/                                         /*【根据实际需要修改】*/
  55. #define LCD1602_DEFAULT_DISPLAY_AND_CURSOR_MODE 0x08                                  | \
  56.                                                                                 LCD1602_DISPLAY_ENABLE                 | \
  57.                                                                                 LCD1602_CURSOR_DISPLAY_ENABLE| \
  58.                                                                                 LCD1602_CURSOR_BLINK_ENABLE

  59. /*
  60. ====================================================
  61. LCD1602设置:指针加一或减一、光标位置加一或减一
  62. ====================================================
  63. 0   0   0   0   0   1   N   S  
  64.                         |   |-----  屏幕移动:1-->允许 ; 0-->禁止
  65.                         |---------  N=1:读或者写一个字符后地址指针加1,且光标加1  
  66.                                     N=0:度或者写一个字符后地址指针减1,且光标减1  


  67.                         当S=1时 :  
  68.                             若N=1,整屏幕左移  
  69.                               N=0,整屏幕右移   

  70.                             以达到光标不移动,而整个屏幕移动的效果  
  71. */                   
  72.                                                                        
  73. #define LCD1602_POINT_AND_CURSOR_PLUS                0X02                                 /*指针加一、光标加一*/
  74. #define LCD1602_SCREEN_MOVE_ENABLE                        0x01                                 /*允许屏幕移动*/

  75. #define LCD1602_POINT_AND_CURSOR_MINUS                (0X02 & (~(0X01<<1)))/*指针减一、光标减一*/
  76. #define LCD1602_SCREEN_MOVE_DISABLE                        (0x01 & (~(0X01<<0)))/*禁止屏幕移动*/

  77. /*默认设置:光标和指针加一,屏幕不移动*/                                                     /*【根据实际需要修改】*/
  78. #define LCD1602_DEFAULT_POINT_AND_POINT_ADDRESS_MODE 0X04                                 | \
  79.                                                                                         LCD1602_POINT_AND_CURSOR_PLUS| \
  80.                                                                                         LCD1602_SCREEN_MOVE_DISABLE

  81. /*行位置参数,注意行地址从0开始*/                                                                                       
  82. #define LCD1602_ROW0        0                                                                                /*第0行*/               
  83. #define LCD1602_ROW1        1                                                                                /*第1行*/               
  84. #define LCD1602_MIN_ROW        LCD1602_ROW0                                                        /*行数的最小值,为LCD1602_ROW0,即0*/
  85. #define LCD1602_MAX_ROW        LCD1602_ROW1                                                        /*行数的最大值,为LCD1602_ROW1,即1*/

  86. /*列位置参数,注意列地址从0开始*/
  87. #define LCD1602_ROW_LENGHT        0x28                                                                 /*每一行的长度为0x28,即40*/
  88. #define LCD1602_MIN_COLUMN        0                                                                        /*列数的最小值,为0*/
  89. #define LCD1602_MAX_COLUMN        (LCD1602_ROW_LENGHT-1)                                /*列数的最大值,为39*/

  90. /*每一行的起始地址*/
  91. #define LCD1602_ROW0_ADDRESS_START        0X80                                                /*第0行起始地址*/
  92. #define LCD1602_ROW1_ADDRESS_START        (0X80+0X40)                                        /*第1行起始地址*/

  93. /*每一行的结束地址*/
  94. #define LCD1602_ROW0_ADDRESS_END (LCD1602_ROW0_ADDRESS_START+LCD1602_ROW_LENGHT)/*第0行结束地址*/
  95. #define LCD1602_ROW1_ADDRESS_END (LCD1602_ROW1_ADDRESS_START+LCD1602_ROW_LENGHT)/*第1行结束地址*/


  96. /*命令集指令*/
  97. #define LCD1602_CLEAN_ALL_DISPALY                        0x01                                /*清屏指令*/
  98. #define LCD1602_CURSOR_RETURN_TO_ORIGIN                0x02                                /*光标归位指令*/

  99. /*错误返回值*/
  100. #define LCD1602_ROW_OR_COLUMN_OVERFLOW                 -1



  101. /*****************外部接口函数******************/
  102. //写命令
  103. extern void Lcd1602WriteCommand(UB8 commandCode);

  104. //写数据
  105. extern void Lcd1602WriteData(UB8 dataCode);

  106. //清屏
  107. extern void Lcd1602CleanAll(void) ;

  108. //光标归位
  109. extern void Lcd1602CursorHoming(void);

  110. //LCD1602初始化
  111. extern void Lcd1602Init(void) ;

  112. //LCD1602地址写字节
  113. extern SB8 Lcd1602AddressWriteByte(UB8 row,UB8 column,UB8 dataCode);

  114. //LCD1602地址写字符串
  115. extern SB8 Lcd1602AddressWriteString(UB8 row,UB8 column,UB8 *stringCode);

  116. /**********************************************/


  117. #endif        /*__LCD1602_H__*/

xyz549040622 发表于 2017-1-6 15:38 | 显示全部楼层

  1. /***************************************************************************
  2. 模    块:LCD1602.c  

  3. 说    明:LCD1602驱动程序

  4. 版    本:Version2.0.0                2016/01/06 12:08(OK)

  5. 编译环境:Keil 8051 C complier V9.01

  6. 主控芯片:STC12C5A60S2                  @11.0592MHZ

  7. 作    者:杨瑞

  8. 联系方式:【QQ】279729201

  9.                  【Email】279729201[url=home.php?mod=space&uid=752448]@qq.com[/url]            
  10.                           yangrui90s@163.com
  11.                  

  12. 修改记录:
  13. =================
  14.         2017/01/6 12:08
  15.         记录:
  16.                 1.增加中文注释。
  17.                 2.修改函数名称模式,首写字母改为大写,例如lcd1602ReadStatus修改为Lcd1602ReadStatus。
  18.                 3.修改延时函数,将Delay1msForLcd1602函数修改为Delay80usForLcd1602函数。注意,这两个函数都是
  19.                   由STC-ISP生成,Delay80usForLcd1602函数由STC-ISP V6.85Q的“软件延时计算器”针对STC-Y3指令集
  20.                   @11.0592MHZ自动生成。经过测试,延时59us可能会出现只书写部分内容的情况,延时60us正好可以。
  21.                   为了安全,也可以将此延时修改的更长。
  22. =================

  23. =================
  24.         2014/04/31 20:09
  25.         记录:
  26.                 1.解决大工程中,因未安装LCD1602而导致的工程卡死在函数
  27.                 lcd1602CheckBusy()的问题,将
  28.                 do{
  29.                                 ;
  30.                 }while( (lcd1602ReadStatus()) & 0x80));
  31.                 修改为
  32.                 do{
  33.                         i++;
  34.                 }while( ((lcd1602ReadStatus()) & 0x80)  && (i<10));
  35.                 因为在未安装LCD1602时,通过"读状态"函数lcd1602ReadStatus()读回来的永远是0xff,
  36.                 如果采用第一种算法,会导致程序"卡死"。

  37. =================

  38. =================
  39.         2014/02/24 23:44
  40.         记录:
  41.                 1.增加函数lcd1602AddressWriteString(...)
  42. =================

  43. =================
  44.         2014/02/24 15:00
  45.         记录:
  46.                 1.增加函数delay1msForLcd1602()
  47.                   STC12C5A60S2单片机操作速度快比传统8051快,某些操作延时必须足够。
  48. =================


  49. ***************************************************************************/
  50. #include <intrins.h>
  51. #include <string.h>
  52. #include "lcd1602.h"

  53. /*外部接口函数在lcd1602.h中声明*/

  54. /*****************内部函数******************/
  55. static void Delay80usForLcd1602(void) ;
  56. static UB8 Lcd1602ReadStatus(void) ;
  57. static void Lcd1602CheckBusy(void) ;

  58. /**********************************************/


  59. /******************************************************************
  60. - 函数名称:Delay80usForLcd1602
  61. - 功能描述:延时函数
  62. - 隶属模块:LCD1602模块
  63. - 函数属性:内部函数
  64. - 参数说明:无
  65. - 返回说明:无
  66. - 注:此函数由STC-ISP V6.85Q的“软件延时计算器”针对STC-Y3指令集 @11.0592MHZ自动生成,若
  67.       指令集或晶振不同,需稍作修改。
  68. ******************************************************************/
  69. static void Delay80usForLcd1602(void)
  70. {
  71.         unsigned char i, j;

  72.         _nop_();
  73.         _nop_();
  74.         _nop_();
  75.         i = 1;
  76.         j = 216;
  77.         do
  78.         {
  79.                 while (--j);
  80.         } while (--i);
  81. }

  82. /******************************************************************
  83. - 函数名称:Lcd1602ReadStatus
  84. - 功能描述:读取LCD1602状态值
  85. - 隶属模块:LCD1602模块
  86. - 函数属性:内部函数
  87. - 参数说明:无
  88. - 返回说明:LCD1602的状态值
  89. ******************************************************************/
  90. static UB8 Lcd1602ReadStatus(void)
  91. {
  92.         UB8 statusCode ;

  93.         lcd1602_en_bit = LCD1602_DISABLE ;                        /*禁止操作LCD1602*/
  94.         lcd1602_rs_bit = LCD1602_COMMAND_OPERATION ;/*命令模式*/
  95.         lcd1602_rw_bit = LCD1602_READ_OPERATION ;        /*读操作*/

  96.         LCD1602_DATA_PORT = 0xff ;
  97.         Delay80usForLcd1602() ;
  98.         lcd1602_en_bit = LCD1602_ENABLE ;                        /*允许操作LCD1602*/
  99.         Delay80usForLcd1602() ;
  100.         statusCode = LCD1602_DATA_PORT ;                        /*读取状态值*/
  101.         lcd1602_en_bit = LCD1602_DISABLE ;                        /*禁止操作LCD1602*/

  102.         return statusCode ;
  103. }

  104. /******************************************************************
  105. - 函数名称:Lcd1602CheckBusy
  106. - 功能描述:判断LCD1602是否忙碌:若忙碌则等待;若空闲则执行任务
  107. - 隶属模块:LCD1602模块
  108. - 函数属性:内部函数
  109. - 参数说明:无
  110. - 返回说明:无
  111. - 注:当LCD1602_DATA_PORT[7]等于1,表示LCD1602忙碌,则需要等待一会儿
  112.       当LCD1602_DATA_PORT[7]等于0,表示LCD1602空闲,则需要继续执行后面的任务
  113.                                   LCD1602_DATA_PORT[7]==0,lcd1602 is free.
  114. - 补充:这里的“10”是经过测试的,测试中,利用串口打印
  115.                         的i的值为1,这里写10已经足够大了。
  116. ******************************************************************/
  117. static void Lcd1602CheckBusy(void)
  118. {
  119.         UW16 i=0;
  120.        
  121.         do{
  122.                 i++;
  123.         }while( ((Lcd1602ReadStatus()) & 0x80) && (i<10));
  124. }

  125. /******************************************************************
  126. - 函数名称:Lcd1602WriteCommand
  127. - 功能描述:LCD1602写命令
  128. - 隶属模块:LCD1602模块
  129. - 函数属性:外部函数,供用户调用
  130. - 参数说明:需要发送给LCD1602的指令值
  131. - 返回说明:无
  132. ******************************************************************/
  133. void Lcd1602WriteCommand(UB8 commandCode)
  134. {
  135.         Lcd1602CheckBusy();
  136.        
  137.         lcd1602_en_bit = LCD1602_DISABLE ;                        /*禁止操作LCD1602*/
  138.         lcd1602_rs_bit = LCD1602_COMMAND_OPERATION ;/*命令模式*/
  139.         lcd1602_rw_bit = LCD1602_WRITE_OPERATION ;        /*写操作*/

  140.         LCD1602_DATA_PORT = commandCode ;                        /*发送指令值*/
  141.         Delay80usForLcd1602();
  142.         lcd1602_en_bit = LCD1602_ENABLE ;                        /*允许操作LCD1602*/
  143.         Delay80usForLcd1602();

  144.         lcd1602_en_bit = LCD1602_DISABLE ;                        /*禁止操作LCD1602*/
  145. }

  146. /******************************************************************
  147. - 函数名称:Lcd1602WriteData
  148. - 功能描述:LCD1602写数据
  149. - 隶属模块:LCD1602模块
  150. - 函数属性:外部函数,供用户调用
  151. - 参数说明:需要发送给LCD1602的数据
  152. - 返回说明:无
  153. ******************************************************************/
  154. void Lcd1602WriteData(UB8 dataCode)
  155. {       
  156.         Lcd1602CheckBusy() ;
  157.        
  158.         lcd1602_en_bit = LCD1602_DISABLE ;                        /*禁止操作LCD1602*/
  159.         lcd1602_rs_bit = LCD1602_DATA_OPERATION ;        /*数据模式*/
  160.         lcd1602_rw_bit = LCD1602_WRITE_OPERATION ;        /*写操作*/

  161.         LCD1602_DATA_PORT = dataCode;                                /*发送数据*/
  162.         Delay80usForLcd1602();
  163.         lcd1602_en_bit = LCD1602_ENABLE ;                        /*允许操作LCD1602*/
  164.         Delay80usForLcd1602();

  165.         lcd1602_en_bit = LCD1602_DISABLE ;                         /*禁止操作LCD1602*/  
  166. }

  167. /******************************************************************
  168. - 函数名称:Lcd1602CleanAll
  169. - 功能描述:清除屏幕显示
  170. - 隶属模块:LCD1602模块
  171. - 函数属性:外部函数,供用户调用
  172. - 参数说明:无
  173. - 返回说明:无
  174. - 注:清除屏幕显示,光标归位(左上角),地址计数器AC设为0
  175. ******************************************************************/
  176. void Lcd1602CleanAll(void)
  177. {
  178.         Lcd1602WriteCommand(LCD1602_CLEAN_ALL_DISPALY);
  179. }

  180. /******************************************************************
  181. - 函数名称:Lcd1602CursorHoming
  182. - 功能描述:光标归位
  183. - 隶属模块:LCD1602模块
  184. - 函数属性:外部函数,供用户调用
  185. - 参数说明:无
  186. - 返回说明:无
  187. - 注:光标归为,当屏幕移动显示时,lcd1602显示所有数据后,
  188.            调用此函数,屏幕显示的所有东西都会归位。光标在第一
  189.            个位置(0x80)。
  190. ******************************************************************/
  191. void Lcd1602CursorHoming(void)
  192. {
  193.         Lcd1602WriteCommand(LCD1602_CURSOR_RETURN_TO_ORIGIN);
  194. }

  195. /******************************************************************
  196. - 函数名称:Lcd1602Init
  197. - 功能描述:LCD1602初始化
  198. - 隶属模块:LCD1602模块
  199. - 函数属性:外部函数,供用户调用
  200. - 参数说明:无
  201. - 返回说明:无
  202. - 注:设置(1)显示模式
  203.            (2)液晶显示允许或禁止、光标显示允许或禁止、光标闪烁允许或禁止
  204.                    (3)地址指针加一或减一、光标指针加一或减一、屏幕左移或右移
  205.                   
  206.                    可通过修改LCD1602.H中的LCD1602_DEFAULT_DISPALY_MODE、LCD1602_DEFAULT_DISPLAY_AND_CURSOR_MODE、
  207.                    LCD1602_DEFAULT_POINT_AND_POINT_ADDRESS_MODE达到不同的显示效果。
  208. ******************************************************************/
  209. void Lcd1602Init(void)
  210. {
  211.         lcd1602_en_bit = LCD1602_DISABLE ;
  212.        
  213.         Lcd1602CleanAll();
  214.         Lcd1602WriteCommand(LCD1602_DEFAULT_DISPALY_MODE);
  215.         Lcd1602WriteCommand(LCD1602_DEFAULT_DISPLAY_AND_CURSOR_MODE);
  216.         Lcd1602WriteCommand(LCD1602_DEFAULT_POINT_AND_POINT_ADDRESS_MODE);

  217.         /*可忽略,在Lcd1602CleanAll()中隐含了该功能*/
  218.         //Lcd1602CursorHoming();
  219.        
  220.         lcd1602_en_bit = LCD1602_DISABLE ;
  221. }

  222. /******************************************************************
  223. - 函数名称:Lcd1602AddressWriteByte
  224. - 功能描述:在LCD1602的row行column列写入数据dataCode
  225. - 隶属模块:LCD1602模块
  226. - 函数属性:外部函数,供用户调用
  227. - 参数说明:row-->行地址,有效值为LCD1602_ROW0或LCD1602_ROW1
  228.                          column-->列地址,有效值为0~39之间的整数
  229.                          dataCode-->需要写入的数据。
  230. - 返回说明:0(成功)或者-1(失败)
  231. - 注:行地址和列地址都是从0开始的。
  232.       
  233.            想在LCD1602的第0行第2列显示阿里伯数字5,调用方式为
  234.            Lcd1602AddressWriteByte(LCD1602_ROW0,2,‘5’);

  235.            在DEBUG模式下,会对入参进行有效性判断,协助分析。调试后期可通过
  236.        屏蔽common.h中的"#define DEBUG  1"减小目标文件的大小。   
  237. ******************************************************************/
  238. SB8 Lcd1602AddressWriteByte(UB8 row,UB8 column,UB8 dataCode)
  239. {
  240.         #ifdef   DEBUG
  241.                 if(column< LCD1602_MIN_COLUMN|| column > LCD1602_MAX_COLUMN|| \
  242.                    ( (row != LCD1602_ROW0) &&(row != LCD1602_ROW1)))
  243.                 {
  244.                         return LCD1602_ROW_OR_COLUMN_OVERFLOW ;
  245.                 }
  246.         #endif /*DEBUG*/
  247.        
  248.         if(row == LCD1602_ROW0)
  249.         {
  250.                 Lcd1602WriteCommand(LCD1602_ROW0_ADDRESS_START+column) ;
  251.         }
  252.         else if(row == LCD1602_ROW1)
  253.         {
  254.                 Lcd1602WriteCommand(LCD1602_ROW1_ADDRESS_START+column) ;
  255.                
  256.         }
  257.        
  258.         Lcd1602WriteData(dataCode);

  259.         return 0;
  260. }

  261. /******************************************************************
  262. - 函数名称:Lcd1602AddressWriteString
  263. - 功能描述:从LCD1602的row行column列开始写入字符串stringCode
  264. - 隶属模块:LCD1602模块
  265. - 函数属性:外部函数,供用户调用
  266. - 参数说明:row-->行地址,有效值为LCD1602_ROW0或LCD1602_ROW1
  267.                          column-->列地址,有效值为0~39之间的整数
  268.                          stringCode-->字符串
  269. - 返回说明:0(成功)或者-1(失败)
  270. - 注:行地址和列地址都是从0开始的。

  271.            想在LCD1602的第0行第2列显示"test",调用方式为
  272.            Lcd1602AddressWriteString(LCD1602_ROW0,2,"test");
  273.           
  274.            这里使用的是strlen,而不是sizeof。

  275.            在DEBUG模式下,会对入参进行有效性判断,协助分析。调试后期可通过
  276.        屏蔽common.h中的"#define DEBUG  1"减小目标文件的大小。
  277. ******************************************************************/
  278. SB8 Lcd1602AddressWriteString(UB8 row,UB8 column,UB8 *stringCode)
  279. {
  280.         UB8 length = strlen(stringCode) ;
  281.        
  282.         #ifdef DEBUG
  283.                 if(column< LCD1602_MIN_COLUMN|| (column+strlen(stringCode)-1) > LCD1602_MAX_COLUMN|| \
  284.                    ( (row != LCD1602_ROW0) &&(row != LCD1602_ROW1)))
  285.                 {
  286.                         return LCD1602_ROW_OR_COLUMN_OVERFLOW ;
  287.                 }
  288.         #endif        /*DEBUG*/

  289.         if(row == LCD1602_ROW0)
  290.         {
  291.                 Lcd1602WriteCommand(LCD1602_ROW0_ADDRESS_START+column) ;
  292.         }
  293.         else if(row == LCD1602_ROW1)
  294.         {
  295.                 Lcd1602WriteCommand(LCD1602_ROW1_ADDRESS_START+column) ;
  296.                
  297.         }
  298.         while(length--)
  299.         {
  300.                 Lcd1602WriteData(*stringCode);
  301.                 stringCode++;
  302.         }

  303.         return 0;
  304. }

您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

26

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

7

主题

26

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部