導航:首頁 > 操作系統 > 單片機代碼英語

單片機代碼英語

發布時間:2023-07-20 16:15:23

單片機中的程序 每句翻譯對應的意思 我是菜鳥 高手幫忙翻譯下 萬分感謝!!!

LINE EQU 30H //相當於宏定義 LINE=30H
ROW EQU 31H //ROW=31H
VAL EQU 32H //VAL=32H
ORG 00H //程序入口地址
SJMP START //跳到START處
ORG 0BH //定義定時器0的中斷地址入口
LJMP INT_T0 //跳到定時器0的服務程序入口INT_T0處
START: MOV P0,#00H //START標號程序的入口處,P0=0;
MOV TMOD,#01H //TMOD=01H,定義定時器0的工作方式為1
LSCAN: MOV P3,#0F0H //LSCAN標號程序的入口處,P0=0F0H
L1: JNB P3.0,L2 //L1標號程序的入口處,如果P3=0,則跳到L2標號處
LCALL DELAY //調用DELAY函數
JNB P3.0,L2 //如果P3=0,則跳到L2標號處
MOV LINE,#00H //將LINE指向的地址清零,在這里即將地址30H處的內存清零
LJMP RSCAN //長無條件跳轉到RSCAN
L2: JNB P3.1,L3 //L2標號程序的入口處, 如果P3.1=0,則跳到L3標號處
LCALL DELAY //長調用函數DELAY
JNB P3.1,L3 //如果P3.1=0,則跳到L3標號處
MOV LINE,#01H //將LINE指向的地址的內存賦值為1,在這里即將地址30H處的內存賦值為1
LJMP RSCAN //長無條件跳轉到RSCAN
L3: JNB P3.2,L4 //L3程序標號入口處,如果P3.2=0,則跳到標號L4處
LCALL DELAY //長調用函數DELAY
JNB P3.2,L4 //如果P3.2=0,則跳到標號L4處
MOV LINE,#02H //將LINE指向的地址的內存賦值為2,在這里即將地址30H處的內存賦值為2
LJMP RSCAN //長無條件跳轉到RSCAN標號處
L4: JNB P3.3,L1 //L4標號程序入口處,如果P3.3=0,則跳到L1標號處
LCALL DELAY //長高用函數DELAY
JNB P3.3,L1 //如果P3.3=0,則跳到L1標號處
MOV LINE,#03H //將LINE指向的地址的內存賦值為3,在這里即將地址30H處的內存賦值為3
RSCAN: MOV P3,#0FH //RSCAN程序標號入口處,P3=0FH
C1: JNB P3.4,C2 //C1程序標號入口處,如果P3.4=0,則跳到C2標號處
MOV ROW,#00H //將ROW指向的地址的內存賦值為0,在這里即將地址31處的內存賦值為0
LJMP CALCU //長無條件跳到CALCU標號處
C2: JNB P3.5,C3 //C2程序標號入口處,如果P3.5=0,則跳到C3標號處
MOV ROW,#01H //將ROW指向的地址的內存賦值為1,在這里即將地址31處的內存賦值為1
LJMP CALCU //長無條件跳到CALCU處
C3: JNB P3.6,C4 //C3程序標號入口處,如果P3.6=0,則跳到C4標號處
MOV ROW,#02H //將ROW指向的地址的內存賦值為2,在這里即將地址31處的內存賦值為2
LJMP CALCU //長無條件跳到CALCU處
C4: JNB P3.7,C1//C4程序標號入口處,如果P3.7=0,則跳到C1標號處
MOV ROW,#03H //將ROW指向的地址的內存賦值為3,在這里即將地址31處的內存賦值為3
CALCU: MOV A,LINE//CALCU程序標號入口處,A=LINE,在此,即A=30H,A指向地址30H處
MOV B,#04H //B=04H
MUL AB //A中的內容與B中的內容相乘
ADD A,ROW //A=A的內容+ROW中的內容
MOV VAL,A //並A中的內容放到VAL所指向的地址內存處,在此VAL為32H
MOV DPTR,#TABLE2 //將TABLE2的地址存到DPTR里
MOV B,#2 //B=2
MUL AB //A中的內容與B中的內容相乘
MOV R1,A //將A中的內容存到R1里
MOVC A,@A+DPTR //將A+DPTR的內容存到A中,在此表示取表值
MOV TH0,A //將A中的內容給定時器0的高位賦初值
INC R1 //R1自身加1
MOV A,R1 //將R1 的值賦給A
MOVC A,@A+DPTR //將A+DPTR的內容存到A中,在此表示取表值
MOV TL0,A //將A中的內容給定時器0的低位賦初值
MOV IE,#82H //設置中斷允許寄存器,在此,表示開總中斷EA,開定時器允許中斷ET0
SETB TR0 //將T0置1,在此表示啟動定時器T0
MOV A,VAL //將VAL的地址賦值給A
MOV DPTR,#TABLE1 //將TABLE1的地址存到DPTR里
MOVC A,@A+DPTR//將A+DPTR的內容存到A中,在此表示取表值
MOV P0,A //P0=A
W0: MOV A,P3 //W0程序標號入口處,將P3賦值給A
CJNE A,#0FH,W1//如果A不等於0FH,則跳到W1標號處
MOV P0,#00H //將P0賦值為0
CLR TR0 //將TR0清零,在此表示關閉定時器T0
LJMP LSCAN //長無條件跳到LSCAN標號處
W1: MOV A,P3 //W1程序標號入口處,將P3賦值給A
CJNE A,#0F0H,W2//如果A不等於0FH,則跳到W2標號處
MOV P0,#00H //將P0賦值為0
CLR TR0 //將TR0清零,在此表示關閉定時器T0
W2: SJMP W0 //W2程序標號入口處,短無條件跳到W0標號處
INT_T0: MOV DPTR,#TABLE2 //定時器0中斷的服務程序入口處,將TABLE2的地址存到DPTR里
MOV A,VAL //將VAL存到A中,在此VAL =32H
MOV B,#2 //將B賦值為2
MUL AB //A中的內容與B中的內容相乘
MOV R1,A //將A中的內容存放到R1中
MOVC A,@A+DPTR //將A+DPTR的內容存到A中,在此表示取表值
MOV TH0,A //將A中的內容存到TH0中,作為定時器T0的高位初值
INC R1 //R1自身加1
MOV A,R1 //將R1中的內容存放到A中
MOVC A,@A+DPTR //將A+DPTR的內容存到A中,在此表示取表值
MOV TL0,A//將A中的內容存到TH0中,作為定時器T0的低位初值
CPL P1.0 //將P1.0取反
RETI //中斷子函數返回標號
DELAY: MOV R6,#10 //DELAY函數入口處,R6=10
D1: MOV R7,#250 //D1程序標號入口處,R7=250
DJNZ R7,$ //R7自減1,一直在此循環到為0
DJNZ R6,D1 //R6自減1,如果不為0,則跳到D1標號處
RET 子函數返回標號
TABLE1: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H //TABLE1地址處往下的地址中所放的數據
DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
TABLE2: DW 64021,64103,64260,64400 //TABLE2地址處往下的地址中所放的數據
DW 64524,64580,64684,64777
DW 64820,64898,64968,65030
DW 65058,65110,65157,65178

