4724|4

4

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教我设计的按键控制为什么按住jia或jian键后程序会停止? [复制链接]

#include
#define uchar unsigned char
#define uint unsigned int
uchar bb;  //定时器中断次数 。
uchar m;  //个位秒。
uchar tt;  //十位秒。
uchar tt1;  // 个位分。
uchar tt2;  // 十位分。
uchar tt3;  // 没用。
uchar ii;  // 闪烁时间。
uchar shu;  //设置按键 按下的次数 。
uchar code table[]={
0xC0,0xF9,0xA4,0xB0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x77,0x7c,
0x39,0x5e,0x79,0x71};
sbit d=P1^0; //位选。
sbit c=P1^1; //位选。
sbit b=P1^2; //位选。
sbit a=P1^3; //位选。
sbit shezhi=P1^4;   // 设置按键 。
sbit jia=P1^5;      // 加按键。
sbit jian=P1^6;      // 减按键。
sbit e=P2^7;     //小数点。
void delay();    //延时。
void time();     //位选子函数
void key();      //按键判断子函数 。
void init();     //初始化子函数 。
void jinwei();     //进位子函数 。

void main ()
{
init();
while(1)
  {  
   time();
   key();
   jinwei();   
  }
}

void  temp() interrupt 1  //中断服务子函数 。
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
    bb++;
}

void init()  //初始化函数。
{
b=0;
c=0;
d=0;
shezhi=1;
jia=1;
jian=1;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}

void jinwei()  //进位函数。
{
if(bb==15)
{
bb=0;
m++;
}

if(m==10)
{
m=0;
tt++;
}
  
if(tt==6)
{
tt=0;
tt1++;
}
  
if(tt1==10)
{
tt1=0;
tt2++;
}
if(tt2==6)      
tt2=0;  
}

void delay(uint z)  //延时函数。
{
uint x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}

void key()    //按键判断函数 。
{
if(shezhi==0)
delay(5);
if(shezhi==0)  //按键去抖。
{
   TR0=0;   //检测设置键按下,关闭定时器  。
   shu++;    //按键按下次数 。
   if(shu==5)
   {
   shu=0;
   TR0=1;    //设置键循环按下一周,打开定时器   。
   }
  while(!shezhi)
  time();
  }
  
     
if(jia==0)
delay(5);
if(jia==0)
{
if(shu==1) //加按键按下,并且设置键按下一次,则秒个位增加。
  {
  m++;
  if(m==10)
  m=0;
  }
if(shu==2) //加按键按下,并且设置键按下二次,则秒十位增加。
  {
  tt++;
  if(tt==6)
  tt=0;
  }
if(shu==3) //加按键按下,并且设置键按下三次,则分个位增加。
  {
  tt1++;
  if(tt1==10)
  tt1=0;
  }
if(shu==4) //加按键按下,并且设置键按下四次,则分十位增加。
  {
  tt2++;
  if(tt2==6)
  tt2=0;
  }
}
while(!jia)
time();
if(jian==0)
delay(5);
if(jian==0)
{
if(shu==1)
  {
  m--;    //当m=0时,再自减m的值就会变成255,作此判断防止乱码。
  if(m==255)
  m=9;
  }
if(shu==2)
  {
  tt--;
  if(tt==255)
  tt=5;
  }
if(shu==3)
  {
  tt1--;
  if(tt1==255)
  tt1=9;
  }
if(shu==4)
  {
  tt2--;
  if(tt2==255)
  tt2=5;
  }
  }
  
   while(!jian)
  time();
}     

void time()    //位选函数。
{
ii++;
delay(2);
if(ii==20)  
ii=0;    //闪烁时间设置。

a=1;
P2=table[m];
if((shu==1)&&(ii<10))    //ii<10时,P2口关闭,当10 P2=0xff;
delay(5);
a=0;

b=1;
P2=table[tt];
if((shu==2)&&(ii<10))
P2=0xff;
delay(5);
b=0;

c=1;
P2=table[tt1];
e=0;
if((shu==3)&&(ii<10))
P2=0xff;
delay(5);
c=0;

d=1;
P2=table[tt2];
if((shu==4)&&(ii<10))
P2=0xff;
delay(5);
d=0;
}

dsq.rar

13.04 KB, 下载次数: 1

proteus仿真文件

此帖出自单片机论坛

最新回复

调通了么?  详情 回复 发表于 2009-12-24 14:50
点赞 关注
 

回复
举报

6366

帖子

4928

TA的资源

版主

沙发
 
按住按键后,程序不往下走了?
那么松开后呢?
此帖出自单片机论坛
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
松开也不走,下面有proteus仿真文件,可以打开看看
此帖出自单片机论坛
 
 
 

回复

6366

帖子

4928

TA的资源

版主

4
 
看看你的WHILE语句,是不是陷入死循环了
此帖出自单片机论坛
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

5
 
调通了么?
此帖出自单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表