单片机 c语言 按键长按短按,求助:单片机一键长按与短按按键实现的c程序有问题...
單片機一鍵長按與短按按鍵實現的c程序有問題,實在不知道是哪里有問題,請幫助修改一下,謝謝!
功能如下:長按2秒燈全亮(我用的開發板),短按實現流水燈。
程序如下:
#include
#include
#define uchar unsigned char
#define uint unsigned int
uint num,flag,gb,ga;
uchar aa=0xfe;
sbit key1=P3^7;
void delayms(uint);
void delayms(uint x)? ?? ?? ?? ?? ?? ?? ?//延時函數
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void init()? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? //初始化函數
{
TMOD=0x01;? ?? ?? ?? ?? ?? ?? ?? ???//設置定時器0為工作方式1
TH0=(65536-1000)/256;? ?? ?? ?? ?//裝初值1ms一次中斷
TL0=(65536-1000)%256;
EA=1;
ET0=1;
}
void keyscan()
{
if (key1==0)? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???//按鍵去抖
delayms(10);
if (key1==0)? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???//有按鍵按下則啟動定時器
{
TR0=1;
gb=1;}
if((!key1==0)&&(gb==1))
{TR0=0;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?//按鍵彈起則關閉定時器
ga=1;}? ?? ?? ?? ?? ?? ?? ?? ???//ga,gb分別表示按鍵按下和彈起過程有效標志位
if(num>2000)? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?//長按有效
{ flag=1;num=0;}
while(flag==1)
{? ?P1=0;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?//燈全亮
if(key1==0)? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? //有按鍵按下則退出長按程序
flag=3;
}
if((num<2000)&&(ga==1))? ?? ?? ?? ?? ?? ?//短按有效
{flag=2;num=0;}
while(flag==2)? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???//流水燈循環亮
{ P1=aa;
delayms(500);
aa=_crol_(aa,1);
if(key1==0)? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? //有按鍵按下則退出短按程序
flag=3;}
}
void main()
{
init();
while(1)
{
keyscan();
}
}
void T0_time() interrupt 1
{
TH0=(65535-1000)/256;
TL0=(65535-1000)%256;
num++;
}
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的单片机 c语言 按键长按短按,求助:单片机一键长按与短按按键实现的c程序有问题...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言报告程序分析报告,2012C语言程
- 下一篇: c语言i o编程,C 语言输入输出 (I