1樓:刺友互
1、直接呼叫庫函式。
2、下面是函式的配置,從中可以看出,i=0時,埠25.16.4所對應的燈亮,i=1時,埠27.28.5所對應的燈亮,在for迴圈中,兩組燈交替閃爍。
3、通過自定義巨集進行操作,來實現。
4、自定義的巨集如下,將燈的埠及開關,通過自定義巨集的方式,可以在程式中進行直接操作。
5、直接控制埠所對應的暫存器。
6、直接操作暫存器,需要定義埠對應的暫存器。
2樓:匿名使用者
#include
#define uchar unsigned char;
uchar led1,led2,led3,led4;
uchar keyval,calflag,s_dat,d_dat;
uchar distab=;
unsigned int number,r_dat;
void delay(unsigned int a)
unsigned int i,j;
for(i=0;ifor(j=0;j<1000;j++);
void dealdat()
switch(calflag)
case 0:
r_dat=s_dat+d_dat;
break;
case 1:
r_dat=s_dat-d_dat;
break;
case 2:
r_dat=s_dat*d_dat;
break;
case 3:
r_dat=s_dat/d_dat;
break;
default:break;
led1=(r_dat/1000)%10;
led2=(r_dat/100)%10;
led3=(r_dat/10)%10;
led4=r_dat%10;
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;
return((~sccode)+(~recode));
else
sccode=(sccode<<1)|0x01;
return 0; //無鍵按下,返回0
}void getkey(void)
unsigned char key;
key=kbscan();
if(key==0)
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=0xf4;
tl0=0x48;
switch(number)
case 0:p2=0x04;p0=distab[led1];break;
case 1:p2=0x08;p0=distab[led2];break;
case 2:p2=0x01;p0=distab[led3];break;
case 3:p2=0x02;p0=distab[led4];break;
default:break;
number++;
if(number>3)number=0;
main()
tmod = 0x01;
number = 0;
th0=0xf4;
tl0=0x48;
tr0=1;
et0=1;
ea=1;
led1=0;
led2=0;
led3=0;
led4=0;
while(1)
getkey();
switch(keyval)
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
led3=led4;
led4=keyval;
led1=0;
led2=0;
break;
case 10:break; //"on"
case 11: //"="
d_dat=led3*10+led4;
dealdat();
break;
case 12: //"/"
calflag=3;
s_dat=led3*10+led4;
led3=0;
led4=0;
break;
case 13: //"*"
calflag=2;
s_dat=led3*10+led4;
led3=0;
led4=0;
break;
case 14: //"-"
calflag=1;
s_dat=led3*10+led4;
led3=0;
led4=0;
break;
case 15: //"+"
calflag=0;
s_dat=led3*10+led4;
led3=0;
led4=0;
break;
default:break;
3樓:百度文庫精選
內容來自使用者:manenxy
/**************** p2位選p0段選時鐘12mhz *********************/
#include /*包含的標頭檔案*/
#define uchar unsigned char /*巨集定義*/
#define uint unsigned int
uchar led[17] = ; /*數碼管段選*/
long float number=; /*數碼管顯示位控制暫存器*/
uchar a=;
long int d = ; //數碼管顯示內容暫存器uchar code c = ; /*數碼管位選*/
/*列掃描控制led 1位2位3位4位5位6位7位8位*/
uchar k=16; /*按鍵對外控制*/
uchar b; /*按鍵【+】【-】【*】【/】對外的控制*/
long float out_put; /*定義變數【out_put】作為結果*/
uchar e=0; /*數字的位儲存遞進的控制*/
uchar g=0; /*運算方式的控制變數*/
uchar l=0; /*運算方式的控制變數*/
uchar g1=0; /*運算方式的控制變數*/
uchar g2=0; /*運算方式的控制變數*/
uchar g3=0; /*運算方式的控制變數*/
uchar g4=0; /*運算方式的控制變數*/
char j=-1; /*與number陣列連用*/
uchar m=0; /*按鍵【=】的控制變
怎樣用51微控制器做計算器啊?
4樓:浮生梔
1、首先第一步就是要進行查詢元器件並放入到原理圖中,如下圖所示。
2、接著就是要進行原理圖連線根據網路標籤的方式即可。
3、然後就是要進行編寫程式,
程式源**
#include #include
#include
#include
#define uchar unsigned char
#define uint unsigned int
uchar operand1[9], operand2[9];
uchar operator;
void delay(uint);
uchar keyscan();
void disp(void);
void buf(uint value);
4、最後一步就是進行驗證正確後編譯程式在protues中載入hex觀察**結果是否正確,如下圖所示。
擴充套件資料
電腦**:
微控制器有了開發系統,隨著微控制器的發發系統也在不斷髮展。 keil是一種先進的微控制器整合開發系統。
它代表著組合語言微控制器開發系統的最新發展,首創多項便利技術,將開發的程式設計/**/除錯/寫入/加密等所有過程一氣呵成,中間不須任何編譯或彙編。
功能特性:
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積體電路,序列通訊穩定可靠,絕非一般三極體的簡易電路可比。
功能限制:
**器佔用微控制器串列埠及定時器2,與keil c(pc)通訊,故不支援串列埠及定時器2 的**功能。全速執行時微控制器串列埠及定時器2 可供使用者使用。
使用方法:
1、將**器插入需**的使用者板的cpu插座中,**器由使用者板供電;
2、將**器的序列電纜和pc機接好,開啟使用者板電源;
微控制器的簡易計算器,怎麼用51微控制器做簡易計算器?
基本功能介紹 簡單的加減乘除的運算。時間顯示功能,而且能實現計算器模組和時間模組之間的任意切換。按鍵音卻換功能。原理 多功能微控制器計算器是一個實現加減乘除的和時間功能的計算器,主要的硬體組成由,一個at89s52微控制器晶片,一個led液晶 1602液晶 一個4 4鍵盤,和4個特殊功能按鍵。一個時...
51微控制器呼叫子程式問題,怎樣51微控制器呼叫兩個子程式
直接跳回主程式,再初始化。怎樣51微控制器呼叫兩個子程式 5 天蠍神經俠侶 mov r0,08h mov a,0feh loop mov p1,a lcall del rr a djnz r0,loop 使用djnz 指令。為0執行下一指令,不為0跳轉。就可以呼叫內兩個容子程式了 估計是進入到倒計時...
51微控制器定時器中斷程式
m愛人 再次重新啟動。用c語言實現的,先要定義好定時器的初值,不管你使用多大的晶振,使用51微控制器,一般都是12分頻出來,也就可以得出一個機器週期,機器週期 12 n n指晶振頻率 假設你要定時的時間為m,那麼定時的初值為 m 機器週期 初值 th0 65536 初值 256 tl0 65536 ...