[匠人手记] 结贴!!问题解决一半

[复制链接]
 楼主| avocationA 发表于 2009-3-10 15:04 | 显示全部楼层 |阅读模式
#include&nbsp;&ltreg52.h&gt<br /><br /><br /><br />code&nbsp;unsigned&nbsp;char&nbsp;P09[2][4]=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />{<br />//&nbsp;0&nbsp;1&nbsp;2&nbsp;3&nbsp;4&nbsp;5&nbsp;6&nbsp;7&nbsp;8&nbsp;9&nbsp;0&nbsp;1&nbsp;2&nbsp;3&nbsp;4&nbsp;5&nbsp;6&nbsp;7&nbsp;8&nbsp;9&nbsp;0&nbsp;1&nbsp;2&nbsp;3&nbsp;4&nbsp;5&nbsp;<br />&nbsp;&nbsp;{0x01,0x02,0x03,0x04},//显示位数&nbsp;<br />&nbsp;&nbsp;{2,2,2,2}//最小<br />};<br /><br /><br />void&nbsp;DispInit()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;P2&nbsp;=&nbsp;0xFF;<br />&nbsp;&nbsp;&nbsp;&nbsp;P0&nbsp;=&nbsp;0xFF;<br />&nbsp;&nbsp;&nbsp;&nbsp;P1&nbsp;=&nbsp;0XFF;<br />}<br /><br />void&nbsp;Menu_P(unsigned&nbsp;char(*P0X)[110])<br />{<br /><br />&nbsp;&nbsp;unsigned&nbsp;char&nbsp;i,j;<br />&nbsp;&nbsp;P0&nbsp;=&nbsp;0xEF;<br />&nbsp;&nbsp;P1=*(*(P0X+i)+j);//显示位数<br />&nbsp;&nbsp;i++;<br />&nbsp;&nbsp;P2=*(*(P0X+i)+j);//小数点<br />&nbsp;&nbsp;i++;<br />&nbsp;&nbsp;j++;<br /><br />}<br /><br />void&nbsp;main()<br />{<br />for(;;)<br />{<br />DispInit();<br />Menu_P(P09);<br />}<br /><br />}<br /><br />
程序匠人 发表于 2009-3-11 11:02 | 显示全部楼层

还没来的及细看,楼主就把内容删除了

急性子啊
 楼主| avocationA 发表于 2009-3-13 22:51 | 显示全部楼层

不是的!是自己跳出问题来了!郁闷

按SHI功能&nbsp;键的时候&nbsp;5LED&nbsp;其中1位&nbsp;会丢失&nbsp;&nbsp;但是循环一次有OK<br />然后偶尔有正确!!!&nbsp;所以想改好在传上来&nbsp;但是到现在还是没有OK<br />
 楼主| avocationA 发表于 2009-3-13 22:59 | 显示全部楼层

我写的是

5LED&nbsp;+&nbsp;键盘&nbsp;的程序<br />&nbsp;特点是通过给下面的哪个结构体&nbsp;附值&nbsp;达到控制&nbsp;5LED的个功能.<br /><br />值为0代表功能无效!明天改下&nbsp;改好后我在传上来&nbsp;&nbsp;<br />改不好也传上来&nbsp;<br />&nbsp;<br /><br />LED&nbsp;&nbsp;&nbsp;&nbsp;LedDat=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//结构体定义及初始化<br />{<br />//位数|闪烁位|小数点|正负号|单位|缓存|闪烁计数器<br />&nbsp;&nbsp;&nbsp;&nbsp;4,&nbsp;&nbsp;&nbsp;&nbsp;6,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;&nbsp;&nbsp;1,&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;&nbsp;0<br />};<br /><br /><br /><br /><br /><br /><br /><br /><br />void&nbsp;Show_LedMumeral()<br />{&nbsp;&nbsp;&nbsp;<br />&nbsp;//备注下句临时变量可以优化/但会报警&nbsp;&nbsp;类型&nbsp;&nbsp;&nbsp;转换????<br />//可能MCU是16位的原因<br />&nbsp;unsigned&nbsp;char&nbsp;Show_LedMumeral_temp1=LedDat.FlashBit;//临时变量<br /><br />&nbsp;if(LedDat.FlashBit)<br />&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(LedDat.FlashTime&gt210)&nbsp;&nbsp;//延时到<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Show_Led_5(LedDat.ShowBit,LedDat.ShowBuff);//显示数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Show_LedRadix(LedDat.Radix);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示小数点<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Show_LedSign_P(LedDat.Sign_P);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示负号和P<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OnOFF_Led_Bit(LedDat.FlashBit);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//关闭显示位<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LedDat.FlashTime--;<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;<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Show_Led_5(LedDat.ShowBit,LedDat.ShowBuff);//显示数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Show_LedRadix(LedDat.Radix);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示小数点<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Show_LedSign_P(LedDat.Sign_P);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示负号和P<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OnOFF_Led_Bit(Show_LedMumeral_temp1+=6);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示位<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LedDat.FlashTime--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;else<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Show_Led_5(LedDat.ShowBit,LedDat.ShowBuff);//显示数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Show_LedRadix(LedDat.Radix);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示小数点<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Show_LedSign_P(LedDat.Sign_P);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示负号和P<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;Show_LedUnit(LedDat.Unit);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示单位<br />&nbsp;}<br /><br /><br />
 楼主| avocationA 发表于 2009-3-13 23:02 | 显示全部楼层

中断里调用

