44鍵盤數碼管顯示課程設計
Ⅰ 單片機簡易計算器課程設計 用4位八段數碼管共陰顯示,4x4鍵盤 發我[email protected]
上網搜搜好了...
Ⅱ 4*4矩陣鍵盤控制四位數碼管顯示單片機C語言程序
#include <intrins.h>
#define uchar unsigned char
#define ROWP P3
#define LINP P2
void Delay(uchar i) {
uchar j;
for(;i>0;i--)
for(j=0;j<112;j++)
_nop_();
}
uchar Keyscan(){
uchar i,j,RLP,num;
for(i=0;i<4;i++){
LINP=(LINP|0xf0)&(~(0x10<<i));
Delay(1);
for(j=0;j<5;j++){
RLP=(ROWP|0x1f)&(~(0x10>>j));
if(ROWP==RLP){
Delay(2);
if(ROWP==RLP)
num=i*5+j+1;
}
}
}
return num;
}
5*4的,稍微修改,就是4*4的
Ⅲ 幫我改成4*4矩陣鍵盤控制 4位共陰極數碼管顯示! 51單片機
#include<reg51.h>
#define uchar unsigned char
uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //0到f
uchar keyval;
uint x;
void delay(uchar a)
{
uchar i,j;
for(i=0;i<a;i++)
for(j=0;j<125;j++);
}
uchar kbscan(void)
{
unsigned char sccode,recode;
P3=0x0f; //發0掃描,列線輸入
if ((P3 & 0x0f) != 0x0f) //有鍵按下
{
delay(20); //延時去抖動
if ((P3&0x0f)!= 0x0f)
{
sccode = 0xef; //逐行掃描初值
while((sccode&0x01)!=0)
{
P3=sccode;
if((P3&0x0f)!=0x0f)
{
recode=(P3&0x0f)|0xf0;
while((P3&0x0f)!=0x0f);//等待鍵抬起
return((~sccode)+(~recode));
}
else
sccode=(sccode<<1)|0x01;
}
}
}
return 0; //無鍵按下,返回0
}
void getkey(void)
{
unsigned char key;
key=kbscan();
if(key==0)
{
return;
}
switch(key)
{
case 0x11:keyval=7;break;
case 0x12:keyval=4;break;
case 0x14:keyval=1;break;
case 0x18:keyval=10;break;
case 0x21:keyval=8;break;
case 0x22:keyval=5;break;
case 0x24:keyval=2;break;
case 0x28:keyval=0;break;
case 0x41:keyval=9;break;
case 0x42:keyval=6;break;
case 0x44:keyval=3;break;
case 0x48:keyval=11;break;
case 0x81:keyval=12;break;
case 0x82:keyval=13;break;
case 0x84:keyval=14;break;
case 0x88:keyval=15;break;
default:keyval=0xff;break;
}
}
void t0isr() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
switch(num)
{
case 0:P2=0x0fe;break;
case 1:P2=0x0fb;break;
case 2:P2=0x0fd;break;
case 3:P2=0x0f7;break;
default:break;
}
P0=tab[keyval];
num++;
num&=0x03;
}
main()
{
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TR0=1;
ET0=1;
EA=1;
while(1)
{
getkey();
}
}
Ⅳ 急求4*4矩陣鍵盤控制數碼管顯示! 51單片機
共陽極數碼管 如果是共陰極數碼管則 display()里的P0=0xff;改為P0=0x00;P2=smg_we[a];改為P2=~smg_we[a];P0=dsp_code_ca[xianshi[a]];改為P0=~dsp_code_ca[xianshi[a]];即可
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar key_char,key_char0;
uint aa,bb,num;
uint number[8]={16,16,16,16,16,16,16,16};
uint xianshi[8]={16,16,16,16,16,16,16,16};
uchar code Key_init[] = {0xfe,0xfd,0xfb,0xf7};
uchar code smg_we[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar code dsp_code_ca[] = {
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e,0xff};//共陽極數碼管0~F
void delay(uint);
bit Test_Key();
void display();
void main(void)
{
uint x,y,z;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1; //開啟總中斷
ET0=1;
TR0=0;
while(1)
{
if(!TR0)
{
if(Test_Key())
{
number[x]=num;
x++;
for(y=x,z=0;y>0;y--,z++)
{
xianshi[8-y]=number[z];
}
if(x==8)
{
x=0;
TR0=1;
}
}
}
display();
}
}
void time0() interrupt 1 //T1中斷用來計數器溢出 數碼管顯示
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
if(aa==100)
{
aa=0;
TR0=0;
for(bb=0;bb<8;bb++)
{
number[bb]=16;
xianshi[bb]=16;
}
}
}
void delay(uint x)
{
uint a,b;
for(a=x;a>0;a--)
for(b=124;b>0;b--); //這里b的大小有晶振頻率決定 反比
}
bit Test_Key()
{
uint i;
for(i=0;i<4;i++)
{
P1=Key_init[i];
key_char=P1;
key_char=key_char&0xf0;
if(key_char!=0xf0)
{
delay(5);
key_char=P1;
key_char=key_char&0xf0;
key_char0=P1;
key_char0=key_char0&0xf0;
while(key_char0!=0xf0)
{
key_char0=P1;
key_char0=key_char0&0xf0;
}
if(key_char!=0xf0)
{
switch(key_char)
{
case 0x70: num=12+i;
break;
case 0xb0: num=8+i;
break;
case 0xd0: num=4+i;
break;
case 0xe0: num=0+i;
break;
}
return 1;
}
}
}
return 0;
}
void display()
{
uint a;
for(a=0;a<8;a++)
{
P0=0xff;
P2=smg_we[a];
P0=dsp_code_ca[xianshi[a]];
delay(2);
}
}
Ⅳ 求單片機 4X4鍵盤及數碼管顯示實驗 程序
1.把按鍵鬆手檢測去掉;
2.適當的增加按鍵檢查的延時;
Ⅵ 單片機課程設計4x4矩陣鍵盤模擬圖如下,調試運行數碼管就是不亮,請問是什麼原因呢
有高低電平了,應該會亮。是不是數碼管的地線沒接上?用滑鼠將它拖下來一點,看看是不是沒接上,沒有的話,接上一條線
Ⅶ 求矩陣式鍵盤系統設計:4*4,16個鍵盤的輸入系統的設計,將對應的建號用LED數碼管顯示出來!
那還不簡單啊,4行4列嘛,每個交點是一個按鍵,8根線分別連接處理器版的8個IO口,把列的IO屬性配成權弱上拉,讀取鍵值時首先將第1行通過IO口輸出低電平,按順序讀取4列返回的狀態,如果有一列被拉低了那就鎖定那個鍵按下了,鍵值你可以這樣定義一個位元組高半位元組代錶行,低半位元組代表列。一對應就OK了 至於你要翻譯成1-16個LED 靠你的軟體實現就行了,你可以隨便關聯。
Ⅷ 求「小鍵盤按鍵識別數碼管移位顯示」課程設計的詳細報告,以及圖表
幫忙給出詳細過程!!謝謝 #include