微控制器程式求修改,實現按鍵控制數碼管0 9,急

時間 2021-09-10 12:12:59

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積體電路,序列通訊穩定可靠,絕非一般三極體的簡易電路可比。

微控制器按鍵控制led燈亮滅程式,微控制器按鍵控制LED燈亮滅程式

按鍵按下就打控制燈的io取反就可以了 如 if key1 1 51微控制器的按鍵控制小燈亮滅的問題 程式型別 c語言 系統設定如下 p1.0 按鍵1 p1.1 按鍵2 p1.2按鍵3p2.0 p2.1 p 2.2 分別接乙個繼電器和ledio口 初始化均為高電平 程式main 黑龍江少帥 int0中...

51微控制器按鍵控制流水燈左移,51微控制器的c語言 左移右移怎麼用?想用來控制流水燈,請幫忙寫個完整的c程式,參考下,埠隨意

按鍵不能用while函式來寫,第八行 if k1 0 按一次執行一次函式內容 開始學習微控制器的同學們寫注意了,在執行程式後,現象不正確的時候,不要首先就找軟體的錯誤,我的經驗是從源頭開始找問題,首先你得確定你的平臺是正確的,你說是按鍵沒效果,先用萬用表測試一下你的引腳的電平,是否被拉低了如果按鍵沒...

急求 使用獨立按鍵控制LED燈亮滅的微控制器匯程式設計序

微控制器的p1.0 p1.3接四個發光二極體l1 l4的陰極,p1.4 p1.7接四個開關k1 k4 程式 org 00h start mov a,p1 anl a,0f0h rr a rr a rr a rr a orl a,0f0h mov p1,a sjmp start 可以檢測單個按鍵,也可...