1. 我用的是51單片機。要求設計一個按鍵顯示的程序。
暈,這么簡單的東西
大概跟你說下吧..
P1口做8個按鍵,P2口接數碼管,P3口接數碼管共陰極,分時復用,讓各數碼管分別顯示就行,再有就是蜂鳴器隨便加哪都行,檢測有按鍵按下就叫一聲...哦啦》。。
2. 給寫個89c52C語言程序 按鍵鍵位操作顯示設計 要求: 單片機上6個按鍵順序為1~6; 按鍵1-
求寫程序!我的是89C52單片機,想用兩個按鍵和一個LED來實現,按下按鍵1點亮LED,按下按鍵2熄滅LED,兩個按鍵另一端是接5V,LED另一端也是接5V。最好配上原理圖。感激不盡
提醒一下:兩個按鍵另一端接5V地!!!!!
#include<reg52.h>
sbit LED = P2^7;
#define ON 0
#define OFF 1
void main()
{
unsigned char keyVal;
while(1)
{
keyVal=P3^0xFF;
if(keyVal)
{
if(keyVal==0x02) LED=ON;
else if(keyVal == 0x20) LED=OFF;
}
}
}
3. 跪求用51單片機編按鍵顯示程序
樓主先要確定電路,然後才能編寫程序。
4. 51單片機鍵盤輸入及顯示程序
你的郵箱?發給你
5. 關於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 加點分貝,嘿嘿*/
6. 用51單片機設計一個由3個按鍵顯示兩位的程序分別是15,25,35。
sbit p1=p1^0;
sbit p2=p1^0;
void main()
{
aa=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1; //開總中斷
ET0=1; //開啟T0中斷
TR0=1; //啟動T0定時器 , 以上是用定時器0.
if(aa==216000) //10800*50=3個小時
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1; //開總中斷
ET1=1; //開啟T1中斷
TR1=1; //啟動T2定時器
if (aa==72000) //1800*50=半小時
//以上是用定時器1.
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
}
void timer0() interrupt 3
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
}
兄弟程序太大了,,我寫了 主函數。其他外圍你自己填寫就可以了。
另外:得用外接的「時間晶元」:1302。開機後,必須對1302進行初始化,然後等待操作者,對1302進行時間設定,然後等待2009-09-24 22:33時刻的到來。然後輸出要求的波形。輸出波形,也要用1302的時間進行控制
( 我只會前面。 1302 是網上一個朋友說的,我也寫出來了,希望對你有幫助。)
7. 設計一個單片機輸入顯示系統,要求每按一下按鍵數碼管顯示數據加1(數碼管初始值為0,9加1 後顯示0)。
程序清單如下:
#include < reg51.h >// 51單片機頭文件
#define uchar unsigned char // 宏定義,用uchar替代無符號字元型
#define uint unsigned int // 宏定義,用uint 替代無符號整數型
sbit Key = P2 ^ 7;
uchar Count = 0;
uchar code DataChar[10] = // 定義數碼管的段碼 '0'~'9'、'-'、' ' 'P'
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
};//延時N毫秒
void DelayNms( uint N ) // 利用x、y作簡單的自減運算,消耗單片機指令周期,達到延時的目的
{
uint x,y;
for( x=N; x>0; x-- )
for( y=110; y>0; y-- );
}
//數碼管顯示 // 顯示方式為動態掃描,視覺暫留原理
void Display( uchar Num ) // *p指向Main函數中的數組ShowNum的首地址
{
P0 = DataChar[ Num ]; // 向P0賦段碼值
DelayNms(2); // 短暫的延時
P0 = 0x00; // 讓數碼管熄滅,否則會造成數字重疊
}
void main( void )
{
while(1)
{
if( Key == 0 )
{
DelayNms(30);
if( Key == 0 )
{
Count += 1;
Count = (Count>9)? 0 : Count;
}
while( !Key );
}
Display( Count );
}
}
(7)單片機按鍵程序與顯示設計擴展閱讀
8051單片機具有如下功能:
8位CPU·4kbytes程序存儲器(ROM) (52為8K)
128bytes的數據存儲器(RAM) (52有256bytes的RAM)
32條I/O口線·111條指令,大部分為單位元組指令
21個專用寄存器
2個可編程定時/計數器·5個中斷源,2個優先順序(52有6個)
一個全雙工串列通信口
外部數據存儲器定址空間為64kB
外部程序存儲器定址空間為64kB
邏輯操作位定址功能·雙列直插40PinDIP封裝
單一+5V電源供電
CPU:由運算和控制邏輯組成,同時還包括中斷系統和部分外部特殊功能寄存器;
RAM:用以存放可以讀寫的數據,如運算的中間結果、最終結果以及欲顯示的數據;
ROM:用以存放程序、一些原始數據和表格;
I/O口:四個8位並行I/O口,既可用作輸入,也可用作輸出
T/C:兩個定時/記數器,既可以工作在定時模式,也可以工作在記數模式;
五個中斷源的中斷控制系統;
一個全雙工UART(通用非同步接收發送器)的串列I/O口,用於實現單片機之間或單片機與微機之間的串列通信;
片內振盪器和時鍾產生電路,石英晶體和微調電容需要外接。最佳振盪頻率為6M—12M。
8. 51單片機 c語言 按鍵和數碼管顯示
#include<reg51.h>
unsignedcharled[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
voidled_display(unsignedcharnum);
unsignedcharkey_scan();
sbitled1=P2^0;
sbitled2=P2^1;
voidmain()
{
unsignedcharled_key;
P1=0;
while(1)
{
led_key=key_scan();
led_display(led_key);
}
}
voidled_display(unsignedcharnum)
{
unsignedcharten,single;
intdelay;
ten=num/10;
single=num%10;
delay=100;
for(delay=200;delay>0;delay--)
{
P0=led[ten];
led1=0;
led1=1;
P0=led[single];
led2=0;
led2=1;
}
}
/////////////////////////////////////////
unsignedcharkey_scan(void)
{
unsignedchartemp,key;
P1=0xfe;
temp=P1&0xf0;
if(temp!=0xf0)
{
switch(temp)
{
case0xe0:key=1;
break;
case0xd0:key=2;
break;
case0xb0:key=3;
break;
case0x70:key=4;
}
returnkey;
}
P1=0xfd;
temp=P1&0xf0;
if(temp!=0xf0)
{
switch(temp)
{
case0xe0:key=5;
break;
case0xd0:key=6;
break;
case0xb0:key=7;
break;
case0x70:key=8;
}
returnkey;
}
P1=0xfb;
temp=P1&0xf0;
if(temp!=0xf0)
{
switch(temp)
{
case0xe0:key=9;
break;
case0xd0:key=10;
break;
case0xb0:key=11;
break;
case0x70:key=12;
}
returnkey;
}
P1=0xf7;
temp=P1&0xf0;
if(temp!=0xf0)
{
switch(temp)
{
case0xe0:key=13;
break;
case0xd0:key=14;
break;
case0xb0:key=15;
break;
case0x70:key=16;
}
returnkey;
}
}
你好!很高興為您解答!我有歡迎採納!!以上傳附件!!
9. 求關於單片機按鍵的程序
void _Key(void)
{
if(!Key) //有按鍵按下
{
Delay(500); 延時
if(!Key) //還是按下狀態,即長擊
{
Disp("2");
}
else //否則就是短擊
{
Disp("1");
}
}
else //沒有按鍵按下
{
Disp("3");
}
}
大概思路是這樣,延遲函數自己掌握,一般還要加消抖(也就是較短的延時後再判斷一次按鍵狀態)
10. 單片機鍵盤顯示電路設計的程序要求輸入64個按鍵,8個LED顯示
一種是採用8行8列組成的按鍵就可以了,實際上是16個開關,但可以實現64個按鍵。具體的看看網上的4*4鍵盤是什麼原理。基礎要自己想。
第二種是採用8255或8155擴展,具體的要自己去看去學。