[匠人手记] 《两轮小车DIY》之《LCD模块》(动态更新)

[复制链接]
 楼主| 程序匠人 发表于 2009-2-23 22:10 | 显示全部楼层 |阅读模式
<br />更多相关内容连接:<font color=#3366CC>《两轮小车DIY》主贴</font>&nbsp;<br />&nbsp;<br />为了便于调试,适当的人机界面还是需要的,要么就用这个LCD&nbsp;模块来做显示部件吧。
 楼主| 程序匠人 发表于 2009-3-16 22:59 | 显示全部楼层

LCD显示终于调通了,上图。欧耶!

 楼主| 程序匠人 发表于 2009-3-16 23:00 | 显示全部楼层

特写镜头

hotpower 发表于 2009-3-16 23:01 | 显示全部楼层

哈哈~~~搞个汉字屏多欧耶~~~雷翻了~~~

  
 楼主| 程序匠人 发表于 2009-3-16 23:05 | 显示全部楼层

头文件 LCD1602.h

//--------------------------------------------------------<br />//&nbsp;项目:通用<br />//&nbsp;模块:LCD1602显示驱动<br />//&nbsp;说明:<br />//&nbsp;设计:程序匠人(版权所有,引用者请保留原作者姓名)<br />//--------------------------------------------------------<br />/*<br />版本说明:<br />LCD1602.h&nbsp;&nbsp;&nbsp;2009-3-9&nbsp;23:18:18<br /><br /><br />*/<br />//--------------------------------------------------------<br /><br /><br />//--------------------------------------------------------<br />//LCD&nbsp;端口定义<br />//--------------------------------------------------------<br />//V0为液晶显示器对比度调整端.接正电源时对比度最弱,接地电源时对比度最高.<br />//对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度<br /><br />#define&nbsp;LCD_PORT&nbsp;GPIOB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//LCD控制口<br /><br />#define&nbsp;LCD_E&nbsp;GPIO_Pin_5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//使能信号(下降沿有效)<br />#define&nbsp;LCD_RW&nbsp;&nbsp;GPIO_Pin_6&nbsp;&nbsp;&nbsp;&nbsp;//读写信号(1=读,0=写)<br />#define&nbsp;LCD_RS&nbsp;&nbsp;GPIO_Pin_7&nbsp;&nbsp;&nbsp;&nbsp;//寄存器选择信号(1=数据寄存器,0=指令寄存器)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//当RS=0,RW=0时,写入指令或者显示地址<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//当RS=0,RW=1时,读忙信号<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//当RS=1,RW=0时,写入数据<br /><br />#define&nbsp;LCD_DB0&nbsp;GPIO_Pin_8&nbsp;&nbsp;&nbsp;&nbsp;//8位双向数据线<br />#define&nbsp;LCD_DB1&nbsp;GPIO_Pin_9&nbsp;&nbsp;&nbsp;&nbsp;//8位双向数据线<br />#define&nbsp;LCD_DB2&nbsp;GPIO_Pin_10&nbsp;&nbsp;&nbsp;//8位双向数据线<br />#define&nbsp;LCD_DB3&nbsp;GPIO_Pin_11&nbsp;&nbsp;&nbsp;//8位双向数据线<br />#define&nbsp;LCD_DB4&nbsp;GPIO_Pin_12&nbsp;&nbsp;&nbsp;//8位双向数据线<br />#define&nbsp;LCD_DB5&nbsp;GPIO_Pin_13&nbsp;&nbsp;&nbsp;//8位双向数据线<br />#define&nbsp;LCD_DB6&nbsp;GPIO_Pin_14&nbsp;&nbsp;&nbsp;//8位双向数据线<br />#define&nbsp;LCD_DB7&nbsp;GPIO_Pin_15&nbsp;&nbsp;&nbsp;//8位双向数据线<br /><br />#define&nbsp;LCD_BUSY&nbsp;LCD_DB7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//忙标志位(1=忙,0=不忙)<br /><br />//--------------------------------------------------------<br />//LCD&nbsp;控制定义<br />//--------------------------------------------------------<br />#define&nbsp;LCD_E_L&nbsp;GPIO_ResetBits(LCD_PORT,&nbsp;LCD_E);&nbsp;&nbsp;//使能信号=0<br />#define&nbsp;LCD_E_H&nbsp;GPIO_SetBits(LCD_PORT,&nbsp;LCD_E);&nbsp;&nbsp;&nbsp;&nbsp;//使能信号=1<br /><br />#define&nbsp;LCD_RW_L&nbsp;GPIO_ResetBits(LCD_PORT,&nbsp;LCD_RW);//读写信号=0<br />#define&nbsp;LCD_RW_H&nbsp;GPIO_SetBits(LCD_PORT,&nbsp;LCD_RW);&nbsp;&nbsp;//读写信号=1<br /><br />#define&nbsp;LCD_RS_L&nbsp;GPIO_ResetBits(LCD_PORT,&nbsp;LCD_RS);//寄存器选择信号=0<br />#define&nbsp;LCD_RS_H&nbsp;GPIO_SetBits(LCD_PORT,&nbsp;LCD_RS);&nbsp;&nbsp;//寄存器选择信号=1<br /><br />//--------------------------------------------------------<br />//函数声明<br />//--------------------------------------------------------<br />//内部函数,不建议外部调用<br />extern&nbsp;void&nbsp;GPIO_Config_LCD_OUT(void)&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//LCD&nbsp;IO口&nbsp;配置&nbsp;(控制口=输出,数据口=输出)<br />extern&nbsp;void&nbsp;GPIO_Config_LCD_IN(void)&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//LCD&nbsp;IO口&nbsp;配置&nbsp;(控制口=输出,数据口=输入)<br /><br />extern&nbsp;void&nbsp;CheckBusy_LCD(void)&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//检测LCD忙信号函数<br />extern&nbsp;void&nbsp;WriteCommand_LCD(u8&nbsp;wclcd,u8&nbsp;busyc)&nbsp;;&nbsp;//向LCD发送指令函数<br />extern&nbsp;void&nbsp;WriteData_LCD(u8&nbsp;wdlcd)&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//向LCD发送数据函数<br /><br />//外部函数,允许外部调用<br />extern&nbsp;void&nbsp;Init_LCD(void)&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//LCD初始化函数<br />extern&nbsp;void&nbsp;DisplayOneChar_LCD(u8&nbsp;x,u8&nbsp;y,u8&nbsp;ddata);&nbsp;//显示指定坐标的字符函数(入口:x=字符坐标(0~15),y=行坐标(0~1),ddata=待显示字符)<br />extern&nbsp;void&nbsp;DisplayString_LCD(u8&nbsp;x,u8&nbsp;y,u8&nbsp;*ddata);&nbsp;//显示指定坐标的字符串函数(入口:x=字符坐标(0~15),y=行坐标(0~1),*ddata=待显示字符串的指针)<br /><br />//--------------------------------------------------------<br />//<br />//&nbsp;&nbsp;THE&nbsp;END<br />//<br />//&nbsp;&nbsp;版权所有:程序匠人(引用者请保留原作者姓名)<br />//<br />//--------------------------------------------------------<br /><br />
hotpower 发表于 2009-3-16 23:05 | 显示全部楼层

