Ⅰ 关于51单片机的按键和显示的程序问题
#include <reg51.h>
#define uchar unsigned char
#define uinr unsigned int
#define DATA P2^0
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar idata temp[]={0xff,0xff,0xff}
sbit k1=P1^0;
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
sbit led1=P3^2;
sbit led2=P3^3;
sbit led3=P3^4;
void delay(uint t)
{
uint a;
while(t--)
{
for(a=0;a<75;a++)
{;}
}
}
void timer()
{
TMOD=0X01;
TH0=0XFC;
TL0=0X18;
TR0=1;
ET0=1;
EA=1;
}
void display() interrupt 1
{
TH0=0XFC;
TL0=0X18;
led1=1;led2=1;led3=1;
DATA=temp[0];
led1=0;led2=1;led3=1;
DATA=temp[1];
led1=1;led2=0;led3=1;
DATA=temp[2]&0x7f;
led1=1;led2=1;led3=0;
}
void main()
{
uchar number,ks;
timer();
while(1)
{
temp[0]=table[number%10];
temp[0]=table[number%100/10];
temp[0]=table[number%1000/100];
if(k1==0)ks=0;
if(k2==0)ks=1;
switch(ks)
{
case 0:
{
if(k2==0)
{
while(k2==1){;}
number++;
if(number==3)number=2;
}
if(k3==0)
{
while(k2==1){;}
if(number==0)number=1;
number--;
}
}break;
case 1:
{
if(k2==0)
{
while(k2==1){;}
number++;
if(number==19)number=18;
}
if(k3==0)
{
while(k2==1){;}
if(number==0)number=1;
number--;
}
}break;
}
}
}
/*呼,花了我十五分钟,好久没打程序了,注是就不打了,应该看得懂把,不懂再问我拉,我q:745748376 加点分贝,嘿嘿*/
Ⅱ 51单片机独立按键的程序
51单片机独立按键的程序独立按键的程序的话,这个可以从一些一些具体的方面来进行一些查看。
Ⅲ 简单的51单片机键盘C程序
A|=B;
等价于
A=A|B;
是先进行或运算,再把运算结果赋给A,之后的A已经不是原来的A了。
第一个键值判断后,你就键值变量已经被赋予新的值了。
如果正好按的是第一个键则能返回1,
如果不是第一个键按下,但经过
if((keyvalue|=0xfb)!=0xff)这一判断,其中的“keyvalue|=0xfb”就把keyvalue变成0xff了,后面的判断条件自然不会满足。
把这里的一些等于号再去掉试试看。
另外,建议你对于按键扫描程序使用switch
case
语句,这样条理更清晰。
/*按键获取程序*/
unsigned
int
Key()
{
uchar
keyvalue;
keyvalue=P3;
keyvalue|=0xc3;
if((keyvalue|0xc3)==0xff)
{
Delay(10);
if((keyvalue|0xc3)==0xff)
{
return(0);
}
}
else
{
Delay(10);
if((keyvalue|0xc3)!=0xff)
{
if((keyvalue|0xfb)!=0xff)
{
return(1);}
if((keyvalue|0xf7)!=0xff)
{
return(2);}
if((keyvalue|0xef)!=0xff)
{
return(3);}
if((keyvalue|0xdf)!=0xff)
{
return(4);}
}
}
}
Ⅳ 51单片机 C语言按键多功能程序怎么写
长按或短按你可以用定时器来设定时间。时间一到就直接跳出来执行就可以了。想连续按1或2或3次的话你就直接用个变量来当计数器,按一下计数一次就可以了。
Ⅳ 51单片机最有效的按键处理程序
只有更好,没有最好。只有更有效,没有最有效。适合当前项目需要的程序就是合适的程序。针对51单片机,没有一个按键程序是包打天下的。通常的按键扫描程序大致为:
扫描按键 ==>按键去抖(如果去抖过程中按键值变化了就去抖失败,重新扫描按键) ==>得到有效键 ==》可能需要针对长按或重复按键要求做不同处理 ==>等待按键松开
Ⅵ 51单片机独立式按键程序
#include<reg52.h>
unsignedcharID;
sbitk1=P3^7;//定义按键端口
voiddelay()
{
TMOD=0x10;//定时器的工作方式
TH1=0xd8;
TL1=0xf0;
TR1=1;
while(!TF1);//这里错了,是定时器1
TF1=0;
}
voidmain()
{
while(1)
{
if(k1==0)
{
delay();//去抖动
if(k1==0)//检测按键确实按下,进行按键处理
{
ID++;
if(ID==0)
{
ID=0;
}
while(!k1);//这里错了,多余的加了==0
}
}
switch(ID)
{
case0:P1=0x3f;break;
case1:P1=0x06;break;
case2:P1=0x5b;break;
case3:P1=0x4f;break;
case4:P1=0x66;break;
case5:P1=0x6d;break;
case6:P1=0x7d;break;
case7:P1=0x07;break;
case8:P1=0x7f;break;
case9:P1=0x6f;break;
default:break;
}
}
}
Ⅶ 在51单片机中,按一下按键1,执行一个程序功能1,按按键2,执行程序功能2
#include<reg51.h>
#include<intrins.h>
unsigned char fun,led1=0xfe,led2=0x55;
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
void t0isr() interrupt 1
{
TH0=(65536-60000)/256;
TL0=(65536-60000)%256;
switch(fun)
{
case 1:P0=led1;led=_crol_(led1,1);break;
case 2:P0=led1;led=_cror_(led1,1);break;
case 3:P0=~led2;break;
default: break;
}
}
main()
{
TMOD=0x01;
TH0=(65536-60000)/256;
TL0=(65536-60000)%256;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(key1==0)
{
while(key1==0);
fun=1;
}
if(key2==0)
{
while(key2==0);
fun=2;
}
if(key3==0)
{
while(key3==0);
fun=3;
}
}
}
Ⅷ 51单片机如何用一个按键控制一段程序的运行与停止
1、创建项目文件。
6、当按下一个按键时,关闭灯,整个程序运行,再按一次,程序停止。
Ⅸ 51单片机用四个按键做程序
//假设晶振12MHZ,其余都是假设低电平有效
#include "reg51.h"
sbit KEY1=P1^0;前进键
sbit KEY0=P1^1;后退键
sbit KEYL=P1^2;
sbit KEYR=P1^3;
sbit CON1=P2^0;前进控制
sbit CON0=P2^1;后退控制
sbit CONL=P2^2;
sbit CONR=P2^3;
void main(void)
{
P1=P1 | 0X0F;
P2=P1 | 0X0F;
while(1)
{
if(KEY1==0)
{
CON1=0;
}
else CON1=1;
if(KEY0==0)
{
CON0=0;
}
else CON0=1;
if(KEYL==0)
{
CONL=0;
}
else CONL=1;
if(KEYR==0)
{
CONR=0;
}
else CONR=1;
}
}
Ⅹ 51单片机中按键程序用C怎么写
用一个定时器,先赋值一个num,当num=20的时候,LED亮的时间是1s,当按下键,让num+20(12M的晶振)在定义一个a,判断a是否与num相等。这样试试呢....