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 可以檢測單個按鍵,也可...