我记得1602不需要延时那么许多时间~~~

  
 楼主| 程序匠人 发表于 2009-3-16 23:09 | 显示全部楼层

回hot

根据1602的资料,在初始化时,需要ms级的延时<br />另外。为了通用性。匠人做了一个独立的延时模块(基于SysTick中断),不但可以供显示模块调用,其他模块也可以调用。<br /><br />//--------------------------------------------------------<br />//LCD初始化函数<br />//--------------------------------------------------------<br />void&nbsp;Init_LCD(void)<br />{<br />&nbsp;&nbsp;GPIO_Config_LCD_OUT();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//LCD&nbsp;IO口&nbsp;配置&nbsp;(控制口=输出,数据口=输出)<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;SysTick_Delay(15);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//延时15ms<br />&nbsp;&nbsp;WriteCommand_LCD(0x38,0);&nbsp;&nbsp;&nbsp;//三次显示模式设置,不检测忙信号<br />&nbsp;&nbsp;SysTick_Delay(5);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//延时5ms<br />&nbsp;&nbsp;WriteCommand_LCD(0x38,0);<br />&nbsp;&nbsp;SysTick_Delay(5);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//延时5ms<br />&nbsp;&nbsp;WriteCommand_LCD(0x38,0);<br />&nbsp;&nbsp;SysTick_Delay(5);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//延时5ms<br /><br />&nbsp;&nbsp;WriteCommand_LCD(0x38,1);&nbsp;&nbsp;&nbsp;//设置显示模式(8位数据口,2行显示,5*8DOTS),开始要求每次检测忙信号<br />&nbsp;&nbsp;WriteCommand_LCD(0x08,1);&nbsp;&nbsp;&nbsp;//关显示<br />&nbsp;&nbsp;WriteCommand_LCD(0x01,1);&nbsp;&nbsp;&nbsp;//清屏<br />&nbsp;&nbsp;WriteCommand_LCD(0x06,1);&nbsp;&nbsp;&nbsp;//显示光标右移设置(光标位置自加,显示移动)<br />&nbsp;&nbsp;WriteCommand_LCD(0x0c,1);&nbsp;&nbsp;&nbsp;//开显示,光标不显示,不闪烁<br />}<br />
hotpower 发表于 2009-3-16 23:09 | 显示全部楼层