希望這有用

Ⅱ 幫翻譯單片機C語言程序

#include<reg51.h>//51單片機頭文件
#include<stdio.h>//標准輸入輸出頭文件

unsignedcharspeed=5;//定義一個字元變數,並賦值為5
//(想知道5代表什麼可以查ASCII碼,也可以當數字用)
unsignedcharrec_buf[5];//定義一個可以存5個字元的數組
unsignedcharrec_idx=0;//定義一個字元變數,並賦值為0;

charputchar(charc)//實現一個名為putchar的方法,傳入一個字元,返回一個字元
{//{}括起來的是方法體,代表這裡面的內容屬於這個方法的
ES=0;//ES應該是一個寄存器吧,這里是把裡面清0,單片機我懂不多
SBUF=c;//把傳入的字元寫到SBUF寄存器,
while(TI==0);//當TI寄存器里值非0時繼續,這里是一個條件等待
TI=0;//把TI寄存器清0重置
ES=1;//向ES寄存器寫入1
return0;//返回0,結束本方法
}

voiddelay100ms(unsignedcharn)//定義一個無返回值的方法,並需要傳入一個字元
{//char字元型是可以當成數字來用的
unsignedchari,j;//定義兩個字元變數
TMOD=0x20;//把寄存器置為00100000狀態
for(j=0;j<n;++j)//作n(n是方法傳入的字元)次循環
{//{}裡面的東內容都進行n次循環
for(i=0;i<20;i++)//作20次循環,因為他在n次循環內,實際上是n乘以20次
{//外層進行1次,這里就這進行20次
THO=0x63;//把TH0寄存器置為01100011狀態
TL0=0x18;//把TLO寄存器置為00010100狀態
TRO=1;//把TRO寄存器置為00000001狀態
while(!TF0);//當TFO寄存器不為0時繼續
TF0=0;//把TFO重置為0
}
}
}

