Ⅰ 關於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相等。這樣試試呢....