哈哈~~~H文件书写要“风度”~~~不要忘了“C++”人民

#ifndef&nbsp;__LCD1602_H__<br />#define&nbsp;__LCD1602_H__<br />#ifdef&nbsp;__cplusplus<br />extern&nbsp;&quot;C&quot;<br />{<br />#endif<br /><br /><br />#ifdef&nbsp;__cplusplus<br />}<br />#endif<br />#endif//__LCD1602_H__<br />
香水城 发表于 2009-3-16 23:15 | 显示全部楼层

建议匠人,可以把I/O口的驱动速度根据需要设置为10MHz或2MHz

现在你设置为50MHz。<br /><br />设置为10MHz或2MHz,可以比50MHz时省电且产生的噪声较小。
hotpower 发表于 2009-3-16 23:18 | 显示全部楼层

俺同意教主之论点~~~

  
 楼主| 程序匠人 发表于 2009-3-16 23:20 | 显示全部楼层

I/O口的驱动速度,容俺在研究研究。。。。

呵呵,现在是抄一块是一块。还顾不上那么多细节啊。。。。。。<br /><br />不过,还是要谢谢啦。记下了。。。。
computer00 发表于 2009-3-16 23:22 | 显示全部楼层

我晕...匠人这么个程序也能发这么多个贴...放一个贴里不就

  
hotpower 发表于 2009-3-16 23:23 | 显示全部楼层

哈哈~~~他想让俺陪他玩~~~

  
 楼主| 程序匠人 发表于 2009-3-17 22:37 | 显示全部楼层

1602的“检测LCD忙信号”的改进程序

<br />1602的程序网上随便一搜,就是一箩筐。匠人也看过不下10个,其中也包括圈圈写的。说实话,没有一个能看中的。<br /><br />就拿这个忙信号来说事吧。大多数人都是死等的方式,即:如果LCD_BUSY=1,等待;否则退出。就像匠人昨天给出的程序一样:<br /><br /><font color=#0202FF>//--------------------------------------------------------<br />//检测LCD忙信号函数<br />//说明:&nbsp;如果LCD_BUSY=1,等待;否则退出<br />//--------------------------------------------------------<br />void&nbsp;CheckBusy_LCD(void)<br />{<br />&nbsp;&nbsp;GPIO_Config_LCD_IN();&nbsp;&nbsp;&nbsp;//LCD&nbsp;IO口&nbsp;配置&nbsp;(控制口=输出,数据口=输入)<br />&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_E_L;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_RS_L;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_RW_H;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_E_H;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(GPIO_ReadInputDataBit(LCD_PORT,LCD_BUSY)==0)&nbsp;break;&nbsp;&nbsp;<font color=#FF0100>//当LCD_BUSY=0时跳出循环<br /></font>&nbsp;&nbsp;}<br />&nbsp;&nbsp;LCD_E_L;<br />}<br /></font><br />读忙程序中有一个死等待循环。<br />那么问题来了。<br />如果LCD接触不良或者其它故障,一直读不到空闲信号,会导致系统的挂起(或看门狗复位)。<br /><br />当然,网上也有一些人可能是遇到或意识到了这个问题,他们采取了延时等待的方法。比如,用延时3~5ms的方法代替“读忙”。<br />这样也是一个权益之计。只不过,每次等待3~5ms(实际上可能用不了那么多时间),似乎也很痴呆。<br /><br />匠人的改进方法是:读忙+限时,双管齐下兼顾可靠性和效率性。改进后的程序如下:<br /><br /><font color=#0202FF>//--------------------------------------------------------<br />//检测LCD忙信号函数<br />//说明:&nbsp;如果LCD_BUSY=1(忙),等待;如果LCD_BUSY=0(闲)或者等待超时,退出<br />//--------------------------------------------------------<br />void&nbsp;CheckBusy_LCD(void)<br />{<br />&nbsp;&nbsp;GPIO_Config_LCD_IN();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//LCD&nbsp;IO口&nbsp;配置&nbsp;(控制口=输出,数据口=输入)<br /><font color=#FF0100>&nbsp;&nbsp;SysTick_Delay_Start(5);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//启动5ms延时<br /></font>&nbsp;&nbsp;<br />&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_E_L;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_RS_L;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_RW_H;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_E_H;<br /><font color=#FF0100>&nbsp;&nbsp;&nbsp;&nbsp;if(GPIO_ReadInputDataBit(LCD_PORT,LCD_BUSY)==0)&nbsp;break;&nbsp;&nbsp;//当LCD_BUSY=0(闲),跳出循环<br />&nbsp;&nbsp;&nbsp;&nbsp;if(SysTick_Delay_Check())&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//当等待超时,跳出循环<br /></font>&nbsp;&nbsp;}<br />&nbsp;&nbsp;LCD_E_L;<br />}</font><br /><br />举一反三,在对其它外部器件“读忙操作”时也可以借鉴这个方法。<br />&nbsp;
hotpower 发表于 2009-3-17 22:41 | 显示全部楼层