voidinit_com()//一個無返回值,也不需要傳入值的方法
{
TMOD=0x20;//TMOD寄存器設為00100000狀態
TH1=0xfd;//TH1寄存器設為11111101狀態
TL1=0xfd;//TL1寄存器設為11111101狀態
SM0=0;//SM0寄存器設為00000000狀態
SM1=1;//SM1寄存器設為00000001狀態
REN=1;//REN寄存器設為00000001狀態
EA=1;//EA寄存器設為00000001狀態
TR1=1;//TR1寄存器設為00000001狀態
ES=1;//ES寄存器設為00000001狀態
}

voidmain()
{
unsignedcharlsd_dat,i,j;//定義四個字元變數
charbuf[15];//定義一個可以存放15個字元的字元數組

i=0;//給變數i賦值為數字0
init_com();//執行上面定義過的init_com()方法;

while(1)//一個死循環,不斷的執行後面{}里的代碼
{
delay100ms(speed);//執行前面定義過的voiddelay100ms(unsignedcharn)方法
//首次執行時,speed是開始時定義的5
lsd_dat=0x01<<i;//變數lsd_dat賦值為1,也就是二進制的00000001
P1=lsd_dat;//把P1寄存器置為lsd_dat的值的二進制狀態

buf[0]='D';//把buf字元數組的首個值賦值為字元D,ascii碼為68
//等同於十進制數字68,二進制01001000
for(j=0;j<8;++j)//進行8次循環,每次循環j的值加1
buf[j+1]='0'+((lsd_dat&(0x01<<j))?1:0);//這段有點麻煩
//給buf數組的第j+1個存儲單元賦值,這個值是不確定的
//如果(lsd_dat&(0x01<<j))的運算結果不是0
//那麼他就等於『O'+1,否則就等於『0』+0;
//這里,我不知道『0』是字母o的大寫,還是數字0,應該是數字0
//下面說(lsd_dat&(0x01<<j))的運算
//lsd_dat就是上面定義的變數,他第一次執行時的值是00000001
//他會不會變取決與以後的代碼有沒有改變他
//(0x01<<j)這個作用是,把00000001向左移動j個位,右邊補0
//比如說j的值是2,就是左移兩位,那麼(0x01<<j)的值就是00000100
//j是每次循環都在變,所以這個值也在變
//現在我們就當j的值運行到等於2的時候來看(lsd_dat&(0x01<<j))
//可以看成(0x01&0x04)這是一個與運算,結果看下面
//0x0100000001
//0x0400000100
//&00000000結果就是0
//j=2的話,((lsd_dat&(0x01<<j))?1:0)=0;
//'0'是數字的話,值是十進制48,
//'0'+((lsd_dat&(0x01<<j))?1:0)=48,還是字元『0』
//也就是說((lsd_dat&(0x01<<j))?1:0)的值,不是0,就是1
//那麼,'0'+((lsd_dat&(0x01<<j))?1:0)他的值
//不是48,就是49,也就是字元面的'0'或者『1』,
buf[9]=' ';//buf字元數組的第10個存儲空間賦值為換行符『 』
buf[10]=' ';//buf字元數組的第11個存儲空間賦值為換行符『 』
buf[11]=0;//buf字元數組的第10個存儲空間賦值為0

printf(buf);//輸出字元數組
++i;//i的值自增1
if(i>=8)//如果i大於或者等於8
i=0;//把i重置為0
}
}

