導航:首頁 > 操作系統 > 單片機程序編碼

單片機程序編碼

發布時間:2022-05-07 14:51:33

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

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

⑵ 你好,我想知道單片機計時器亮一秒滅一秒的程序編碼

#include<reg52.h>
#defineucharunsignedint
uchartime;
voidmain()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1);
}
voidT0isr()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
time++;
time%=20;
if(time==0)led1=!led1;
}

⑶ 學習51單片機時用什麼軟體編寫程序代碼啊

一般都用Keil來編的,當然還有其他軟體。編寫的程序是.asm後綴的,經編譯後形成.hex文件,這個程序文件是51單片機可以識別的,載到單片機裡面就可以執行的了。用C語言編出來的是高級語言,還要變成匯編語言。

⑷ 求一下單片機的程序編碼總體作用和每一步的作用(1)

void main()
{
init();
write_setds(0x80,0x50); //以下的類似函數應該是用於初始化的 (液晶顯示屏或是其他)
write_setds(0x82,0x59); //第一個參數應該是地址,第二個參數應該是命令
write_setds(0x84,0x10);
write_setds(0x86,0x17);
write_setds(0x88,0x03);
write_setds(0x8a,0x03);
write_setds(0x8c,0x10);
write_setds(0x90,0xa4);
while(1)
{
keyscan(); //鍵盤掃描函數

} ------------這個大括弧貌似有點多餘吧
display(); //顯示函數
}

⑸ 求一下單片機的程序編碼總體作用和每一步的作用

void SET_DS1302()
{
uchar i;
Write_DS1302(0x8e,0x00); //去除DS1302防寫
for(i=0;i<7;i++)
{
Write_DS1302(0x80+2*i,(DateTime[i]/10<<4|(DateTime[i]%10))); //寫入初始時間
}
Write_DS1302(0x8e,0x80); //防寫使能
}
/*------------------------------------
讀取當前時期時間
------------------------------------*/
void GetTime()
{
uchar i;
for(i=0;i<7;i++)
{
DateTime[i]=Read_Data(0x81+2*i); //將當前時間存入數組
}
}

/*------------------------------------
時間和日期轉換成數字字元
------------------------------------*/
void Format_DateTime(uchar d,uchar *a)
{
a[0]=d/10+'0';a[1]=d%10+'0'; //因為從1302中讀取的數據不能直接用於顯示,所以要進行轉 換然後才能用於液晶或者數碼管顯示
}
/*------------------------------------
判斷是否為閏年
------------------------------------*/
uchar isLeapYear(uint y)
{
return (y%4==0&&y%100!=0)||(y%400==0); //很簡單的閏年判斷
}
/*------------------------------------
星期轉換
------------------------------------*/
void RefreshWeekDay() //星期轉化
{ //其實這些轉換都不需要,直接通過相關的 命令讀取1302數據即可
uint i,d,w=5;
for(i=2000;i<2000+DateTime[6];i++)
{
d=isLeapYear(i)? 366 : 365;
w=(w+d)%7;
}
d=0;
for(i=1;i<DateTime[4];i++)d+=MonthsDays[i];
d+=DateTime[3];
DateTime[5]=(w+d)%7+1;
}

⑹ 單片機的程序怎麼編寫

你可以先把0放到一個單元裡面,比如說100h,然後
mov
r0,100h
inc
100h
mov
r1,100h
inc
100h
繼續寫下去就可以了。

⑺ 單片機代碼問題

8.7秒=8700mS,如果你會了定時器20mS,那麼設置一個變數 TN,在定時器中斷常式里,每次加1,當 TN=435時(435*20=8700);
就是;
sbit P1_0 = P1^0;
void timer0() interrupt 3
{
......
TN++;
if(TN>=435) { P1_0 =! P1_0; TN=0}
......
}

⑻ 誰知道哪有單片機的典型程序代碼

我有。
功能說明
用一位數碼管循環顯示0~9數字,數字變換間隔的時間為1秒。
程序:SMG2.ASM
01:
START:
MOV
DPTR,
#TABLE
;
存表
02:
MOV
R0,
#0
;
設定初始值
03:
LOOP

MOV
A,
R0
04:
MOVC
A,
@A+DPTR
;
取表代碼
05:
MOV
P0,
A
;
送P0輸出
06:
ACALL
DLY1S
;
調延時程序
存表取表
07:
INC
R0
;
R0值
加1
08:
CJNE
R0,
#10
,
LOOP
;
不是10,循環
09:
JMP
START
;
重新開始
判斷循環
10:
DLY1S:
MOV
R5,
#50
;
11:
D1:
MOV
R6,
#100
;
12:
D2:
MOV
R7,
#100
;
13:
DJNZ
R7,
$
;
14:
DJNZ
R6,
D2
;
15:
DJNZ
R5,
D1
;
1秒延時
16:
RET

