51单片机,用独立键盘控制静态数码管显示1-8,自学的,错误连篇,求大神帮忙

作者&投稿:严肺 (若有异议请与网页底部的电邮联系)
51单片机 独立键盘控制静态数码管~

定义开关引脚
sbit k1=P1^0;
sbit k2=P1^1;
依次类推,向下定义

void main()
{
while(1)

if(k1==0) P2=0xC0; //显示0的代码
if(k2==0) P2=***; //显示0的代码
依次类推}

希望对你有帮助。

一位共阳数码管接在P0口,为静态显示。P3口接有8个独立式按键,按键为K1~K8,按键8个按键中的任意一个,数码管则显示出按键编号。仿真图如下,这是按下K6时显示6。

程序功能能否实现你自己验证,先把错误给你改了,已编译通过。

#include<reg51.h>
#include<intrins.h>
#define dig P2
#define uint unsigned int
#define uchar unsigned char code

uchar number[10]={0xc0,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

sbit K1=P0^0;
sbit K2=P0^1;//10
sbit K3=P0^2;
sbit K4=P0^3;
sbit K5=P0^4;
sbit K6=P0^5;
sbit K7=P0^6;
sbit K8=P0^7;

void anjian();//这里没分号
void yanshi(uint nms);
void main()//20
{
P0=0xff;//初始化
anjian();//这里多void 少分号
}

/**********************************
按键程序
***********************************/ //30
void anjian()
{
uint i;//这以后的错误是变量i没定义
if(K1==0)
{
yanshi(10);
if(K1==0)
{
dig=number[1];
while((K1==0)&&(i<50))
{//40
yanshi(10);
i++;
}
i=0;
}
}
if(K2==0)
{
yanshi(10);
if(K2==0)//50
{
dig=number[2];
while((K2==0)&&(i<50))
{
yanshi(10);
i++;
}
i=0;
}
}//60
if(K3==0)
{
yanshi(10);
if(K3==0)
{
dig=number[3];
while((K3==0)&&(i<50))
{
yanshi(10);
i++;//70
}
i=0;
}
}
if(K4==0)
{
yanshi(10);
if(K4==0)
{
dig=number[4];//80
while((K4==0)&&(i<50))
{
yanshi(10);
i++;
}
i=0;
}
}
if(K5==0)
{//90
yanshi(10);
if(K5==0)
{
dig=number[5];
while((K5==0)&&(i<50))
{
yanshi(10);
i++;
}
i=0;//100
}
}
if(K6==0)
{
yanshi(10);
if(K6==0)
{
dig=number[6];
while((K6==0)&&(i<50))
{//110
yanshi(10);
i++;
}
i=0;
}
}
if(K7==0)
{
yanshi(10);
if(K7==0)//130
{
dig=number[7];
while((K7==0)&&(i<50))
{
yanshi(10);
i++;
}
i=0;
}
}//140
if(K8==0)
{
yanshi(10);
if(K8==0)
{
dig=number[8];
while((K8==0)&&(i<50))
{
yanshi(10);
i++;//150
}
i=0;
}
}
}

/**********************************
延时子程序
***********************************/
void yanshi(uint xms)//160
{
uint a,b;
for(a=xms;a>0;a--)
for(b=110;b>0;b--);
}

报一堆错不要怕,先搞定第一个错再rebuild, 也许很多后面的错就不存在了。

你先把下面这几行中
sbit K8=P0^7;
void anjian()
void yanshi(uint nms);
改为
sbit K8=P0^7;
void anjian(); // 这里漏了个分号
void yanshi(uint nms);
然后编译,报错的话,永远先找第一个错

加分号,还要对按键程序宏定义


c51单片机:两个独立按键控制一个led,k1按下松开led闪烁,k2按下松开le...
0这个口sbit k1=P2^1;sbit k2=P2^2;void delay(u16 i){while(i--);}\/\/一个延时程序void main(){if(k1==1)while(1){led=1;delay(50000); \/\/大约延时450msled=0;if(k2==1)break;}led=0;}思路很简单,就是用检测的方法去扫描相应的按键是否被触发,然后执行相应的子程序。

...求问用一个独立按键,采用外部中断的方法如何实现暂停,开始。_百度...
刚刚为你编写的 已经在单片机上测试成功 原理是,按键第一次被按下后,nn为1,程序一直在中断里面死循环 这样其它指令就暂停了,而中断的原理既是,从哪断开的,就回到那里 在这个死循环中,检测按键时候又被按下 按键又按下后,nn变为0,死循环的条件不满足 ...

51单片机,用一个IO口模拟一个脉冲信号,然后用一个独立按键控制这个脉 ...
51单片机,用一个IO口模拟一个脉冲信号,然后用一个独立按键控制这个脉冲信号的启动与停止,可以循环操作 循环操作就是按一下IO口开始输出脉冲,再按一下脉冲停止,再按一下又开始输出脉冲。。。如此往复。脉冲信号我用定时器模拟的,但是用一个按键实在是不会控制启动和停止。初学者,困扰... 循环操作就是按一下IO...

请问51单片机如何用一个独立按键控制程序的暂停和继续
1.你的程序并不能实现显0~9,1357,0246,亮灯和响铃是可以。2.用P1.1按键是可以实现暂停和继续的,并不需要中断。不是什么事都需要中断,好像离开中断就什么也不能做了?3.你想暂停,是随时暂停,还是什么时候暂停?

单片机 怎样用两个独立按键控制一位数码管显示,就是按下其中一个按键...
很简单 比如你定义的数是AA,汇编的是这样写的:MAIN;JB P3.0 ,S1 MOV A, AA INC A MOV AA,A S1:JB P3.1 ,MAIN MOV A, AA DEC A MOV AA,A JMP MAIN C语言的 if(P3^0==0){ delay(50);if(P3^0==1){ aa++;if(aa>=10)aa=0;}} if(P3^1==0){ delay...

若51单片机的PLOD接了1个独立按键,编写程序完成按键检测程序要求每按下...
此程序实现独立按键的检测功能,每次按下按键 key5 时,数码管最后一位显示的数 值加 1,按键同时响蜂鸣器 #include<reg52.h> sbit key5 = P1^4; \/\/独立按键 sbit P3_6 = P3^6; \/\/蜂鸣器控制端口 unsigned char code BitSet[8] = { 0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf,...

用51单片机怎么通过独立按键实现串口通信 比如说你按下一个键S1 在串 ...
用键盘检测程序检测按键按下,检测到按下就用串口向上位机发送字符“1”的ASCII码值,这样在串口调试助手里就可以看到字符“1”了

51单片机,用独立键盘控制静态数码管显示1-8,自学的,错误连篇,求大神帮 ...
sbit K2=P0^1;\/\/10 sbit K3=P0^2;sbit K4=P0^3;sbit K5=P0^4;sbit K6=P0^5;sbit K7=P0^6;sbit K8=P0^7;void anjian();\/\/这里没分号 void yanshi(uint nms);void main()\/\/20 { P0=0xff;\/\/初始化 anjian();\/\/这里多void 少分号 } \/ 按键程序 \/ \/\/30 void anjian(){ ...

修改单片机C语言程序:0~59秒计数器;1个独立按键控制,第一次按按键,实现...
TR0 = 1;ET0 = 1;EA = 1;P0 = table[0];P2 = table[0];while(1) { if(!KEY) { delay(10);if(!KEY) { while (!KEY);flag++;if(flag == 1) TR0 = 0;if(flag == 2) { P0 = table[0];P2 = table[0];flag = 0;aa = 0;num = 0;TR0 = 1;} } } }...

51单片机 使用两个独立按键k1,k2,实现按下一个蜂鸣器响,按下另一个蜂 ...
\/\/假设你是 按开关时为0电平 \/\/具体IO口 自己配置 \/\/简单的就可以这么写 如果要求消抖 我们再讨论while(1){ if(k1==0)beep=1; if(k2==0)beep=0;}

安康市17322228639: 51单片机 独立键盘控制静态数码管 -
苍炎复代: 定义开关引脚 sbit k1=P1^0; sbit k2=P1^1; 依次类推,向下定义 void main() { while(1) { if(k1==0) P2=0xC0; //显示0的代码 if(k2==0) P2=***; //显示0的代码 依次类推} } 希望对你有帮助.

安康市17322228639: 51单片机,用独立键盘控制静态数码管显示1 - 8,自学的,错误连篇,求大神帮忙 -
苍炎复代: 程序功能能否实现你自己验证,先把错误给你改了,已编译通过.#include<reg51.h>#include<intrins.h>#define dig P2#define uint unsigned int#define uchar unsigned char code uchar number[10]={0xc0,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,...

安康市17322228639: 51单片机 ,用C语言编程 通过独立按键控制蜂鸣器和静态数码管, -
苍炎复代: 1.数码管前三位显示一个跑表,从000到999之间以1%秒速度运行,当按下一个独立键盘时跑表停止,松开手后跑表继续运行.(用定时器设计表).code:#include<reg52.h> #define uchar unsigned char #define uint unsigned intsbit key1 = ...

安康市17322228639: 51单片机控制数码管显示时钟,独立按键怎么弄 -
苍炎复代: 独立按键处理起来是非常简单的,一般都是IO口单独控制,所以只需要消抖和判断按键按下抬起状态就好.比如: sbit key=P1^0; if(key==0) {delay(10);if(key==0){keyval=1;while(key==0);} }

安康市17322228639: 51单片机中键盘控制数码管显示有谁会? -
苍炎复代: 用51的话,由于51的I/O没有高阻态,用中断去扫描键盘的话你给的电路图是行不通的(个人意见仅供参考),想要节省CPU开销的话可以用定时器,定时扫描键盘.下面是仿真图和程序.#include#define uint unsigned int #define uchar ...

安康市17322228639: 使用89C51单片机单个按键控制一个数码管,当按键按下时数码管显示1,再次按下时显示0. -
苍炎复代: SBUF=dispcode[num0];//第回1位答 while(!TI); TI=0; led0=0; delay(2); led0=1; SBUF=dispcode[num1];//第2位 while(!TI); TI=0; led1=0; delay(2); led1=1; SBUF=dispcode[num2];//第3位 while(!TI); TI=0; led2=0; delay(2); led2=1;

安康市17322228639: 51单片机按键对数码管的控制 -
苍炎复代: /*----------------------------------------------- 名称:单个共阳数码管动态显示变化数字 内容:通过循环检测P1口按键输入值,然后用数码管输出, 没有按键按下时原值不变 ------------------------------------------------*/#include<reg52.h> //包含头文件,一般情况不...

安康市17322228639: 51单片机c语言设计,按键控制数码管,依次按下显示0到9循环 -
苍炎复代: #include<reg51.h> sbit k1=P1^0; #define uint16 unsigned int #define uchar unsigned char uchar code shuzu[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void delay() { uint16 i=1000;while(i--); } void main() { uchar n ; P2=0xfe; P1=0xff; ...

安康市17322228639: 单片机可以实现一个独立按键控制数码管多个数字吗? -
苍炎复代: 一个按键控制4个数码管显示4个数,最简单的方法是按一次键计一个数,最大数是9999,即可显示四位数.再简单点,按一次键开始自动计数,最大数还是9999,再按一次键停止计数.这样控制程序好写.长按和短按对于初学者有点难,当然了,要能写出程序来是最好啦.

安康市17322228639: 51单片机数码管静态显示 -
苍炎复代: ……if(KEY == 0 && LOCK == 1) { //再多加上一个条件Delay(2);if(KEY == 0) i++;Delay(50);} ……当 LOCK = 0 时,就不检查《加一键》.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网