voides()interrupt4//定義一個給51單片機發送數據的方法
{
unsignedchardat;//定義一個字元變數
if(RI)//如果RI寄存器非空,執行後面{}裡面的內容
{
RI=0;//把RI寄存器清空
dat=SBUF;//把SBUF寄存器的值賦給dat變數
SBUF=dat;//再把SBUF寄存器設置成dat變數表示的內容
while(TI==0);//等待到TI寄存器非空的時候繼續下面的代碼
TI=0;//把TI寄存器重置清空(時間有限,簡單說了)
if(dat=='L'//如果dat變數的值等與字元『L』,執行後面{}內的代碼
{
rec_idx=0;//把rec_idx變數賦值為0(此處不是字元『0』,而是內碼);
rec_buf[rec_idx++]=dat;//給數組rec_buf[0]賦值為dat變數的值,
//並且rec_idx的值自增1
}
elseif(rec_idx>0)//如果上面那個條件不成立,並且rec_idx大於0,
//則執行後面{}里的內容
{
rec_buf[rec_idx++]=dat;//給數組rec_buf的第rec_idx個賦值為dat變數的值,
//並且rec_idx的值自增1
if(dat>'0'&&dat<='9')//如果dat大於『0』(48)並且小於等於『9』(57)
//則執行下條代碼,否則跳過下行代碼
speed=10-(dat-'0');//給變數speed賦值為10-(dat-48)
rec_idx=0;//給變數rec_idx賦值為0
}
}
}


看在這么精細,字又多的份上,分給我吧,雖然,我也是半瓶水,應該這些是沒錯的。現在時間都0:58了

Ⅲ 請教單片機代碼,

#include
#define uchar unsigned char
uchar dis,led,cnt=0,run=0;
uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};
sbit key=P1^0;
void t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
cnt++;
if(cnt>=10)
{
cnt=0;
P0=_crol_(P0,1);
run++;
run%=8;
if(run==0 && dis>0)dis--;
}
}
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
while(1)
{
P0=table[dis];
if(key==0)
{
while(key==0);
dis++;
}
}
}

閱讀全文

與單片機代碼英語相關的資料

熱點內容
想自己做網站要學編程嗎 瀏覽:597
租個伺服器開個私服需要什麼 瀏覽:272
圖片換成pdf格式 瀏覽:663
javamidi編程 瀏覽:833
android60demo 瀏覽:69
頭條演算法怎麼復習 瀏覽:514
燈光控制通道可以編程設置嗎 瀏覽:783
webpack命令行 瀏覽:807
卸載雲伺服器操作系統 瀏覽:31
java文件移動文件夾 瀏覽:451
針織公斤足稱演算法 瀏覽:460
電腦下載的圖片從文件夾重新編組 瀏覽:645
安卓源碼編譯引導失敗 瀏覽:676
蘋果怎麼添加自定義app文件夾 瀏覽:930
橙牛app怎麼找客服 瀏覽:307
php對象魔術方法 瀏覽:487
OBV能量潮幅圖指標源碼 瀏覽:915
編程15個好習慣 瀏覽:676
電腦u盤文件夾顯示屏幕保護程序 瀏覽:803
我的世界伺服器版本怎麼下載 瀏覽:602