子程序
17:
TABLE:
DB
0C0H,
0F9H,
0A4H,
0B0H
;
18:
DB
99H,
92H,
82H,
0F8H
;
19:
DB
80H,
90H,
88H,
83H
;
20:
DB
0C6H,
0A1H,
86H,
8EH
;
代碼表
21:
END

程序結束
功能說明
使用兩位數碼管顯示器,利用掃描方式循環顯示00~99兩位數。
程序:SMG3.ASM
01:
START:
MOV
R0,
#0
;初始化計數器
02:
MOV
DPTR,
#TABLE
;存入查表啟始地址
03:
LOOP:
ACALL
DISPLAY
;
調顯示子程序
04:
INC
R0
;
計數器加1
05:
CJNE
R0
,#100,
LOOP
;
沒到100
循環
06:
JMP
START
;
到開始處
主程序
07:
DISPLAY::MOV
A,
R0
;
08:
MOV
B,
#10
;
16進制換成10進制
09:
DIV
AB
;
A÷B商存A,余數存B
10:
MOV
R1,
A
;
R1內存放十位數

11:
MOV
R2,
B
;
R2內存放個位數
十進
12:
MOV
R3,
#50
;
設導通頻率50次
13:
LOOP1:
MOV
A,
R2
;
個位數顯示
14:
ACALL
CHANG
;
調顯示子程序
15:
CLR
P2.0
;開個位顯示
16:
ACALL
DLY10mS
;
調延時10ms程序
個位
17:
SETB
P2.0
;
關閉個位顯示
顯示
18:
MOV
A,
R1
;
取十位數
19:
ACALL
CHANG
;
調取表顯示子程序
20:
CLR
P2.1
;
開十位顯示
21:
ACALL
DLY10mS
;
調延時10ms程序
十位
22:
SETB
P2.1
;
關閉十位顯示
顯示
23:
DJNZ
R3,
LOOP1
;
100次沒完,繼續循環
掃描
24:
RET
;
子程序
25:
CHANG:
MOVC
A,
@A+DPTR
;
26:
MOV
P0,
A
;
27:
RET
;
取表子程序
28:
DLY10mS:MOV
R6,
#20

29:
D1:
MOV
R7,
#248
;
30:
DJNZ
R7,
$
;
31:
DJNZ
R6,
D1
;
延時10
m.S
32:
RET
;
子程序
33:
TABLE:
DB
0C0H,
0F9H,
0A4H,
0B0H
;
34:
DB
99H,
92H,
82H,
0F8H
;
35:
DB
80H,
90H,
88H,
83H
;
36:
DB
0C6H,
0A1H,
86H,
8EH
;
代碼表
37:
END
;
程序結束

⑼ 求52單片機程序代碼

程序代碼如下:
#include<reg51.h>
sbitK1=P1^0;
sbitK2=P1^1;
voiddelay(inta)
{
inti;
while(a--)for(i=0;i<120;i++);
}
main()
{
unsignedcharkeyval=0,led=0xfe;
while(1)
{
if(K1==0)
{
delay(10);
if(K1==0)
{
keyval==1;
while(K1==0);
}
}
if(K2==0)
{
delay(10);
if(K2==0)
{
keyval==2;
while(K2==0);
}
}
if(keyval==1)P0=0xfe;
if(keyval==2)
{
P0=led;
led=_crol_(led,1);
delay(200);
}
}
}

⑽ 單片機如何進行編碼的!!!

基本工作原理 系統分為紅外發射部分和紅外接受部分,紅外發射部分是採用普通的遙控發射器(即所說的無線鍵盤),接收部分由紅外遙控一體接收頭.單片機組成。當紅外遙控發射器有按鍵按下時,內部的編碼電路將其轉換為相對應的紅外信號,從紅外發射管發出,紅外遙控一體接收頭接收到信號後,將信號轉換成相對應的脈沖信號。紅外一體接收的信號接到CPU的INT0管腳,通過CPU進行解碼。

閱讀全文

與單片機程序編碼相關的資料

熱點內容
如何禁用安卓全家桶 瀏覽:257
oa伺服器異常怎麼辦 瀏覽:69
cmd編譯utf8 瀏覽:278
怎麼截取app接受的數據 瀏覽:277
nrf24l01pdf 瀏覽:299
php字元串轉array 瀏覽:435
U盤分了文件夾後 瀏覽:941
javasetstring 瀏覽:838
壓縮包里文件夾是白色的 瀏覽:473
編譯鏈接知乎 瀏覽:592
php查詢按鈕 瀏覽:716
有音響游戲解壓神器 瀏覽:254
怎麼壓縮圖片jpeg 瀏覽:714
澳大利亞net程序員 瀏覽:580
程序員加班難受 瀏覽:991
如何看伺服器品牌 瀏覽:257
ecy50clp壓縮機多少W 瀏覽:756
mac終端命令怎麼保存 瀏覽:851
微信公眾號圖片壓縮 瀏覽:442
可以在安卓平板上畫畫的軟體是什麼 瀏覽:439