单片机 一个按钮设置按一下加1 另一个按键按一下减1 求帮忙编写程序

不好意思 能不能用汇编语言 我不会翻译C语言

#include<reg52>
#define uchar unsigned char
#define uint unsigned int
sbit K1 = P1^4;
sbit K2 = P1^5;
uchar data K1state;
uchar data K2state;
uint  data num,ntmp;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x06f,0x77,0x7c,0x39,0x5e,0x79,0x71} ;
uchar data showIndex,indexTmp;
uchar data  W[8];
void delay(uint z)
{
    uint x,y;
    for(x=z;x>0;x--)
        for(y=110;y>0;y--);//能使之延时接近1毫秒就成 无需精确
}
void main()
{
  K1state = 0xFF;
  K2state = 0xFF;
  num = 0;
  while(1)
  {
    delay(1);//每毫秒轮询一回
    //移位法,延时防抖
    K1state = (K1state<<1);
    K2state = (K2state<<1);
    if(K1) K1state++;
    if(K2) K2state++;
    //检查开关状态
    if(K1state==0x80) num++;
    if(K2state==0x80) num--;
    for(indexTmp=0,ntmp = num;indexTmp<=7;indexTmp++)
    {
      W[indexTmp] = num%10;
      num /=10;
    }
    P0 = (0x01<<showIndex);//位选
    P2 = table[W[showIndex]];//段选
    showIndex++;
    if(showIndex>=8)
      showIndex=0;
  }
}

看了你的全图,修改后了,用Keil uVision 3或4都可以,编译后可以查看对应的汇编代码

程序稍大一点的,不会有人用汇编来给你蘑菇,汇编设计写编码太慢了,开发代价不值得

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-05-15
学单片机 先学C语言 学深了 再学汇编 这样更好上手
第2个回答  2013-05-15
sbit k=P1^5;
sbit m=P1^6;
int p=0;
while(1)
{
if(k==0)
p++;
else if(m==0)
p--;
}追问

不好意思 我没问清楚 能不能用汇编语言 我不会翻译C语言

追答

你可以混合编程嘛

第3个回答  2013-05-15
求剩余下面的图 做边接到什么了???追问

单片机 一个按钮设置按一下加1 另一个按键按一下减1 求帮忙编写程序
y; for(x=z;x>0;x--) for(y=110;y>0;y--);\/\/能使之延时接近1毫秒就成 无需精确}void main(){ K1state = 0xFF; K2state = 0xFF; num = 0; while(1) { delay(1);\/\/每毫秒轮询

...是按一个键就加一,按另外一个就减一。求大神帮忙设计
如果是windows上程序。单词按键判断ASCII码,然后变量值++,--就可以了。include <stdio.h>#include <conio.h>#include <windows.h>#define KEYA 61\/\/按键盘'+'键(非小键盘)#define KEYM 45\/\/按键盘'-'键(非小键盘)int main(){ int key,num=0; while(1) { system("cls...

您能给写一个单片机语言么? 两个按钮 一个加一一个减一 用一个数码管...
while(1){ P0=dm[jw];button(); \/\/LED显示 } } 这个就是完整版的控制一个LED的c语言程序,P0接八位数码管(七位也行),我用的共阳极管,P3的0和1端口(两个低位)接2个按钮,采纳后求积分啊。。。

按键点灯程序,按一下按键灯亮(一直亮),再按一下灭,51单片机。
1、首先打开编程软件Keil uVision4,新建一个工程文件,在菜单栏中Project—— New uVision Project..。2、然后选择单片机型号是 Atmel 公司的 AT89c52,单击OK。3、再单击工具栏上新建按钮,新建一个文档,然后再点击保存,输入保存的路径,输入名字。4、右键单击将这个文件添加到到工程文件夹中。5、打...

以AT89C51单片机为核心,设计一个二进制计数器
直接赋值,就是二进制显示:比如:uchar dat = 3;P0 = dat; \/\/LED灯二进制方式显示数据dat.

单片机中定义了开关和按钮,三个按钮可以分别加一、减一、清零,
方案一:你可以用eint0做开始计数和停止计数的功能,用一个标志位区分。把eint1留出来做清零功能。方案二:eint1中再加一个功能就是清零,这时候可以检测eint1按键的时间。实例代码:void ex1()interrupt 2 \/\/外部中断1 { delay_ms();\/\/延时一段时间 if(p1^2==0)\/\/检测外部中断引脚的电平,我...

c51单片机按键控制数码管循环加1、减1电路设计
设计程序之前,要先确定电路。我的百度空间,有这样的电路和程序,可供参考。

单片机ATc52,实现按下key1,led1亮,再按下key2,led2亮led1灭,求具体程序...
另外一边就要led=1才亮。以下程序为一边接高电平,单片机引脚给0亮给1灭 include <reg52.h> sbit led=P1^0;sbit key1=P1^1;sbit key2=P1^2;void main(){ led=1;\/\/初始化输出,可初始化=0 while(1){ if(key1==0){ led=0;\/\/亮 } if(key2==0){ led=1;\/\/灭 } } } ...

51单片机怎么用c语言写一个按钮控制一个led的闪烁,按一下开始闪烁,再按...
void main(){ P01=P02=0;flash=0;led=0;while(1){ scankey();ledflash();} } void scankey()\/\/键盘扫描 { P01=1;\/\/行线给1 if(P02)\/\/如果P02也是1则说明接通 { delay(10);\/\/去抖动10MS if(P02)\/\/再次确定按键按下 { while(P02){flash=flash}\/\/按住按键的动作 flash=~flash;...

单片机如何用8个LED灯按ASCII码表示0~99,用一个按钮控制,按一下就加1...
8个LED灯代表一个char型数据的8位?如果是 很简单 a=key_scan();if(a==0){b++;if(b>99)b=0;P0=b;}

相似回答