導航:首頁 > 操作系統 > 51單片機小程序

51單片機小程序

發布時間:2022-05-13 05:51:08

① 關於51單片機小程序解讀,如圖,求大神根據問題,逐條解釋啊!不要這樣的答案,把立即數送至寄存器A這

句1:設置TMOD寄存器,選擇定時期0,工作方式2(8位自動重裝)
2,3:將定時初值裝入TH0,TL0中
4:存一個數在30H地址中,用於二次系數分頻
5:打開定時/計數器中斷
5:開始計時
6:打開總中斷
7:PSW和ACC推入堆棧斷點保護
8::遞減30H地中中的數據,也就是256
9:將 減剩下的數據裝到A中
10:判斷A中的數據是否為0,也就是判斷256減完沒有,沒減完了,跳到T0OUT地方(你沒拍出來)
11:減完250了,再重新裝一下,下一次再用
12:將P1.7取反,出現方波;
同學筆試愉快

② 用51單片機編寫個小程序

#include <reg52.h>
#include "delay.h"
#include "lcd1602.h"

sbit SCK = P2^0;//sbit定義單片機的特殊功能寄存器變數
sbit SDA = P2^1;
bit ack = 0;//bit定義變數

void iic_start()
{
SDA = 1;
SCK = 1;
delay_us(1);
SDA = 0;
delay_us(1);

SCK = 0;//鉗住匯流排,等待下次使用
}

void icc_stop()
{
SDA = 0;
SCK = 1;
delay_us(1);
SDA = 1;
delay_us(1);

SCK = 0;//鉗住匯流排,等待下次使用
}

void iic_send_byte(unsigned char byte)
{
unsigned char i;
for(i = 0;i<8;i++)
{
SDA = byte & 0x80;//非0為1
SCK = 1;
delay_us(1);
SCK = 0;
byte <<=1;//左移一位
}
SDA = 1;
SCK = 1;
delay_us(1);
if(0 == SDA)//有應答
ack = 0;
else //無應答
ack =1;

SCK = 0;//鉗住匯流排,等待下次使用
}

unsigned char iic_rcv_byte()
{
unsigned char i,temp;
SDA = 1;
for(i = 0;i < 8;i ++)
{
SCK = 0;
delay_us(1);
SCK = 1;
delay_us(1);
temp <<= 1;
if(SDA)
temp = temp+ 1;
}
SCK = 0;
return temp;
}

void iic_ack()
{
SDA = 0;
SCK = 1;
delay_us(1);

SCK = 0;
}
void iic_noack()
{
SDA = 1;
SCK = 1;
delay_us(1);

SCK = 0;
}

void AT_send_str(unsigned char deviceaddr,unsigned char romaddr,unsigned char *s,unsigned char num)
{
unsigned char i;
iic_start();

iic_send_byte(deviceaddr);
if(ack == 1)
return;
iic_send_byte(romaddr);
if(ack == 1)
return;
for(i = 0;i < num; i ++)
{
iic_send_byte(*s);
if(ack == 1)
return;
s++;
}
icc_stop();
}

void AT_rcv_str(unsigned char deviceaddr,unsigned char romaddr,unsigned char *s,unsigned char num )
{
unsigned char i;
//SDA = 1;
iic_start();

iic_send_byte(deviceaddr);
if(ack == 1)
return;
iic_send_byte(romaddr);
if(ack == 1)
return;
iic_start();
iic_send_byte(deviceaddr + 1);
if(ack == 1)
return;
for(i = 0;i < num - 1; i++)
{
*s = iic_rcv_byte();
iic_ack();//
s++;
}
*s = iic_rcv_byte();
iic_noack();
icc_stop();
}

void main()
{
unsigned char i;
unsigned char testbuf[20] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,16,17,18,19};
unsigned char rcvbuf[20];
lcd_init();
AT_send_str(0xae,0,testbuf,10);
delay_ms(200);
AT_rcv_str(0xae,0,rcvbuf,10);
for(i = 0;i < 10; i++)
{
display_lcd_char(i,0,rcvbuf[i]+0x30);
}
while(1);
}

③ 求大神幫寫一個51單片機的小程序。用4×4鍵盤

#include<reg51.h>

//Functiondeclarations
voidcct_init(void);
voiddelay(int);
voidlcdinit(void);
voidwritecmd(int);
voidwritedata(char);
voidReturn(void);
charREAD_SWITCHES(void);
charget_key(void);

//*******************
//Pindescription
/*
P2isdatabus
P3.7isRS
P3.6isE
P1.0toP1.3arekeypadrowoutputs
P1.4toP1.7arekeypadcolumninputs
*/
//********************
//DefinePins
//********************
sbitRowA=P1^0;//RowA
sbitRowB=P1^1;//RowB
sbitRowC=P1^2;//RowC
sbitRowD=P1^3;//RowD