void&nbsp;TI2_OnInterrupt(void)<br />{<br />&nbsp;&nbsp;/*&nbsp;Write&nbsp;your&nbsp;code&nbsp;here&nbsp;...&nbsp;*/<br />&nbsp;KeyBoard();//键盘扫描<br />&nbsp;Show_LedMumeral();//5LED<br />}
 楼主| avocationA 发表于 2009-3-13 23:21 | 显示全部楼层

【键盘部分】没有问题!

<br />/*********************************************************************************<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;【键盘部分】<br />*********************************************************************************/<br />/*may*/<br />#include&nbsp;&quot;Zled.h&quot;<br />#include&nbsp;&quot;Zkey.h&quot;<br /><br />#define&nbsp;&nbsp;TK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//主程序执行时间8ms&nbsp;&nbsp;//8<br />#define&nbsp;&nbsp;timer20ms&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(30/TK)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//延时时间20ms&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//(30/TK)<br />#define&nbsp;&nbsp;timer3S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1000/TK)&nbsp;&nbsp;&nbsp;&nbsp;//延时时间3S&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//(1200/TK)<br />#define&nbsp;&nbsp;timer100ms&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(800/TK)&nbsp;&nbsp;&nbsp;&nbsp;//延时时间100ms&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//(1000/TK)<br />KEY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KeyDat;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//定义数据结构<br /><br /><br />/***************************<br />【函数】:HC166_read(void)<br />【功能】:HC166驱动与硬件相关<br />【参数】:无<br />***************************/<br />unsigned&nbsp;char&nbsp;HC166_read(void)//HC166_read<br />{<br />&nbsp;&nbsp;unsigned&nbsp;char&nbsp;i,set;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;Bits1_PutBit(2,&nbsp;FALSE);//L&nbsp;cp底电平<br />&nbsp;&nbsp;Bits1_PutBit(1,&nbsp;FALSE);//L&nbsp;PCLK时钟低电平<br />&nbsp;&nbsp;Bits1_PutBit(1,&nbsp;TRUE);&nbsp;//H&nbsp;PCLK//时钟高电平,上升沿有效<br />&nbsp;&nbsp;Bits1_PutBit(2,&nbsp;TRUE);&nbsp;//H&nbsp;cp高电平<br /><br />&nbsp;&nbsp;for(i&nbsp;=&nbsp;0,&nbsp;set&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt&nbsp;8;i&nbsp;++)//依次读取锁存的8位数据<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;&lt&lt=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!Bits3_GetBit(0))<br />&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;++;<br />&nbsp;&nbsp;&nbsp;&nbsp;Bits1_PutBit(1,&nbsp;FALSE);//L&nbsp;PCLK时钟低电平<br />&nbsp;&nbsp;&nbsp;&nbsp;Bits1_PutBit(1,&nbsp;TRUE);//H&nbsp;PCLK//时钟高电平,上升沿有效<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;switch(set)&nbsp;//读取扫描值&nbsp;<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0x00:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0x00;&nbsp;&nbsp;break;&nbsp;//<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;K_Run:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0x01;&nbsp;&nbsp;break;&nbsp;//GetRun<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;K_Stop:&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0x02;&nbsp;&nbsp;break;&nbsp;//GetStop<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;K_Down:&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0x03;&nbsp;&nbsp;break;&nbsp;//GetDown<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;K_Jog:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0x04;&nbsp;&nbsp;break;&nbsp;//GetJog<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;K_Shif:&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0x05;&nbsp;&nbsp;break;&nbsp;//GetShif<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;K_Up:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0x06;&nbsp;&nbsp;break;&nbsp;//GetUp<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;K_Enter:&nbsp;&nbsp;&nbsp;return&nbsp;0x07;&nbsp;&nbsp;break;&nbsp;//GetEnter<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;K_Mode:&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0x08;&nbsp;&nbsp;break;&nbsp;//GetMode<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;K_Enter+K_Up:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0x09;&nbsp;&nbsp;break;&nbsp;//组合键K_Enter+K_Up<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;K_Enter+K_Down:&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0x10;&nbsp;&nbsp;break;&nbsp;//组合键K_Enter+K_Down<br />&nbsp;&nbsp;&nbsp;&nbsp;default:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0x00;&nbsp;&nbsp;break;&nbsp;//点亮LED2<br />&nbsp;&nbsp;}<br />}<br /><br /><br />/***************************<br />【函数】:GetKey(void)<br />【功能】:判断是否有按键<br />【参数】:无<br />***************************/<br />void&nbsp;GetKey(void)<br />{<br /><br />&nbsp;&nbsp;KeyDat.KeyTemp=HC166_read();<br />&nbsp;&nbsp;if(KeyDat.KeyTemp!=0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//有按键<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;KeyDat.KeyDog=timer20ms;<br />&nbsp;&nbsp;&nbsp;&nbsp;KeyDat.KeyPower++;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;}<br />}<br /><br />/***************************<br />【函数】:KeyDog(void)<br />【功能】:按键延时<br />【参数】:无<br />***************************/<br />void&nbsp;Key_Dog(void)<br />{<br />&nbsp;&nbsp;if(0==--KeyDat.KeyDog)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//按键松开<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;KeyDat.KeyData=HC166_read();//读键盘<br />&nbsp;&nbsp;&nbsp;&nbsp;if(KeyDat.KeyData!=0)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KeyDat.KeyPower++;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//进入KeyOffShort(void)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KeyDat.KeyDog=timer3S;&nbsp;&nbsp;&nbsp;//计数器装载3S<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KeyDat.KeyPower=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KeyDat.KeyData=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//返回<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;}<br />}<br /><br />/***************************<br />【函数】:KeyOffShort(void)<br />【功能】:判断按键是否松开<br />【参数】:无<br />***************************/<br />void&nbsp;KeyOffShort(void)<br />{<br />&nbsp;&nbsp;if(HC166_read()==0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//判断按键松开<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;KeyDat.KeyPower=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;KeyDat.KeyData|=HaveKey;//定义短击标记<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;else<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(0==--KeyDat.KeyDog)&nbsp;&nbsp;//3秒延时到否<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KeyDat.KeyDog=timer100ms;//计数器装载100ms<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KeyDat.KeyPower++;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//进入KeyOffLong(void)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br />}<br /><br /><br />/***************************<br />【函数】:KeyOffLong(void)<br />【功能】:判断按键长击<br />【参数】:无<br />***************************/<br />void&nbsp;KeyOffLong(void)<br />{<br />&nbsp;&nbsp;if(HC166_read()!=0)//判断长击按键弹起<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;if(0==--KeyDat.KeyDog)//3秒延时到<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(KeyDat.KeyTemp==HC166_read())//校验数据(判断组合键用)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KeyDat.KeyData|=DubClick;//DubClick|HaveKey;//长击标记<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KeyDat.KeyDog=timer100ms;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KeyDat.KeyData=0;&nbsp;&nbsp;//数据归0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KeyDat.KeyPower=0;&nbsp;//长击按键弹起后返回<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//长击按键弹起<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;KeyDat.KeyData=0;&nbsp;&nbsp;//数据归0<br />&nbsp;&nbsp;&nbsp;&nbsp;KeyDat.KeyPower=0;&nbsp;//长按键弹起后返回<br />&nbsp;&nbsp;}<br /><br />}<br />/***************************<br />【函数】:void(*SubKey[])()<br />【功能】:函数指针定义<br />【参数】:无<br />***************************/<br />void(*SubKey[4])()=<br />{<br />&nbsp;&nbsp;GetKey,Key_Dog,KeyOffShort,KeyOffLong&nbsp;&nbsp;&nbsp;&nbsp;<br />};<br /><br />/***************************<br />【函数】:void&nbsp;KeyBoard(void)<br />【功能】:主循环或者定时中断调用<br />【参数】:无<br />***************************/<br />void&nbsp;KeyBoard(void)//扫描键盘<br />{<br />&nbsp;&nbsp;(*SubKey[KeyDat.KeyPower])();&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />/***************************<br />【函数】:unsigned&nbsp;char&nbsp;JB_KeyData(void)()<br />【功能】:用户功能函数调用<br />【参数】:无<br />***************************/<br />unsigned&nbsp;char&nbsp;JB_KeyData(void)<br />{<br />&nbsp;&nbsp;unsigned&nbsp;char&nbsp;i=0;<br />&nbsp;&nbsp;if(KeyDat.KeyData&gtDubClick)//DubClick=0x40<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;i=KeyDat.KeyData;<br />&nbsp;&nbsp;&nbsp;&nbsp;KeyDat.KeyData=0;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;}&nbsp;<br />&nbsp;&nbsp;return&nbsp;i;<br />}<br /><br /><br /><br /><br /><br />
 楼主| avocationA 发表于 2009-3-13 23:22 | 显示全部楼层

头H

<br />#ifndef&nbsp;__Zkey_H<br />#define&nbsp;__Zkey_H<br /><br /><br /><br />#define&nbsp;&nbsp;HaveKey&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//有键<br />#define&nbsp;&nbsp;DubClick&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x40&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//连击<br /><br /><br /><br />#define&nbsp;&nbsp;K_Run&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x01&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//键值定义<br />#define&nbsp;&nbsp;K_Stop&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x02<br />#define&nbsp;&nbsp;K_Down&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x04<br />#define&nbsp;&nbsp;K_Jog&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x08<br />#define&nbsp;&nbsp;K_Shif&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x10<br />#define&nbsp;&nbsp;K_Up&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x20<br />#define&nbsp;&nbsp;K_Enter&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x40<br />#define&nbsp;&nbsp;K_Mode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x80<br /><br />#define&nbsp;&nbsp;Run_Key&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(0x01+HaveKey)//短击定义<br />#define&nbsp;&nbsp;Stop_Key&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(0x02+HaveKey)<br />#define&nbsp;&nbsp;Down_Key&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(0x03+HaveKey)<br />#define&nbsp;&nbsp;Jog_Key&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(0x04+HaveKey)<br />#define&nbsp;&nbsp;Shif_Key&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(0x05+HaveKey)<br />#define&nbsp;&nbsp;Up_Key&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(0x06+HaveKey)<br />#define&nbsp;&nbsp;Enter_Key&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(0x07+HaveKey)<br />#define&nbsp;&nbsp;Mode_Key&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(0x08+HaveKey)<br /><br /><br />#define&nbsp;&nbsp;Run_Key_Dub&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(0x01+DubClick)//长击和组合定义<br />#define&nbsp;&nbsp;Stop_Key_Dub&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(0x02+DubClick)<br />#define&nbsp;&nbsp;Down_Key_Dub&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(0x03+DubClick)<br />#define&nbsp;&nbsp;Jog_Key_Dub&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(0x04+DubClick)<br />#define&nbsp;&nbsp;Shif_Key_Dub&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(0x05+DubClick)<br />#define&nbsp;&nbsp;Up_Key_Dub&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(0x06+DubClick)<br />#define&nbsp;&nbsp;Enter_Key_Dub&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(0x07+DubClick)<br />#define&nbsp;&nbsp;Mode_Key_Dub&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(0x08+DubClick)<br /><br />#define&nbsp;&nbsp;EnterUp_Key&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(0x09+DubClick)<br />#define&nbsp;&nbsp;EnterDown_Key&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(0x10+DubClick)<br /><br />//#define&nbsp;&nbsp;RRKey_Dub&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(DubClick|HaveKey)<br /><br />unsigned&nbsp;char&nbsp;HC166_read(void);//HC166_read<br />unsigned&nbsp;char&nbsp;JB_KeyData(void);//读取键盘<br />void&nbsp;(*SubKey[])();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//键盘扫描指针<br />void&nbsp;KeyOffLong(void);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//短击按键处理<br />void&nbsp;KeyOffShort(void);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//长击和组合键盘处理<br />void&nbsp;Key_Dog(void);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//按键延时<br />void&nbsp;GetKey(void);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//获取键盘值<br />extern&nbsp;&nbsp;void&nbsp;KeyBoard(void);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//扫描键盘<br /><br />typedef&nbsp;struct&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//键盘扫描结构体<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;KeyPower;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;KeyDog;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;KeyData;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;KeyTemp;<br />}KEY;<br /><br /><br />//extern&nbsp;&nbsp;LED&nbsp;&nbsp;&nbsp;&nbsp;LedDat;<br /><br /><br /><br /><br /><br />#endif
 楼主| avocationA 发表于 2009-3-13 23:28 | 显示全部楼层

测试....

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch(JB_KeyData())&nbsp;//读取扫描值&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Run_Key:&nbsp;&nbsp;&nbsp;ledshow_buf=1;&nbsp;&nbsp;break;&nbsp;//LED显示1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Stop_Key:&nbsp;&nbsp;ledshow_buf=2;&nbsp;&nbsp;break;&nbsp;//LED显示2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Down_Key:&nbsp;&nbsp;ledshow_buf=3;&nbsp;&nbsp;break;&nbsp;//LED显示3&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Jog_Key:&nbsp;&nbsp;&nbsp;ledshow_buf=4;&nbsp;&nbsp;break;&nbsp;//LED显示4<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Shif_Key:&nbsp;&nbsp;ledshow_buf=5;&nbsp;&nbsp;break;&nbsp;//LED显示5<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Up_Key:&nbsp;&nbsp;&nbsp;&nbsp;ledshow_buf=6;&nbsp;&nbsp;break;&nbsp;//LED显示6<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Enter_Key:&nbsp;ledshow_buf=7;&nbsp;&nbsp;break;&nbsp;//LED显示7<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Mode_Key:&nbsp;&nbsp;ledshow_buf=8;&nbsp;&nbsp;break;&nbsp;//LED显示8&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Down_Key_Dub:&nbsp;&nbsp;ledshow_buf=65535;&nbsp;&nbsp;break;&nbsp;//长按键<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Up_Key_Dub:&nbsp;&nbsp;&nbsp;&nbsp;ledshow_buf=12345;&nbsp;&nbsp;break;&nbsp;//长按键<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;EnterUp_Key:&nbsp;ledshow_buf=99;&nbsp;&nbsp;break;&nbsp;//组合按键<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;EnterDown_Key:&nbsp;&nbsp;ledshow_buf=100;&nbsp;&nbsp;break;&nbsp;//组合按键<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;case&nbsp;0X00:&nbsp;ledshow_buf=1000;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;//<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
 楼主| avocationA 发表于 2009-3-13 23:32 | 显示全部楼层

匠人能把我贴的代码变成彩色的吗?

用空帮我看看!看你博客里&nbsp;&nbsp;贴的KEY感觉&nbsp;全局变量多!<br />上次有个&nbsp;卖芯片的跟我说&nbsp;全局变量越少越好,<br /><br />看了你的手记&nbsp;也想冲动下,拿着你的书&nbsp;在办公室里&nbsp;&nbsp;可是宣传了一翻!&nbsp;&nbsp;过年的时候&nbsp;想带回家的&nbsp;可是被人借去了上个星期才要回来.呵呵!<br />
 楼主| avocationA 发表于 2009-3-14 11:00 | 显示全部楼层

/***************************<br />【函数】:HC166_read(void)<br />【功能】:HC166驱动与硬件相关<br />【参数】:无<br />***************************/<br />unsigned&nbsp;char&nbsp;HC166_read(void)//HC166_read<br />{<br />&nbsp;&nbsp;unsigned&nbsp;char&nbsp;i,set,k;<br />&nbsp;&nbsp;HC166_SL_Lo();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//cp底电平<br />&nbsp;&nbsp;HC595_HC166_CLK_Lo();&nbsp;//CLK底电平<br />&nbsp;&nbsp;HC595_HC166_CLK_Hi();&nbsp;//CLK高电平<br />&nbsp;&nbsp;HC166_SL_Hi();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//cp高电平<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;for(i&nbsp;=&nbsp;0,&nbsp;set&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt&nbsp;8;i&nbsp;++)//依次读取锁存的8位数据<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;&lt&lt=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;GPIOPinRead(GPIO_PORTA_BASE&nbsp;,&nbsp;GPIO_PIN_4)&nbsp;&nbsp;==&nbsp;&nbsp;0x00&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;如果PA4为低电平<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;++;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;HC595_HC166_CLK_Lo();&nbsp;//CLK底电平<br />&nbsp;&nbsp;&nbsp;&nbsp;HC595_HC166_CLK_Hi();&nbsp;//CLK高电平//第8个脉冲将SER发送出来<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;switch(set)&nbsp;//读取扫描值&nbsp;<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0x00:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k=0x00;&nbsp;&nbsp;break;&nbsp;//<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;K_Run:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k=0x01;&nbsp;&nbsp;break;&nbsp;//GetRun<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;K_Stop:&nbsp;&nbsp;&nbsp;&nbsp;k=0x02;&nbsp;&nbsp;break;&nbsp;//GetStop<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;K_Down:&nbsp;&nbsp;&nbsp;&nbsp;k=0x03;&nbsp;&nbsp;break;&nbsp;//GetDown<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;K_Jog:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k=0x04;&nbsp;&nbsp;break;&nbsp;//GetJog<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;K_Shif:&nbsp;&nbsp;&nbsp;&nbsp;k=0x05;&nbsp;&nbsp;break;&nbsp;//GetShif<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;K_Up:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k=0x06;&nbsp;&nbsp;break;&nbsp;//GetUp<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;K_Enter:&nbsp;&nbsp;&nbsp;k=0x07;&nbsp;&nbsp;break;&nbsp;//GetEnter<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;K_Mode:&nbsp;&nbsp;&nbsp;&nbsp;k=0x08;&nbsp;&nbsp;break;&nbsp;//GetMode<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;K_Enter+K_Up:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k=0x09;&nbsp;&nbsp;break;&nbsp;//组合键K_Enter+K_Up<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;K_Enter+K_Down:&nbsp;&nbsp;&nbsp;&nbsp;k=0x10;&nbsp;&nbsp;break;&nbsp;//组合键K_Enter+K_Down<br />&nbsp;&nbsp;&nbsp;&nbsp;default:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k=0x00;&nbsp;&nbsp;break;&nbsp;//点亮LED2<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;return&nbsp;k;<br />}
 楼主| avocationA 发表于 2009-3-14 13:19 | 显示全部楼层

郁闷 问题是随机

/******************************************************************************<br /><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;【显示部分程序】<br /><br />******************************************************************************/<br /><br /><br /><br />LED&nbsp;&nbsp;&nbsp;&nbsp;LedDat=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//结构体定义及初始化<br />{<br />//位数|闪烁位|小数点|正负号|单位|缓存|闪烁计数器<br />&nbsp;&nbsp;&nbsp;&nbsp;4,&nbsp;&nbsp;&nbsp;&nbsp;1,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1,&nbsp;&nbsp;&nbsp;&nbsp;1,&nbsp;&nbsp;&nbsp;123,&nbsp;&nbsp;&nbsp;0<br />};&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//定义数据结构<br /><br /><br /><br />/***************************<br />【函数】:DataOut(void)<br />【功能】:io设定<br />【参数】:无<br />***************************/<br />void&nbsp;DataOut(unsigned&nbsp;char&nbsp;nValue)<br />{<br />&nbsp;int&nbsp;i;<br />&nbsp;for(i&nbsp;=&nbsp;0;i&nbsp;&lt&nbsp;8;i++)<br />&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((nValue&nbsp;&&nbsp;0x80)&nbsp;==&nbsp;0x80)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HC595_DATA_Hi();//输出高电平<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HC595_DATA_Lo();//输出低电平<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;HC595_HC166_CLK_Hi();//时钟高电平,上升沿有效<br />&nbsp;&nbsp;HC595_HC166_CLK_Lo();//时钟低电平<br />&nbsp;&nbsp;nValue&nbsp;&lt&lt=&nbsp;1;&nbsp;&nbsp;<br />&nbsp;}<br />&nbsp;return;<br />}<br /><br />&nbsp;/***************************<br />【函数】:seg[16]<br />【功能】:显示段码<br />【参数】:无<br />***************************/<br /><br />unsigned&nbsp;char&nbsp;seg[17+10]=<br />{<br />&nbsp;&nbsp;SEG_0,SEG_1,&nbsp;&nbsp;SEG_2,SEG_3,/*&nbsp;0&nbsp;1&nbsp;2&nbsp;3*/<br />&nbsp;&nbsp;SEG_4,SEG_5,&nbsp;SEG_6,SEG_7,&nbsp;/*&nbsp;4&nbsp;5&nbsp;6&nbsp;7&nbsp;*/<br />&nbsp;&nbsp;SEG_8,SEG_9,&nbsp;SEG_A,SEG_B,&nbsp;/*&nbsp;8&nbsp;9&nbsp;A&nbsp;B&nbsp;*/<br />&nbsp;&nbsp;SEG_C,SEG_D_,SEG_E,SEG_F,&nbsp;/*&nbsp;C&nbsp;D&nbsp;E&nbsp;F&nbsp;*/<br />&nbsp;&nbsp;SEG_,&nbsp;SEG____,SEG_P,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;.&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;P*/<br />&nbsp;&nbsp;s_a,&nbsp;&nbsp;s_b,&nbsp;&nbsp;&nbsp;s_c,&nbsp;&nbsp;s_d,<br />&nbsp;&nbsp;s_e,&nbsp;&nbsp;s_f,&nbsp;&nbsp;&nbsp;s_g,&nbsp;&nbsp;s_h<br />};<br /><br />/***************************<br />【函数】:DigTab[6]<br />【功能】:LED位扫描<br />【参数】:无<br />***************************/<br />unsigned&nbsp;char&nbsp;DigTab[7]&nbsp;=&nbsp;&nbsp;//&nbsp;&nbsp;定义数码管位选数据<br />{<br />&nbsp;&nbsp;0x01,&nbsp;0x02,&nbsp;0x04,&nbsp;0x08,&nbsp;0x10,&nbsp;0x20,&nbsp;0x00<br />};<br /><br /><br /><br /><br />/***************************<br />【函数】:Show_Led_Bit(void)<br />【功能】:io设定<br />【参数】:DigValue//显示位数,&nbsp;SegValue//显示值<br />***************************/<br />void&nbsp;&nbsp;Show_Led_Bit(unsigned&nbsp;char&nbsp;DigValue,unsigned&nbsp;char&nbsp;SegValue)<br />{<br />&nbsp;&nbsp;HC595_RCK_Lo();//清除锁存信号<br />&nbsp;&nbsp;DataOut(DigTab[DigValue]);<br />&nbsp;&nbsp;DataOut(~seg[SegValue]);<br />&nbsp;&nbsp;HC595_RCK_Hi();//给锁存信号,共送了16位数据&nbsp;&nbsp;高8位是&nbsp;扫描数据&nbsp;低8位是段码&nbsp;&nbsp;&nbsp;<br />}<br /><br />/***************************<br />【函数】:unsigned&nbsp;int&nbsp;Dec_Bcd()//<br />【功能】:十进制转BCD<br />【参数】:*p_DecValue十进制地址&nbsp;&nbsp;*p_BcdValue&nbsp;BCD地址<br />***************************/<br />void&nbsp;Dec_Bcd(unsigned&nbsp;int&nbsp;*p_DecValue,unsigned&nbsp;char&nbsp;*p_BcdValue)<br />{<br />&nbsp;&nbsp;*p_BcdValue&nbsp;=&nbsp;*p_DecValue&nbsp;/&nbsp;10000;<br />&nbsp;&nbsp;p_BcdValue++;<br />&nbsp;&nbsp;*p_BcdValue&nbsp;=&nbsp;*p_DecValue&nbsp;%&nbsp;10000&nbsp;/&nbsp;1000;<br />&nbsp;&nbsp;p_BcdValue++;<br />&nbsp;&nbsp;*p_BcdValue&nbsp;=&nbsp;*p_DecValue&nbsp;%&nbsp;1000&nbsp;/&nbsp;100;<br />&nbsp;&nbsp;p_BcdValue++;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;*p_BcdValue&nbsp;=&nbsp;*p_DecValue&nbsp;%&nbsp;100&nbsp;/&nbsp;10;<br />&nbsp;&nbsp;p_BcdValue++;<br />&nbsp;&nbsp;*p_BcdValue&nbsp;=&nbsp;*p_DecValue&nbsp;%&nbsp;10;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />/***************************<br />【函数】:Show_Led_5(void)//5位数码管<br />【功能】:显示LED_BUFF的数据<br />【参数】:根据SegValue&nbsp;显示位数,显示数据<br />***************************/<br />void&nbsp;&nbsp;Show_Led_5(unsigned&nbsp;char&nbsp;Led_Bit,unsigned&nbsp;int&nbsp;Led_Value)<br />{&nbsp;<br />&nbsp;&nbsp;unsigned&nbsp;char&nbsp;DispBuf[5];<br />&nbsp;&nbsp;//unsigned&nbsp;char&nbsp;i,j,k=0;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;HC595_G_Lo();//L&nbsp;PCLK时钟低电平开595显示<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;Dec_Bcd(&Led_Value,DispBuf);//转换成BCD码<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;/*<br />&nbsp;&nbsp;for(i=0,j=0,k=0;i&lt5;i++)//检测数码管位数<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(DispBuf&gt0x00)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j++;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(j&gt0)//如果高位大于0则后面0有效<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k++;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;*/<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;switch(Led_Bit)&nbsp;<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0:&nbsp;Show_Led_Bit(6,DispBuf[0]);break;&nbsp;//close&nbsp;show<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;1:&nbsp;Show_Led_Bit(4,DispBuf[4]);break;&nbsp;//show1个LED<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;2:&nbsp;Show_Led_Bit(3,DispBuf[3]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Show_Led_Bit(4,DispBuf[4]);break;&nbsp;//show2个LED<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;3:&nbsp;Show_Led_Bit(2,DispBuf[2]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Show_Led_Bit(3,DispBuf[3]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Show_Led_Bit(4,DispBuf[4]);break;&nbsp;//show3个LED<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;4:&nbsp;Show_Led_Bit(1,DispBuf[1]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Show_Led_Bit(2,DispBuf[2]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Show_Led_Bit(3,DispBuf[3]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Show_Led_Bit(4,DispBuf[4]);break;&nbsp;//show4个LED<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;5:&nbsp;Show_Led_Bit(0,DispBuf[0]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Show_Led_Bit(1,DispBuf[1]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Show_Led_Bit(2,DispBuf[2]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Show_Led_Bit(3,DispBuf[3]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Show_Led_Bit(4,DispBuf[4]);break;&nbsp;//show5个LED<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;default&nbsp;:&nbsp;break;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;HC595_G_Hi();//H&nbsp;PCLK时钟高电平关595显示&nbsp;<br />&nbsp;&nbsp;<br />}<br /><br /><br />/***************************<br />【函数】:OnOFF_Led_Bit(void)<br />【功能】:关显示位数<br />【参数】:根据SegValue&nbsp;关显示位数<br />***************************/<br />void&nbsp;&nbsp;OnOFF_Led_Bit(unsigned&nbsp;char&nbsp;LedBit_Value)<br />{&nbsp;<br />&nbsp;&nbsp;switch(LedBit_Value)<br />&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0:&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;1:&nbsp;DigTab[4]=0x00;break;&nbsp;//close数码管1<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;2:&nbsp;DigTab[3]=0x00;break;&nbsp;//close数码管2&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;3:&nbsp;DigTab[2]=0x00;break;&nbsp;//close数码管3&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;4:&nbsp;DigTab[1]=0x00;break;&nbsp;//close数码管4&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;5:&nbsp;DigTab[0]=0x00;break;&nbsp;//close数码管5<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;6:&nbsp;DigTab[0]=0x00;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DigTab[1]=0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DigTab[2]=0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DigTab[3]=0x00;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DigTab[4]=0x00;break;&nbsp;&nbsp;//close&nbsp;5数码管<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;7:&nbsp;DigTab[4]=0x10;break;&nbsp;//open数码管1&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;8:&nbsp;DigTab[3]=0x08;break;&nbsp;//open数码管2&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;9:&nbsp;DigTab[2]=0x04;break;&nbsp;//open数码管3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;10:&nbsp;DigTab[1]=0x02;break;&nbsp;//open数码管4&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;11:&nbsp;DigTab[0]=0x01;break;&nbsp;//open数码管5&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;12:&nbsp;DigTab[4]=0x10;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DigTab[3]=0x08;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DigTab[2]=0x04;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DigTab[1]=0x02;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DigTab[0]=0x01;break;&nbsp;//open5数码管<br />&nbsp;&nbsp;&nbsp;&nbsp;default&nbsp;:&nbsp;break;<br />&nbsp;&nbsp;}<br />}<br /><br />/***************************<br />【函数】:Show_LedRadix(void)//5位数码管<br />【功能】:显示小数点<br />【参数】:根据Led_Radix显示小数点<br />***************************/<br />void&nbsp;&nbsp;Show_LedRadix(unsigned&nbsp;char&nbsp;Led_Radix)<br />{&nbsp;<br />&nbsp;HC595_G_Lo();//L&nbsp;PCLK时钟低电平开595显示<br />&nbsp;&nbsp;switch(Led_Radix)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0:&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//去功能<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;1:&nbsp;Show_Led_Bit(4,16);break;&nbsp;//show1小数点&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;2:&nbsp;Show_Led_Bit(3,16);break;&nbsp;//show2小数点&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;3:&nbsp;Show_Led_Bit(2,16);break;&nbsp;//show3小数点&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;4:&nbsp;Show_Led_Bit(1,16);break;&nbsp;//show4小数点&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;5:&nbsp;Show_Led_Bit(0,16);break;&nbsp;//show5小数点&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;default&nbsp;:&nbsp;break;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;HC595_G_Hi();//H&nbsp;PCLK时钟高电平关595显示&nbsp;<br />}<br /><br />/***************************<br />【函数】:Show_LedSign_P(void)<br />【功能】:显示P/负号<br />【参数】:根据Led_Sign_P&nbsp;显示<br />***************************/<br />void&nbsp;&nbsp;Show_LedSign_P(unsigned&nbsp;char&nbsp;Led_Sign_P)<br />{&nbsp;<br />&nbsp;&nbsp;HC595_G_Lo();//L&nbsp;PCLK时钟低电平开595显示<br />&nbsp;&nbsp;switch(Led_Sign_P)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0:&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//去功能<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;1:&nbsp;Show_Led_Bit(0,17);break;&nbsp;//show&nbsp;&nbsp;-&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;2:&nbsp;Show_Led_Bit(0,18);break;&nbsp;//show&nbsp;&nbsp;p&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;default&nbsp;:&nbsp;break;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;HC595_G_Hi();//H&nbsp;PCLK时钟高电平关595显示&nbsp;<br />}<br /><br />/***************************<br />【函数】:Show_LedUnit(void)<br />【功能】:显示单位<br />【参数】:根据Led_Unit&nbsp;显示<br />***************************/<br />void&nbsp;&nbsp;Show_LedUnit(unsigned&nbsp;char&nbsp;Led_Unit)<br />{&nbsp;<br />&nbsp;&nbsp;&nbsp;HC595_G_Lo();//L&nbsp;PCLK时钟低电平开595显示<br />&nbsp;&nbsp;switch(Led_Unit)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0:&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//去功能<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;4:&nbsp;Show_Led_Bit(5,19);break;&nbsp;//V<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;3:&nbsp;Show_Led_Bit(5,20);break;&nbsp;//A&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;2:&nbsp;Show_Led_Bit(5,21);break;&nbsp;//Hz&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;5:&nbsp;Show_Led_Bit(5,22);break;&nbsp;//正反<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;6:&nbsp;Show_Led_Bit(5,23);break;&nbsp;//POWER&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;1:&nbsp;Show_Led_Bit(5,24);break;&nbsp;//RUN&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;default&nbsp;:&nbsp;break;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;HC595_G_Hi();//H&nbsp;PCLK时钟高电平关595显示&nbsp;<br />}<br />/***************************<br />【函数】:void&nbsp;Show_LedMumeral(void)<br />【功能】:主循环或者定时中断调用<br />【参数】:flash_led//显示闪烁标志位<br />【备注】://LedDat.FlashTime为Char型最大为255<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//则0--&nbsp;&nbsp;=255;<br />***************************/<br />void&nbsp;Show_LedMumeral()<br />{&nbsp;&nbsp;&nbsp;<br />&nbsp;unsigned&nbsp;char&nbsp;Show_LedMumeral_temp1=LedDat.FlashBit;//临时变量<br />&nbsp;if(LedDat.FlashBit)<br />&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;if(LedDat.FlashTime&gt210)&nbsp;&nbsp;//延时到<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Show_Led_5(LedDat.ShowBit,LedDat.ShowBuff);//显示数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Show_LedRadix(LedDat.Radix);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示小数点<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Show_LedSign_P(LedDat.Sign_P);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示负号和P<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OnOFF_Led_Bit(LedDat.FlashBit);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//关闭显示位<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LedDat.FlashTime--;<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;<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Show_Led_5(LedDat.ShowBit,LedDat.ShowBuff);//显示数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Show_LedRadix(LedDat.Radix);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示小数点<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Show_LedSign_P(LedDat.Sign_P);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示负号或P<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OnOFF_Led_Bit(Show_LedMumeral_temp1+=6);&nbsp;&nbsp;&nbsp;//开显示位<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LedDat.FlashTime--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;else<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Show_Led_5(LedDat.ShowBit,LedDat.ShowBuff);//显示数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Show_LedRadix(LedDat.Radix);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示小数点<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Show_LedSign_P(LedDat.Sign_P);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示负号或P<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;Show_LedUnit(LedDat.Unit);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//显示单位<br />&nbsp;}<br /><br /><br /><br /><br />
 楼主| avocationA 发表于 2009-3-14 13:23 | 显示全部楼层

中断服务函数

/*&nbsp;&nbsp;TimerB的中断服务函数&nbsp;&nbsp;*/<br />void&nbsp;&nbsp;Timer0B_ISR(void)<br />{<br />&nbsp;TimerIntClear(T0_B_INT_TIMEOUT);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;清除TimerB超时中断,重要!&nbsp;*/<br />&nbsp;KeyBoard();//键盘扫描<br />&nbsp;Show_LedMumeral();//LED显示<br />}
 楼主| avocationA 发表于 2009-3-14 13:29 | 显示全部楼层

按SHIF后 前选定位会丢失(即无显)

/***************************<br />【函数】:Shif(void)<br />【功能】:右移选定位<br />【参数】:无<br />***************************/<br />void&nbsp;Menushif(void)<br />{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;LedDat.FlashBit--;<br />&nbsp;&nbsp;if(LedDat.FlashBit&lt1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;LedDat.FlashBit=LedDat.ShowBit;<br />&nbsp;&nbsp;}<br /><br />}<br /><br /><br /><br />int&nbsp;&nbsp;main(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;jtagWait();&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;防止JTAG失效,重要!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;IoInit();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;IO始化&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;timer0Init();&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;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;for(;;)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Show_Led_5(3,4321);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/**/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch(JB_KeyData())&nbsp;//读取扫描值&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Shif_Key:&nbsp;&nbsp;Menushif();&nbsp;break;&nbsp;//右移选定位<br /><br /><br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Up_Key:&nbsp;&nbsp;&nbsp;&nbsp;LedDat.ShowBuff=6;&nbsp;&nbsp;break;&nbsp;//点亮LED1<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Down_Key_Dub:&nbsp;&nbsp;LedDat.ShowBuff=65535;&nbsp;&nbsp;break;&nbsp;//点亮LED1&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;Up_Key_Dub:&nbsp;&nbsp;&nbsp;&nbsp;LedDat.ShowBuff=12345;&nbsp;&nbsp;break;&nbsp;//点亮LED1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;EnterUp_Key:&nbsp;LedDat.ShowBuff=99;&nbsp;&nbsp;break;&nbsp;//点亮LED1&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;EnterDown_Key:&nbsp;&nbsp;LedDat.ShowBuff=100;&nbsp;&nbsp;break;&nbsp;//点亮LED1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;case&nbsp;0X00:&nbsp;ledshow_buf=1000;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;//点亮LED2<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}
 楼主| avocationA 发表于 2009-3-14 13:32 | 显示全部楼层

用IAR MCU LM3S1138

  
 楼主| avocationA 发表于 2009-3-14 14:22 | 显示全部楼层

庆祝下问题解决了!

OnOFF_Led_Bit(12);&nbsp;&nbsp;&nbsp;//开显示位
 楼主| avocationA 发表于 2009-3-14 15:04 | 显示全部楼层

上次 写个菜单很头痛500多个参数!

每个参数&nbsp;的单位&nbsp;&nbsp;不同&nbsp;<br />位数不同,<br />小数点位不同<br /><br />排头有&nbsp;正负号字母号<br /><br />而且&nbsp;参数&nbsp;与&nbsp;参数&nbsp;间&nbsp;&nbsp;有相关性<br />还有排斥性<br />还有隐蔽参数!<br /><br />程序写到后来自己都犯晕了,,,,,,<br /><br />NND&nbsp;所以俺这次.......显示写成类似填表&nbsp;&nbsp;格<br /><br />匠人&nbsp;有空可要帮帮俺啊!!!!!<br /><br /><br /><br /><br />LED&nbsp;&nbsp;&nbsp;&nbsp;LedDat=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//结构体定义及初始化<br />{<br />//位数|闪烁位|小数点|正负号|单位|缓存|闪烁计数器<br />&nbsp;&nbsp;&nbsp;&nbsp;3,&nbsp;&nbsp;&nbsp;&nbsp;1,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1,&nbsp;&nbsp;&nbsp;&nbsp;1,&nbsp;&nbsp;&nbsp;123,&nbsp;&nbsp;&nbsp;0<br />};&nbsp;&nbsp;&nbsp;&nbsp;
kbgyzp 发表于 2009-3-14 19:57 | 显示全部楼层

才500多个就头大啊?

&nbsp;&nbsp;&nbsp;&nbsp;我的10000多个参数,可读写的,只读的,只写的,存FLASH的,存E2PROM的,内存的,无符号的,有符号的,浮点的,还有单位,有时显示一组数据还要照应前后的,因为要保证单位一致。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;还有上电恢复的,掉电保存的,看门狗复位不能清零的,要清零的,改变时还要判断大小的,还要整组判断大小的,比如时间设置,不能让设2月31号吧。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;还有双备份的,很重要的不能丢失,且要万无一失,这就牵扯哪个是对的问题。<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;显示页很复杂,一般情况就不说了,设置参数时也很复杂,不能给用户犯错误的机会,单个数字闪动了,多个数字闪动了,大小是否符合了。。。。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;功能实现我只用了一个星期,光这些数据处理就用了好几个月,因为要保证可以合理调用,累啊。。。<br />
 楼主| avocationA 发表于 2009-3-14 20:14 | 显示全部楼层

LS能不能讲讲思路!!!

LS能不能讲讲思路啊!!!<br />俺写着写着就变成一个乱的毛线团了!!!!!!!!!!!!!!!!!!!!&nbsp;
xwj 发表于 2009-3-14 20:24 | 显示全部楼层

呵呵,LZ那情况,只能说你自己没规划好:-)

  
 楼主| avocationA 发表于 2009-3-15 00:13 | 显示全部楼层

是啊 当时赶时间 只 能先完成任务先 !!现在不同时间很充裕

是啊&nbsp;当时赶时间&nbsp;只&nbsp;能先完成任务先&nbsp;!!现在不同时间很充裕
您需要登录后才可以回帖 登录 | 注册

本版积分规则

123

主题

935

帖子

0

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