1樓:做而論道
#include
unsigned int num,a;
sbit key0=p1^0;
sbit key1=p1^1;
sbit key2=p1^2;
sbit key3=p1^3;
bit flag;
unsigned char code led_code[20] = ;
void delay(unsigned char i)void keyscan()
}/*實現減法功能*/
if(key1==0)
}/*實現清零功能*/
if(key2==0)
}/*實現定時器1方式1定時1s使得數碼管加1顯示功能*/if(key3==0) }}
void t1_ini()
void timer1() interrupt 3void display()
void main()}}
試試看。
寫了個微控制器矩陣按鍵控制數碼管顯示數字的程式,只需要顯示0到9就好了。但是自己寫的調不出來,謝謝幫忙
2樓:匿名使用者
#include
#define uchar unsigned char#define uint unsigned intuchar code table=
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e
} ;//共陽極數碼管0 為亮
sbit wei=p1^0;
void delay(uchar t)//毫秒延uint i,j;
for(i=0; ifor(j=0; j<110; j++);
void display(uchar d)p1=0x00;
wei=1; //第一個數碼管點亮
p0=table[d];
void main()
uchar v,temp;
uchar key_l,key_h;// 定義列和行uchar key;
while(1)
p2=0xf0;
temp=p2;
temp=temp&0xf0;
if(temp!=0xf0) //檢測到有按鍵按下delay(10);//消抖
if(temp!=0xf0)//再次確認一下有否真的有按下temp=p2;//把這次的檢測值作為真值key_l=temp&0xf0;
p2=key_l|0x0f;//讓低四位置1 1110 1111temp=p2;//趕緊讀取p口值
key_h=temp&0x0f;//得到行值 0000 1110key=key_l+key_h;//1110 0000//+ 0000 1110
//ee 1110 1110
switch(key)
case 0xee:display(0);break;
case 0xde:display(1);break;
case 0xbe:display(2);break;
case 0x7e:display(3);break;
case 0xed:display(4);break;
case 0xdd:display(5);break;
case 0xbd:display(6);break;
case 0x7d:display(7);break;
case 0xeb:display(8);break;
case 0xdb:display(9);break;
case 0xbb:display(10);break;
case 0x7b:display(11);break;
case 0xe7:display(12);break;
case 0xd7:display(13);break;
case 0xb7:display(14);break;
case 0x77:display(15);break;
把行列掃描的值相加 key=key_l+key_h; 我也是調了很長時間 你要把原理徹底搞明白了 呵呵
3樓:
void keyscan()
while(temp!=0xf0)
flag=flag+1;}}
p2=0xfd;
temp=p2;
temp=temp&0xf0;
while(temp!=0xf0)
while(temp!=0xf0)
flag=flag+1; }}
p2=0xfb;
temp=p2;
temp=temp&0xf0;
while(temp!=0xf0)
while(temp!=0xf0)
flag=flag+1;}}
p1=0xf7;
temp=p1;
temp=temp&0xf0;
while(temp!=0xf0)
while(temp!=0xf0)
flag=flag+1;}}
} 這是鍵掃程式,肯定有用的
設計一個微控制器輸入顯示系統,要求每按一下按鍵數碼管顯示資料加1(數碼管初始值為0,9加1 後顯示0)。
4樓:沈偉棟
程式清單如下:
#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'
;//延時n毫秒
void delaynms( uint n ) // 利用x、y作簡單的自減運算,消耗微控制器指令週期,達到延時的目的
//數碼管顯示 // 顯示方式為動態掃描,視覺暫留原理
void display( uchar num ) // *p指向main函式中的陣列shownum的首地址
void main( void )
while( !key );
}display( count );}}
擴充套件資料
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。
5樓:匿名使用者
#include < reg52.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'
;//延時n毫秒
void delaynms( uint n ) // 利用x、y作簡單的自減運算,消耗微控制器指令週期,達到延時的目的
//數碼管顯示 // 顯示方式為動態掃描,視覺暫留原理
void display( uchar num ) // *p指向main函式中的陣列shownum的首地址
void main( void )
while( !key );
}display( count ); }}
51微控制器c語言設計,按鍵控制數碼管,依次按下顯示0到9迴圈
6樓:無和有
#include
sbit k1=p1^0;
#define uint16 unsigned int
#define uchar unsigned char
uchar code shuzu[ ]=;
void delay()
void main()
uchar n ;
p2=0xfe;
p1=0xff;
while(1)
if(k1==0)
{if(n>=9) n=0;
else n++;
p0=shuzu[n];
while(!k1);
delay();
while(!k1);
擴充套件資料:
51微控制器的功能特性
1,可以**63k程式空間,接近64k 的16位地址空間;
2,可以**64kxdata 空間,全部64k 的16位地址空間;
3,可以真實**全部32 條io腳;
4,完全相容keilc51 uv2 除錯環境,可以通過uv2 環境進行單步,斷點, 全速等操作;
5,可以使用c51語言或者asm組合語言進行除錯 ;
6,可以非常方便地進行所有變數觀察,包括滑鼠取值觀察,即滑鼠放在某 變數上就會立即顯示出它此的值;
7,可選 使用使用者晶振,支援0-40mhz晶振頻率;
8,片上帶有768位元組的xdata,您可以在**時選 使用他們,進行xdata 的**;
9,可以**雙dptr 指標;
10,可以**去除ale 訊號輸出. ;
11,自適應300-38400bps 的所有波特率通訊;
12,體積非常細小,非常方便插入到使用者板中.插入時緊貼使用者板,沒有連線電纜,這樣可以有效地減少執行中的干擾,避免**時出現莫名其妙的故障;
13,**插針採用優質鍍金插針,可以有效地防止日久生鏽,選擇優質園腳ic插座,保護**插針,同時不會損壞目標板上的插座. ;
14,**時監控和使用者**分離,不可能產生不能**的軟故障;
15,rs-232介面不計成本採用max202積體電路,序列通訊穩定可靠,絕非一般三極體的簡易電路可比。
微控制器C程式。按鍵控制led點亮30秒。現在想要讓led2和led3由長亮變為交替亮。該怎麼改
依驪豔 include unsigned char k sbit k1 p0 0 sbit k2 p0 1 sbit led p1 1 unsigned char sz delay1s void main delay1s led 1 delay1s 思路僅供參考。 草莓啵啵虎 include def...
微控制器怎麼用簡單按鍵控制LED,51微控制器用兩個按鈕控制一個LED燈的亮滅(不是那麼簡單請看我要求)
易水嚴寒風蕭蕭 include reg52.h define uchar unsigned char define uint unsigned intsbit led p1 0 假設燈在p1.0sbit key1 p2 0 假設按鍵在p2.0和p2.1sbit key2 p2 1 void dela...
微控制器怎樣識別按鍵值,微控制器按鍵檢測程式
你的這個問題問的太沒有水平了,我本來不想回答的我是實在看不下去了,這個問題對沒有接觸微控制器的人是很有難度的,對於瞭解微控制器的人簡直是1 1 2就這麼簡單,微控制器統稱處理器內部結構操作非常簡單,微控制器io可以做輸出 和輸入簡單一點說,寫程式就是控制微控制器的io埠輸出高電平或者低電平來控制外圍...