sbitC1=P1^4;//Column1
sbitC2=P1^5;//Column2
sbitC3=P1^6;//Column3
sbitC4=P1^7;//Column4

sbitE=P3^6;//EpinforLCD
sbitRS=P3^7;//RSpinforLCD

//***********************************************************
//Mainprogram
//
intmain(void)
{
charkey;//

cct_init();//
lcdinit();//InitilizeLCD

writecmd(0x95);
writedata('w');//write
writedata('w');//write
writedata('w');//write
writedata('.');//write
writedata('T');//write
writedata('h');//write
writedata('e');//write
writedata('E');//write
writedata('n');//write
writedata('g');//write
writedata('i');//write
writedata('n');//write
writedata('e');//write
writedata('e');//write
writedata('r');//write
writedata('i');//write
writedata('n');//write
writedata('g');//write

writecmd(0xd8);

writedata('P');//write
writedata('r');//write
writedata('o');//write
writedata('j');//write
writedata('e');//write
writedata('c');//write
writedata('t');//write
writedata('s');//write
writedata('.');//write
writedata('c');//write
writedata('o');//write
writedata('m');//write
writecmd(0x80);
while(1)
{
key=get_key();//Getpressedkey
//writecmd(0x01);//Clearscreen
writedata(key);//EchothekeypressedtoLCD
}
}


voidcct_init(void)
{
P0=0x00;//notused
P1=0xf0;//
P2=0x00;//usedasdataportforLCD
P3=0x00;//usedforRSandE
}

voiddelay(inta)
{
inti;
for(i=0;i<a;i++);//nullstatement
}

voidwritedata(chart)
{
RS=1;//Thisisdata
P2=t;//Datatransfer
E=1;//=>E=1
delay(150);
E=0;//=>E=0
delay(150);
}


voidwritecmd(intz)
{
RS=0;//Thisiscommand
P2=z;//Datatransfer
E=1;//=>E=1
delay(150);
E=0;//=>E=0
delay(150);
}

voidlcdinit(void)
{
/////////////Resetprocessfromdatasheet/////////
delay(15000);
writecmd(0x30);
delay(4500);
writecmd(0x30);
delay(300);
writecmd(0x30);
delay(650);
/////////////////////////////////////////////////////
writecmd(0x38);//functionset
writecmd(0x0c);//displayon,cursoroff,blinkoff
writecmd(0x01);//cleardisplay
writecmd(0x06);//entrymode,setincrement
}

voidReturn(void)//Returnto0locationonLCD
{
writecmd(0x02);
delay(1500);
}

charREAD_SWITCHES(void)
{
RowA=0;RowB=1;RowC=1;RowD=1;//TestRowA

if(C1==0){delay(10000);while(C1==0);return'7';}
if(C2==0){delay(10000);while(C2==0);return'8';}
if(C3==0){delay(10000);while(C3==0);return'9';}
if(C4==0){delay(10000);while(C4==0);return'/';}

RowA=1;RowB=0;RowC=1;RowD=1;//TestRowB

if(C1==0){delay(10000);while(C1==0);return'4';}
if(C2==0){delay(10000);while(C2==0);return'5';}
if(C3==0){delay(10000);while(C3==0);return'6';}
if(C4==0){delay(10000);while(C4==0);return'x';}

RowA=1;RowB=1;RowC=0;RowD=1;//TestRowC

if(C1==0){delay(10000);while(C1==0);return'1';}
if(C2==0){delay(10000);while(C2==0);return'2';}
if(C3==0){delay(10000);while(C3==0);return'3';}
if(C4==0){delay(10000);while(C4==0);return'-';}

RowA=1;RowB=1;RowC=1;RowD=0;//TestRowD

if(C1==0){delay(10000);while(C1==0);return'C';}
if(C2==0){delay(10000);while(C2==0);return'0';}
if(C3==0){delay(10000);while(C3==0);return'=';}
if(C4==0){delay(10000);while(C4==0);return'+';}

return'n';//Meansnokeyhasbeenpressed
}

charget_key(void)//getkeyfromuser
{
charkey='n';//assumenokeypressed

while(key=='n')//waituntillakeyispressed
key=READ_SWITCHES();//scanthekeysagainandagain

returnkey;//
}

④ 51單片機程序編寫

最簡程序如下:

⑤ 朋友們幫忙寫個51單片機的按鍵小程序匯編的