感觉应该用do{}while();~~~

  
 楼主| 程序匠人 发表于 2009-3-17 22:49 | 显示全部楼层

同意 hotpower

用do{}while();可能更严谨一些。但不知编译出来是否会更有效率。没有试过。<br /><br />这不是重点。<br /><br />重点是程序中不能有死循环(或潜在的死循环。)
hotpower 发表于 2009-3-17 22:54 | 显示全部楼层

GPIO_ReadInputDataBit有可能死循环~~~

  
 楼主| 程序匠人 发表于 2009-3-17 23:00 | 显示全部楼层

GPIO_ReadInputDataBit ? 哪句会陷入死循环?愿闻其详!

/*******************************************************************************<br />*&nbsp;Function&nbsp;Name&nbsp;&nbsp;:&nbsp;GPIO_ReadInputDataBit<br />*&nbsp;Description&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;Reads&nbsp;the&nbsp;specified&nbsp;input&nbsp;port&nbsp;pin.<br />*&nbsp;Input&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;-&nbsp;GPIOx:&nbsp;where&nbsp;x&nbsp;can&nbsp;be&nbsp;(A..E)&nbsp;to&nbsp;select&nbsp;the&nbsp;GPIO&nbsp;peripheral.<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;-&nbsp;GPIO_Pin:&nbsp;&nbsp;specifies&nbsp;the&nbsp;port&nbsp;bit&nbsp;to&nbsp;read.<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;parameter&nbsp;can&nbsp;be&nbsp;GPIO_Pin_x&nbsp;where&nbsp;x&nbsp;can&nbsp;be&nbsp;(0..15).<br />*&nbsp;Output&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;None<br />*&nbsp;Return&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;The&nbsp;input&nbsp;port&nbsp;pin&nbsp;value.<br />*******************************************************************************/<br />u8&nbsp;GPIO_ReadInputDataBit(GPIO_TypeDef*&nbsp;GPIOx,&nbsp;u16&nbsp;GPIO_Pin)<br />{<br />&nbsp;&nbsp;u8&nbsp;bitstatus&nbsp;=&nbsp;0x00;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;/*&nbsp;Check&nbsp;the&nbsp;parameters&nbsp;*/<br />&nbsp;&nbsp;assert_param(IS_GET_GPIO_PIN(GPIO_Pin));&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;if&nbsp;((GPIOx-&gtIDR&nbsp;&&nbsp;GPIO_Pin)&nbsp;!=&nbsp;(u32)Bit_RESET)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;bitstatus&nbsp;=&nbsp;(u8)Bit_SET;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;else<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;bitstatus&nbsp;=&nbsp;(u8)Bit_RESET;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;return&nbsp;bitstatus;<br />}
hotpower 发表于 2009-3-17 23:15 | 显示全部楼层

哈哈~~俺这个没版权~~~

  <br /> 相关链接:<a href='http://bbs.21ic.com/club/bbs/ShowAnnounce.asp?v=&ID=2787517'>http://bbs.21ic.com/club/bbs/ShowAnnounce.asp?v=&ID=2787517</a>
xwj 发表于 2009-3-18 00:26 | 显示全部楼层

呵呵,匠人咋还玩1602啊?

现在都是用手机屏啊,又轻又便宜,最主要的是能轻易的显示中文啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

734

主题

11156

帖子

683

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

734

主题

11156

帖子

683

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