找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2438|回复: 4
打印 上一主题 下一主题
收起左侧

谁帮我看这个C语言程序为什么不能实现正常的加减

[复制链接]
跳转到指定楼层
楼主
ID:78064 发表于 2015-4-26 14:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <reg52.h>
#define dataport P0
sbit key_add=P3^3;
sbit key_dec=P3^4;
sbit duan_latch=P2^2;//段锁存
sbit wei_latch=P2^3;//位锁存
unsigned char code duan_ma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0~9显示
unsigned char code wei_ma[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选择
unsigned char temp[8];//临时变量
//函数声明
void delayUs2x(unsigned char t);
void delayMs(unsigned char t);
void display(unsigned char firstbit,unsigned char number);
void Init_timer0(void);
main()
{unsigned int num=0;
key_add=1; //按键输入端口电平置高
key_dec=1;
Init_timer0();
while(1)
{
if(!key_add)
  {
  delayMs(10);
  if(!key_add)
   {
   while(!key_add)
   {if(num<99)
   num++;}
   }
  }
if(!key_dec)
  {
  delayMs(10);
  if(!key_dec)
   {
   while(!key_dec)
   {if(num>0)
   num--;}
   }
  }
temp[0]=duan_ma[num/10];
temp[1]=duan_ma[num%10];
}
}
void delayUs2x(unsigned char t)
{
while(--t);
}

void delayMs(unsigned char t)
{
while(t--)
{
delayUs2x(245);
delayUs2x(245);
}
}
void display(unsigned char firstbit, unsigned char number)
{
static unsigned int i=0;
dataport=0;
duan_latch=1;
duan_latch=0;
dataport=wei_ma[i+firstbit];
wei_latch=1;
wei_latch=0;
dataport=temp[i];
duan_latch=1;
duan_latch=0;
i++;
if(i==number)
i=0;
}
void Init_timer0(void)
{
TMOD|=0x01;
EA=1;
ET0=1;
TR0=1;
}
void timer0_isr(void) interrupt 1
{
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
display(0,8);
}

连到51开发板上,最后的结果是按一下加号键直接跳到99,然后不变。按减号键就从99跳到00,然后不变。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:77716 发表于 2015-4-26 15:18 | 只看该作者
你按键判断while一直在循环,那你的数值不就一直再加,你让他按一次加一把加数值变量放while上面

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:78064 发表于 2015-4-26 15:35 | 只看该作者
逝逝逝 发表于 2015-4-26 15:18
你按键判断while一直在循环,那你的数值不就一直再加,你让他按一次加一把加数值变量放while上面

while是主循环,里面的一直执行。按一下加号键,当加号键未释放,并且显示数字小于99就加1.
回复

使用道具 举报

地板
ID:77716 发表于 2015-4-26 15:53 | 只看该作者
你按键未释放那他就一直加了,你按按键再松开就这一回就够他家好几次了

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:78064 发表于 2015-4-26 16:20 | 只看该作者
逝逝逝 发表于 2015-4-26 15:53
你按键未释放那他就一直加了,你按按键再松开就这一回就够他家好几次了

嗯嗯,我理解了。谢谢你。在while后面加一个分号,按键释放再加1,我刚才是按键按下就一直在加
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表