(1);P3.3小鍵盤按下P1.3亮再按0.5秒滅。
org 0000h
ajmp main0
org 0080h
MAIN0:
CLR 21H ;清標志
main:
mov c,p3.3 ;檢測按鍵
jc main
MOV R6,#200 ;設定延時
MOV R7,#200
TT0:
JNB 21H,TT2 ;檢測燈狀態
tt:
mov c,p3.3 ;檢測按鍵
jnc tt1

JNB 20H,MAIN ;檢測時間標志
CLR 20H
AJMP TT3
TT2:
mov c,p3.3 ;檢測按鍵
jnc tt2
TT3:
CPL 21H ;改變燈狀態
cpl p1.3
ajmp main
TT1: NOP ;延時但不是子程序
NOP
NOP
NOP
NOP
NOP
DJNZ R6,TT
MOV R6,#200
DJNZ R7,TT
MOV R7,#200
SETB 20H
AJMP TT
end
(2)數碼管數據 p0,數碼管控制p2 獨立按鍵p1口 ,;對獨立鍵進行按鍵次數計數,三位數碼管顯示。 *
;K1按下後,進行加1計數 *
;K2按下後,進行減1計數。 *
;K3按下後,進行加5計數。 *
;K4按下後,清計數單元,數碼管顯示0。 *
;按住鍵可以快速計數。
K1 BIT P1.4
K2 BIT P1.5
K3 BIT P1.6
K4 BIT P1.7
K_OLD EQU 30H
K_NEW EQU 31H
K_COUNT EQU 32H
DISSTART EQU 40H ;顯示單元首地址
LED_DATA EQU P0 ;數碼管數據口定義
;---------------------------------------------------------
ORG 0000H
JMP MAIN
ORG 0080H
;---------------------------------------------------------
MAIN:
MOV SP,#60H
MOV P1,#0FFH
MOV P0,#0FFH
MOV K_OLD,#00H
MOV K_COUNT,#00H
MAIN1:
CALL CONVT
CALL PLAY
CALL KEY_PROG
JMP MAIN1

KEY_PROG:
CALL K_SCAN ;鍵掃描
MOV A,K_NEW
CJNE A,K_OLD,KEY_P1
JMP KEY_P_END
KEY_P1:
MOV R4,#20
KEY_P2:
CALL CONVT ;用顯示程序來進行鍵延時
CALL PLAY
DJNZ R4,KEY_P2

CALL K_SCAN ;再判斷鍵是否按下
MOV A,K_NEW
CJNE A,K_OLD,KEY_P3
JMP KEY_P_END
KEY_P3:
JB ACC.0,LOOP1 ;K1按下
JB ACC.1,LOOP2 ;K2按下
JB ACC.2,LOOP3 ;K3按下
JB ACC.3,LOOP4 ;K4按下
JMP KEY_P_END
LOOP1:
INC K_COUNT ;鍵計數加1
JMP KEY_P_END
LOOP2:
DEC K_COUNT ;鍵計數減1
JMP KEY_P_END
LOOP3:
INC K_COUNT ;鍵計數加5
INC K_COUNT
INC K_COUNT
INC K_COUNT
INC K_COUNT
JMP KEY_P_END
LOOP4:
MOV K_COUNT,#00H ;鍵計數單元清零
KEY_P_END:
RET
;---------------------------------------------------------
;代碼變換 (HEX TO BCD)
;---------------------------------------------------------
CONVT:
MOV A,K_COUNT
MOV B,#100
DIV AB
MOV DISSTART+2,A ;百位存放在DISSTART+2
MOV A,#10
XCH A,B
DIV AB
MOV DISSTART+1,A ;十位存放在DISSTART+1
MOV DISSTART,B ;個位存放在DISSTART
RET
;---------------------------------------------------------
; 鍵掃描子程序
;---------------------------------------------------------
K_SCAN:
MOV P1,#0FFH
MOV K_NEW,#00H
MOV A,P1
CPL A
ANL A,#0F0H
SWAP A
MOV K_NEW,A
RET
;---------------------------------------------------------
;延時子程序
;---------------------------------------------------------
DELAY:
MOV R6,#200
DEL:
MOV R7,#0FFH
DJNZ R7,$
DJNZ R6,DEL
RET
;---------------------------------------------------------
PLAY:
MOV R0,#DISSTART ;獲得顯示單元首地址
MOV R1,#07FH ;從第一個數碼管開始
MOV R2,#03H ;共顯示3位數碼管
DISP1:
MOV A,@R0 ;獲得當前位地址
MOV DPTR,#TAB_NU ;獲得表頭
MOVC A,@A+DPTR ;查表獲得顯示數據
MOV LED_DATA,A ;顯示數據
MOV P2,R1 ;開始顯示當前位
MOV A,R1 ;准備顯示下一位
RR A
MOV R1,A ;下一位
INC R0 ;取下一個單元地址
LCALL DELAY2MS ;延時 2 MS
DJNZ R2,DISP1 ;重復顯示下一個
MOV P2,#0FFH ;關閉顯示
RET ;顯示完成,返回
;---------------------------------------------------------
;延時子程序
;---------------------------------------------------------
DELAY2MS:
MOV R6,#10
DEL1:
MOV R7,#100
DJNZ R7,$
DJNZ R6,DEL1
RET
TAB_NU:
db 28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h ;字形代碼表
;**********************************************************
END

