ST7920中文字库液晶显示模块LCD12232并行8位显示C30演示程序

[复制链接]
9614|27
 楼主| hotpower 发表于 2007-12-8 10:13 | 显示全部楼层 |阅读模式
/*------------------------------------------------------------<br />ST7920中文字库液晶显示模块LCD12232并行8位显示C30演示程序<br />C30菜鸟HotPower@126.com&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2007.12.8&nbsp;于雁塔菜地<br />-------------------------------------------------------------*/<br /><br />#include&nbsp;&quot;lcd.h&quot;<br /><br />unsigned&nbsp;char&nbsp;LcdRowWriteEnable[2]&nbsp;=&nbsp;{0,&nbsp;0};//显示行刷新允许标志<br />unsigned&nbsp;char&nbsp;LcdBuffer[2][15];//LCD显示缓冲区(2行15个字符)<br />unsigned&nbsp;char&nbsp;LcdRow&nbsp;=&nbsp;0,&nbsp;LcdCol&nbsp;=&nbsp;0;//虚拟光标<br /><br />void&nbsp;LcdInit(void)//LCD初始化<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdIOInit();//LCD管脚初始化<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdClearBuffer();//清空LCD显示缓冲区<br /><br />//&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x20);//发送功能设定控制命令(4位)<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x30);//发送功能设定控制命令(8位)<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x02);//发送位址归位命令,设定DDRAM位址计数器为0<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x04);//发送进入点命令&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x0c);//发送开显示关光标命令<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x01);//发送清除显示命令&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x80);//发送设定DDRAM地址0x00命令,光标定位到(0,0)<br /><br />/*----------------------------------------------------------------------<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x30);//发送功能设定控制命令(8位)<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x30);//发送功能设定控制命令(8位)<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x30);//发送功能设定控制命令(8位)<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x01);//发送清除显示命令&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x06);//发送进入点命令0x06&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x0a);//发送开关显示关光标命令<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x0c);//发送开显示关光标命令<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x02);//发送位址归位命令,设定DDRAM位址计数器为0<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x17);//游标或显示移位控制<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x80);//发送设定DDRAM地址0x00命令,光标定位到(0,0)<br />----------------------------------------------------------------------*/<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_BK&nbsp;=&nbsp;0;//打开背光<br />}<br /><br />void&nbsp;LcdIOInit(void)//LCD管脚初始化<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_BK&nbsp;=&nbsp;0;//打开背光<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_E&nbsp;=&nbsp;0;//不使能&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_RW&nbsp;=&nbsp;1;//写读数据&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;TRIS_E&nbsp;&nbsp;=&nbsp;&nbsp;PORTOUTMODE;//定义E为输出IO<br />&nbsp;&nbsp;&nbsp;&nbsp;TRIS_RW&nbsp;=&nbsp;&nbsp;PORTOUTMODE;//定义RW为输出IO<br />&nbsp;&nbsp;&nbsp;&nbsp;TRIS_RS&nbsp;=&nbsp;&nbsp;PORTOUTMODE;//定义RS为输出IO<br />&nbsp;&nbsp;&nbsp;&nbsp;TRIS_BK&nbsp;=&nbsp;&nbsp;PORTOUTMODE;//定义BK为输出IO<br />&nbsp;&nbsp;&nbsp;&nbsp;TRIS_DATA&nbsp;=&nbsp;0;//定义RE0~RE7为输出IO<br />}<br /><br />void&nbsp;LcdWriteCommand(unsigned&nbsp;char&nbsp;Command)//写LCD命令字<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_RS&nbsp;=&nbsp;0;//命令&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Nop();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_RW&nbsp;=&nbsp;0;//写命令&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Nop();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_E&nbsp;=&nbsp;1;//使能&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Nop();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_BUS&nbsp;=&nbsp;Command;//发送8位命令&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Nop();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_E&nbsp;=&nbsp;0;//不使能,读出数据&nbsp;打入命令<br />&nbsp;&nbsp;&nbsp;&nbsp;Nop();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_RW&nbsp;=&nbsp;1;//写命令结束&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(Command&nbsp;==&nbsp;0x01)//清除显示命令,需要等待时间相对较长<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_delay_loop(1600);//st7920要求等待1.6mS<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_delay_loop(72);//st7920要求等待72uS<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />void&nbsp;LcdWriteData(unsigned&nbsp;char&nbsp;data)//写LCD显示数据&nbsp;<br />{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_RS&nbsp;=&nbsp;1;//数据&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Nop();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_RW&nbsp;=&nbsp;0;//写数据&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Nop();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_E&nbsp;=&nbsp;1;//使能&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Nop();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_BUS&nbsp;=&nbsp;data;//发送8位数据&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Nop();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_E&nbsp;=&nbsp;0;//不使能,打入数据&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Nop();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_RW&nbsp;=&nbsp;1;//写数据结束&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;_delay_loop(72);//st7920要求等待72uS<br />}&nbsp;<br /><br />void&nbsp;LcdWaitBusy(void)//LCD忙标志测试(有时死机,故没用)&nbsp;&nbsp;<br />{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;TRIS_DATA&nbsp;=&nbsp;0xff;//定义RE0~RE7为输入IO&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_BUS&nbsp;=&nbsp;0xff;<br />&nbsp;&nbsp;&nbsp;&nbsp;Nop();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_RS&nbsp;=&nbsp;0;//命令&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Nop();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_RW&nbsp;=&nbsp;1;//读数据<br />&nbsp;&nbsp;&nbsp;&nbsp;Nop();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_E&nbsp;=&nbsp;1;//使能&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Nop();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(LCD_BF)//读取忙碌标志BF(LCD_DATA.7)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Nop();//搞不清有时死机在此处,所以用_delay_loop()代替<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_E&nbsp;=&nbsp;0;//不使能,读出状态&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Nop();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;TRIS_DATA&nbsp;=&nbsp;0;//定义RE0~RE7为输出IO<br />&nbsp;&nbsp;&nbsp;&nbsp;Nop();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}&nbsp;<br /><br />void&nbsp;LcdClearBuffer(void)<br />{<br />unsigned&nbsp;char&nbsp;i,&nbsp;j;<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i&nbsp;=&nbsp;0;i&nbsp;&lt&nbsp;2;i&nbsp;++)//2行字符&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{//2行汉字<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(j&nbsp;=&nbsp;0;j&nbsp;&lt&nbsp;15;&nbsp;j&nbsp;++)//15个字符<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{//每行7个半汉字15个字符<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LcdBuffer[j]&nbsp;=&nbsp;'&nbsp;';//空白字符<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LcdRowWriteEnable&nbsp;=&nbsp;1;//允许此行刷新汉字显示<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdRow&nbsp;=&nbsp;0;//虚拟光标定位在0行<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdCol&nbsp;=&nbsp;0;//虚拟光标定位在0列<br />}<br /><br /><br />void&nbsp;LcdDisplayPos(unsigned&nbsp;char&nbsp;row,&nbsp;unsigned&nbsp;char&nbsp;col)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((row&nbsp;&lt&nbsp;2)&nbsp;&&&nbsp;(col&nbsp;&lt&nbsp;15))//容错处理,光标越界<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LcdRow&nbsp;=&nbsp;row;//刷新虚拟光标<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LcdCol&nbsp;=&nbsp;col;//刷新虚拟光标<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LcdRowWriteEnable[row]&nbsp;=&nbsp;1;//允许此行刷新汉字显示<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />void&nbsp;LcdDisplay(const&nbsp;char&nbsp;*&nbsp;string)//不真的LCD显示<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;while(*string)//0字符结束<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LcdBuffer[LcdRow][LcdCol&nbsp;++]&nbsp;=&nbsp;*string&nbsp;++;//写入显示缓冲区<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />unsigned&nbsp;char&nbsp;LcdDisplayBuffer(void)//显示刷新LCD缓冲区内的数据(一般0.25S~0.5S刷新一次)<br />{<br />unsigned&nbsp;char&nbsp;i,&nbsp;j;<br />unsigned&nbsp;char&nbsp;num&nbsp;=&nbsp;0;//刷新字符个数<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt&nbsp;2;&nbsp;i&nbsp;++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{//2行汉字<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(LcdRowWriteEnable)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{//允许此行刷新汉字显示<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x80&nbsp;+&nbsp;(i&nbsp;&lt&lt&nbsp;4));//移动真的LCD光标<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(j&nbsp;=&nbsp;0;&nbsp;j&nbsp;&lt&nbsp;15;&nbsp;j&nbsp;++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{//每行7个半汉字15个字符<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteData(LcdBuffer[j]);//刷新显示字符<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num&nbsp;++;//刷新字符个数计数<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LcdRowWriteEnable&nbsp;=&nbsp;0;//过后不允许此行刷新汉字显示<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;num;//返回实际刷新字符个数<br />}<br /><br />void&nbsp;_delay_loop(unsigned&nbsp;long&nbsp;count)//软件延时<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;while(count&nbsp;--)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ClrWdt();//注意大延时要记住喂狗<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /> 相关链接:<a href='http://blog.**/hotpower/65478/message.aspx'>http://blog.**/hotpower/65478/message.aspx</a>
幸福DE饭团 发表于 2007-12-8 10:52 | 显示全部楼层