兩個例子我想夠你明白的了。詳細的解釋,代表性的例子,可慢慢學習

⑥ 用c++怎樣編寫51單片機程序

相信很多初學者都有同樣的疑問,也有同樣的希望。就是用C++語言來寫單片機程序的源代碼。現在我來解釋一下單片機的源代碼程序幾乎沒有人用C++來寫的。
1. 假設一下你現在用C++寫完了一個程序代碼。那麼你要讓單片機認識必須要編譯吧,對吧 。請問你有合適的編譯軟體來編譯你的代碼嗎?
2. 就算有編譯器能編譯,你能保證它的代碼效率一定能給單片機用嗎?
單片機的ROM是K級的水平,執行指令的速度也遠遠小於PC。絕對不能和PC機相比的。這個就決定了單片機編程時很多時候要考慮它的代碼效率和代碼大小問題。所以一般情況下對於單片機編程我們之用匯編語言或者C語言。就算是用C寫程序也要注意代碼的效率等問題。
還有就是只有很大型的項目及應用程序開發才有可能有C++來寫程序。一般的系統文件,應用程序都是用C來寫的。有的系統代碼甚至要用匯編語言來寫。
舉個生活中的例子:如果你從家裡去公司上班你一般的出行方式是什麼?
1.坐公車 2.騎車 3.自己開車 4.坐地鐵 5.走過去。如果誰說他是做直升飛機去上班的。那要麼這個人腦子不正常,要麼就是太有錢了炫富。如果你要打蒼蠅用蒼蠅拍子就行了。如果要你用巡航導彈來打蒼蠅,你認為可能嗎?
所以我們單片機寫程序的話一般就是匯編語言和C語言。幾乎沒有人用C++語言的。

⑦ 51單片機程序,急救

D2亮(其它燈不亮)→MOVP1,#11111101B
D4亮(其它燈不亮)→MOVP1,#11110111B
D6亮(其它燈不亮)→MOVP1,#11011111B
D8亮(其它燈不亮)→MOVP1,#01111111B
D7不亮(其它燈亮)→MOVP1,#01000000B
D5不亮(其它燈亮)→MOVP1,#00010000B
D3不亮(其它燈亮)→MOVP1,#00000100B
D1不亮(其它燈亮)→MOVP1,#00000001B
並且以此循環。
3次後結束,每個燈點亮1S。

別忘了採納。

⑧ 51單片機的一個簡單程序

ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV A,P0

ANL A,#1EH

CJNE A,#02H,MAIN1

SETB P1.1

CLR P1.2

CLR P1.8

SJMP MAIN

MAIN1:
CJNE A,#04H,MAIN2

CLR P1.1

SETB P1.2

CLR P1.8

SJMP MAIN

MAIN2:
CJNE A,#1EH,MAIN3

CLR P1.1

CLR P1.2

SETB P1.8

SJMP MAIN

MAIN3:
CLR P1.1

CLR P1.2

CLR P1.8

LJMP MAIN

END

閱讀全文

與51單片機小程序相關的資料

熱點內容
錄屏好用的app哪個好用 瀏覽:635
一念逍遙新伺服器怎麼看 瀏覽:90
移動app的信用充話費在哪裡 瀏覽:500
單片機接感測器 瀏覽:72
免費pdf工具 瀏覽:380
pdf加密一機一碼 瀏覽:600
怎麼把百度雲資源壓縮 瀏覽:456
不會數學英語如何編程 瀏覽:88
如何能知道網站伺服器地址 瀏覽:648
程序員月薪5萬難嗎 瀏覽:138
如何評價程序員 瀏覽:803
雲虛機和伺服器的區別 瀏覽:403
廣西柳州壓縮機廠 瀏覽:639
arm開發編譯器 瀏覽:833
51單片機的核心 瀏覽:746
看電視直播是哪個app 瀏覽:958
將c源程序編譯成目標文件 瀏覽:787
再要你命3000pdf 瀏覽:558
ai軟體解壓軟體怎麼解壓 瀏覽:520
文件夾怎樣設置序列號 瀏覽:963