站位

进度好快
 楼主| hotpower 发表于 2007-12-8 10:57 | 显示全部楼层

哈哈~~~俺做这些MCU菜鸟真像喝稀饭似的,感觉味道都一样~~~

fzj 发表于 2007-12-8 11:01 | 显示全部楼层

都一种语言,当然快了

写过ST7920驱动,直接COPY就OK了,呵呵
幸福DE饭团 发表于 2007-12-8 11:07 | 显示全部楼层

差距

光着屁股都追不上.<br />本想开始学ARM和Linux&nbsp;看来还是好好的精通PIC吧<br />
 楼主| hotpower 发表于 2007-12-8 11:10 | 显示全部楼层

这种缓冲的控制方式不会产生乱屏

俺反对直接操作写屏~~~<br /><br />只要在定时中断内嵌入LcdDisplayBuffer(),即可刷新LCD.<br /><br />当然也可在主消息环内.<br /><br />用户只需操作LcdDisplay()即可.<br /><br />例如:<br /><br />int&nbsp;main(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;disable_interrupts();//关中断<br />&nbsp;&nbsp;&nbsp;&nbsp;SystemInit();//系统初始化<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdDisplayPos(0,&nbsp;0);//0行0列开始<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdDisplay(&quot;123456789012345&quot;);//<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdDisplayPos(1,&nbsp;0);//1行0列开始<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdDisplay(&quot;看你晕不晕~~~&quot;);//<br />&nbsp;&nbsp;&nbsp;&nbsp;enable_interrupts();//开中断<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Nop();//&quot;黑奔&quot;开始&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />}<br />
幸福DE饭团 发表于 2007-12-8 11:38 | 显示全部楼层

...

晕乎乎,现在看论坛都不敢放心大胆的看了,看到是hotpower名字尤其小心,浏览器要一点一点往下拖,一见到头发马上跳过(杀伤力太强了).<br />看&nbsp;HotPower的文潭&nbsp;收获不小,如&nbsp;键扫描及动态显示刷新&nbsp;&nbsp;非常实用,解决了当时自学PIC时的一大难题.现在还影像深刻.
 楼主| hotpower 发表于 2007-12-8 12:04 | 显示全部楼层

哈哈~~~网管回来了,不然让你再晕些~~~

<img src="https://bbs.21ic.com/upfiles/img/200712/2007128105713384.gif"><img src="https://bbs.21ic.com/upfiles/img/200712/2007128105713384.gif"><img src="https://bbs.21ic.com/upfiles/img/200712/2007128105713384.gif"><img src="https://bbs.21ic.com/upfiles/img/200712/2007128105713384.gif"><img src="https://bbs.21ic.com/upfiles/img/200712/2007128105713384.gif">
fzj 发表于 2007-12-8 12:53 | 显示全部楼层

HOTPOWER老师:有问题请教

&nbsp;&nbsp;&nbsp;&nbsp;while(LCD_BF)//读取忙碌标志BF(LCD_DATA.7)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Nop();//搞不清有时死机在此处,所以用_delay_loop()代替<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />个人觉得查询忙标志不能这样死等待的查询,这样的查询方式CPU很被动可否搞成这样的方式?另外你的死机是否跟没开WDT有关啊?<br />while&nbsp;&nbsp;((LCD_BF)||(++DELAY&lt5000))&nbsp;CLRWDT();<br />if&nbsp;&nbsp;&nbsp;(DELAY&gt=5000)&nbsp;&nbsp;&nbsp;LCD_ERR();&nbsp;&nbsp;//错误处理<br />else<br />{............ //正常处理<br />}
幸福DE饭团 发表于 2007-12-8 14:20 | 显示全部楼层

我原来写12864的时候也出现这问题

程序中加入检测BUSY位&nbsp;运行出现问题&nbsp;后来直接用1ms延时代替
 楼主| hotpower 发表于 2007-12-9 16:34 | 显示全部楼层

不要叫俺什么老师,叫俺戴草帽的农民~~~

这个帖子是昨天下午写的,由于俺家网管回来了,路由器上传不了...<br /><br />因为做菜鸟还没进行到WDT和系统配置~~~<br /><br />俺从来反对用while();<br />主张用for();<br /><br />这样就不会死机了~~~<br /><br />但俺发现总死机,所以还不如直接用_delay_loop();<br /><br />实际运行时,主要运行<br /><br />unsigned&nbsp;char&nbsp;LcdDisplayBuffer(void)//显示刷新LCD缓冲区内的数据(一般0.25S~0.5S刷新一次)<br />{<br />unsigned&nbsp;char&nbsp;i,&nbsp;j;<br />unsigned&nbsp;char&nbsp;num&nbsp;=&nbsp;0;//刷新字符个数<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt&nbsp;2;&nbsp;i&nbsp;++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{//2行汉字<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(LcdRowWriteEnable)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{//允许此行刷新汉字显示<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x80&nbsp;+&nbsp;(i&nbsp;&lt&lt&nbsp;4));//移动真的LCD光标<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(j&nbsp;=&nbsp;0;&nbsp;j&nbsp;&lt&nbsp;15;&nbsp;j&nbsp;++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{//每行7个半汉字15个字符<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteData(LcdBuffer[j]);//刷新显示字符<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num&nbsp;++;//刷新字符个数计数<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LcdRowWriteEnable&nbsp;=&nbsp;0;//过后不允许此行刷新汉字显示<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;num;//返回实际刷新字符个数<br />}<br /><br />其中LcdWriteCommand()和LcdWriteData()都用了<br />_delay_loop(72);//st7920要求等待72uS<br /><br />可是俺还没学定时器和每天指令运行机器周期到底是多少~~~<br /><br />void&nbsp;_delay_loop(unsigned&nbsp;long&nbsp;count)//软件延时<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;while(count&nbsp;--)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ClrWdt();//注意大延时要记住喂狗<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />这那里是uS软件延时呀~~~<br /><br />俺只是在仿真器上调试通过的,烧写的还不能运行~~~<br /><br />昨晚看了配置好象大概在0xaafc中(忘了~~~).看了是默认打开WDT.<br /><br />而俺的main()没有clrwdt(),所以烧写后肯定不能运行了~~~<br /><br />上班再做实验,争取早日菜鸟毕业~~~<br /><br /><br /><br />
gglu 发表于 2007-12-9 16:35 | 显示全部楼层

这农民还挺会种菜
 楼主| hotpower 发表于 2007-12-9 17:20 | 显示全部楼层

使用LcdWaitBusy()并通过测试的LCD12232并行显示C30演示程序

/*------------------------------------------------------------<br />ST7920中文字库液晶显示模块LCD12232并行8位显示C30演示程序<br />C30菜鸟HotPower@126.com&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2007.12.9&nbsp;于雁塔菜地<br />-------------------------------------------------------------*/<br /><br />#include&nbsp;&quot;lcd.h&quot;<br /><br />unsigned&nbsp;char&nbsp;LcdRowWriteEnable[2]&nbsp;=&nbsp;{0,&nbsp;0};//显示行刷新允许标志<br />unsigned&nbsp;char&nbsp;LcdBuffer[2][15];//LCD显示缓冲区(2行15个字符)<br />unsigned&nbsp;char&nbsp;LcdRow&nbsp;=&nbsp;0,&nbsp;LcdCol&nbsp;=&nbsp;0;//虚拟光标<br /><br />void&nbsp;LcdInit(void)//LCD初始化<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdIOInit();//LCD管脚初始化<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdClearBuffer();//清空LCD显示缓冲区<br /><br />//&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x20);//发送功能设定控制命令(4位)<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x30);//发送功能设定控制命令(8位)<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x02);//发送位址归位命令,设定DDRAM位址计数器为0<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x04);//发送进入点命令&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x0c);//发送开显示关光标命令<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x01);//发送清除显示命令&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x80);//发送设定DDRAM地址0x00命令,光标定位到(0,0)<br /><br />/*----------------------------------------------------------------------<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x30);//发送功能设定控制命令(8位)<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x30);//发送功能设定控制命令(8位)<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x30);//发送功能设定控制命令(8位)<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x01);//发送清除显示命令&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x06);//发送进入点命令0x06&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x0a);//发送开关显示关光标命令<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x0c);//发送开显示关光标命令<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x02);//发送位址归位命令,设定DDRAM位址计数器为0<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x17);//游标或显示移位控制<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x80);//发送设定DDRAM地址0x00命令,光标定位到(0,0)<br />----------------------------------------------------------------------*/<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_BK&nbsp;=&nbsp;0;//打开背光<br />}<br /><br />void&nbsp;LcdIOInit(void)//LCD管脚初始化<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_BK&nbsp;=&nbsp;0;//打开背光<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_E&nbsp;=&nbsp;0;//不使能&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_RW&nbsp;=&nbsp;1;//写读数据&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;TRIS_E&nbsp;&nbsp;=&nbsp;&nbsp;PORTOUTMODE;//定义E为输出IO<br />&nbsp;&nbsp;&nbsp;&nbsp;TRIS_RW&nbsp;=&nbsp;&nbsp;PORTOUTMODE;//定义RW为输出IO<br />&nbsp;&nbsp;&nbsp;&nbsp;TRIS_RS&nbsp;=&nbsp;&nbsp;PORTOUTMODE;//定义RS为输出IO<br />&nbsp;&nbsp;&nbsp;&nbsp;TRIS_BK&nbsp;=&nbsp;&nbsp;PORTOUTMODE;//定义BK为输出IO<br />&nbsp;&nbsp;&nbsp;&nbsp;TRIS_DATA&nbsp;=&nbsp;0;//定义RE0~RE7为输出IO<br />}<br /><br />void&nbsp;LcdWriteCommand(unsigned&nbsp;char&nbsp;Command)//写LCD命令字<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_RS&nbsp;=&nbsp;0;//命令&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Nop();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_RW&nbsp;=&nbsp;0;//写命令&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Nop();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_E&nbsp;=&nbsp;1;//使能&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Nop();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_BUS&nbsp;=&nbsp;Command;//发送8位命令&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Nop();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_E&nbsp;=&nbsp;0;//不使能,读出数据&nbsp;打入命令<br />&nbsp;&nbsp;&nbsp;&nbsp;Nop();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_RW&nbsp;=&nbsp;1;//写命令结束&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(Command&nbsp;==&nbsp;0x01)//清除显示命令,需要等待时间相对较长<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LcdWaitBusy(1600);<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_delay_loop(1600);//st7920要求等待1.6mS<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LcdWaitBusy(72);<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_delay_loop(72);//st7920要求等待72uS<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />void&nbsp;LcdWriteData(unsigned&nbsp;char&nbsp;data)//写LCD显示数据&nbsp;<br />{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_RS&nbsp;=&nbsp;1;//数据&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Nop();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_RW&nbsp;=&nbsp;0;//写数据&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Nop();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_E&nbsp;=&nbsp;1;//使能&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Nop();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_BUS&nbsp;=&nbsp;data;//发送8位数据&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Nop();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_E&nbsp;=&nbsp;0;//不使能,打入数据&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Nop();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_RW&nbsp;=&nbsp;1;//写数据结束&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdWaitBusy(72);<br />//&nbsp;&nbsp;&nbsp;&nbsp;_delay_loop(72);//st7920要求等待72uS<br />}&nbsp;<br /><br />void&nbsp;LcdWaitBusy(unsigned&nbsp;int&nbsp;count)//LCD忙标志测试(有时死机,故没用参数可以防止死机)&nbsp;&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;TRIS_DATA&nbsp;=&nbsp;0xff;//定义RE0~RE7为输入IO&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_BUS&nbsp;=&nbsp;0xff;<br />&nbsp;&nbsp;&nbsp;&nbsp;Nop();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_RS&nbsp;=&nbsp;0;//命令&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Nop();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_RW&nbsp;=&nbsp;1;//读数据<br />&nbsp;&nbsp;&nbsp;&nbsp;Nop();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_E&nbsp;=&nbsp;1;//使能&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(count&nbsp;--)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!LCD_BF)&nbsp;break;//读取忙碌标志BF(LCD_DATA.7)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ClrWdt();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_E&nbsp;=&nbsp;0;//不使能,读出状态&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;Nop();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;TRIS_DATA&nbsp;=&nbsp;0;//定义RE0~RE7为输出IO<br />&nbsp;&nbsp;&nbsp;&nbsp;Nop();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}&nbsp;<br /><br />void&nbsp;LcdClearBuffer(void)<br />{<br />unsigned&nbsp;char&nbsp;i,&nbsp;j;<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i&nbsp;=&nbsp;0;i&nbsp;&lt&nbsp;2;i&nbsp;++)//2行字符&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;{//2行汉字<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(j&nbsp;=&nbsp;0;j&nbsp;&lt&nbsp;15;&nbsp;j&nbsp;++)//15个字符<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{//每行7个半汉字15个字符<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LcdBuffer[j]&nbsp;=&nbsp;'&nbsp;';//空白字符<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LcdRowWriteEnable&nbsp;=&nbsp;1;//允许此行刷新汉字显示<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdRow&nbsp;=&nbsp;0;//虚拟光标定位在0行<br />&nbsp;&nbsp;&nbsp;&nbsp;LcdCol&nbsp;=&nbsp;0;//虚拟光标定位在0列<br />}<br /><br /><br />void&nbsp;LcdDisplayPos(unsigned&nbsp;char&nbsp;row,&nbsp;unsigned&nbsp;char&nbsp;col)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((row&nbsp;&lt&nbsp;2)&nbsp;&&&nbsp;(col&nbsp;&lt&nbsp;15))//容错处理,光标越界<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LcdRow&nbsp;=&nbsp;row;//刷新虚拟光标<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LcdCol&nbsp;=&nbsp;col;//刷新虚拟光标<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LcdRowWriteEnable[row]&nbsp;=&nbsp;1;//允许此行刷新汉字显示<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />void&nbsp;LcdDisplay(const&nbsp;char&nbsp;*&nbsp;string)//不真的LCD显示<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;while(*string)//0字符结束<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LcdBuffer[LcdRow][LcdCol&nbsp;++]&nbsp;=&nbsp;*string&nbsp;++;//写入显示缓冲区<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />unsigned&nbsp;char&nbsp;LcdDisplayBuffer(void)//显示刷新LCD缓冲区内的数据(一般0.25S~0.5S刷新一次)<br />{<br />unsigned&nbsp;char&nbsp;i,&nbsp;j;<br />unsigned&nbsp;char&nbsp;num&nbsp;=&nbsp;0;//刷新字符个数<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt&nbsp;2;&nbsp;i&nbsp;++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{//2行汉字<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(LcdRowWriteEnable)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{//允许此行刷新汉字显示<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteCommand(0x80&nbsp;+&nbsp;(i&nbsp;&lt&lt&nbsp;4));//移动真的LCD光标<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(j&nbsp;=&nbsp;0;&nbsp;j&nbsp;&lt&nbsp;15;&nbsp;j&nbsp;++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{//每行7个半汉字15个字符<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LcdWriteData(LcdBuffer[j]);//刷新显示字符<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num&nbsp;++;//刷新字符个数计数<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LcdRowWriteEnable&nbsp;=&nbsp;0;//过后不允许此行刷新汉字显示<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;num;//返回实际刷新字符个数(这个&quot;黑奔时有用~~~&quot;)<br />}<br />
 楼主| hotpower 发表于 2007-12-19 21:24 | 显示全部楼层

哈哈~~~菜农半天的菜鸟例程看来很稳定呀~~~自贺一番~~~

当然俺也样的帖子也无法和斑竹们的&quot;精华贴&quot;相比了~~~<br /><br /><br />哈哈~~~自己发贴自贺一番~~~也算菜农对大家的&quot;贡献&quot;吧~~~<br /><br />俺从不相信书上的&quot;范例&quot;,俺只认可通过实际运行的&quot;例程&quot;...
violit 发表于 2007-12-22 00:11 | 显示全部楼层

hotpower开始玩dsPIC了~太好了!

有没有打算加上操作系统?比如FreeRTOS?<br />向你学习啊!!!
程序匠人 发表于 2007-12-22 00:14 | 显示全部楼层

此帖应该加裤子,请斑竹明察

  
 楼主| hotpower 发表于 2007-12-24 00:46 | 显示全部楼层

哈哈~~~菜农在PIC的全是垃圾贴!!!就此声明!!!

  
 楼主| hotpower 发表于 2007-12-24 00:52 | 显示全部楼层

哈哈~~~查查菜农在此的垃圾贴有多少呀...声明俺并非要裤子!!

俺发表的&quot;演示程序&quot;的本意是什么???<br /><br />几年了...俺一直不想说~~~<br /><br />还有俺的LPC213X的垃圾贴真不知道有多少!!!<br /><br />哈哈~~~还好,俺现在有文潭---俺的底盘俺做主~~~<br /><br />记得俺拥有&quot;菜农的自留地&quot;时,也不乱给自己加裤子...<br /><br />但俺写的&quot;演示程序&quot;全是给&quot;菜鸟&quot;写得...<br /><br />
兰天白云 发表于 2007-12-24 08:18 | 显示全部楼层

本斑主加的第一条裤子

  
兰天白云 发表于 2007-12-24 08:29 | 显示全部楼层

回头看一下,有没有加好?

已加,OK<br /><br />hotpower,好贴啊<br /><br />欢迎hotpower大叔以后多支持<br /><br />一个私下请求<br /><br />能不能玩玩PIC32,然后给俺们菜鸟说说?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1460

主题

21617

帖子

508

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