當前位置:首頁 » 編程語言 » 單片機c語言的程序
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

單片機c語言的程序

發布時間: 2023-01-11 04:51:57

Ⅰ 誰能幫我寫一下單片機c語言程序

#include<reg51.h>
sbit LED=P1^0;
sbit K1=P1^1;
sbit K2=P1^2;
void delay(int ms)
{
unsigned char i;
while(ms--)for(i=0;i<120;i++);
}
void t0isr(void) interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
LED=~LED;
}
main()
{
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
ET0=1;
EA=1;
while(1)
{
if(K1==0)
{
delay(10);
if(K1==0)
{
while(K1==0);
TR0=1;
cnt=0;
}
}
if(K2==0)
{
delay(10);
if(K2==0)
{
while(K2==0);
TR0=0;
LED=1;
}
}
}
}

Ⅱ 單片機C語言程序

燈閃爍一次和蜂鳴器響一聲的程序會寫不?就是控制腳高低電平變化一次嗎。好了,定義一個變數計數,從1開始,並用作循環次數,變數是幾就循環幾次。在循環中燈閃爍一次,蜂鳴器響一次。這樣,循環幾次,燈閃幾次,蜂鳴器響幾次。

Ⅲ 單片機c語言程序

最近剛學完51單片機,對這個比較了解,這是典型的雙機通信問題,很簡單,以下是根據你提供的原理圖寫的程序,只需要把對應程序生成的hex文件,載入到單片機內,再運行即可顯示,按一下加1,顯示範圍:10-19;


發送機程序:

/*發送單片機*/
#include<reg52.h>
#defineuintunsignedint
#defineucharunsignedchar
sbitkey=P3^7;
voiddelay(uintt)
{
uinti;
while(t--)
for(i=0;i<200;i++);
}
voidserial_initial()
{
TMOD=0x20;
TH1=0xfa;//bps9600
TL1=0xfa;
TR1=1;
SCON=0x50;//SM0=0;SM1=1;REN=1
PCON=0x80;
}
voidmain()
{
ucharnum;
serial_initial();
num=10;//設置初始值為10,可根據需要修改
while(1)
{
if(key==0)
{
SBUF=num;
if(TI==1)
TI=0;
delay(100);
num++;
if(num==19)//設置結束值為19,可根據需要修改
num=10;
}
}
}

接收機程序:

#include<reg52.h>
#defineuintunsignedint
#defineucharunsignedchar
ucharcodedis_code[]=
{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
ucharnum=0,n1=0,n2=0;
voiddelay(uintt)
{
uinti;
while(t--)
for(i=0;i<200;i++);
}
voidserial_initial()
{
TMOD=0x20;
TH1=0xfa;//bps9600
TL1=0xfa;
TR1=1;
SCON=0x50;//SM0=0;SM1=1;REN=1
PCON=0x80;
EA=1;//打開串口中斷
ES=1;
}
voiddisplay_num()//顯示接收的數字
{
n1=num%10;
n2=num/10;
P2=dis_code[n1];
delay(10);
P0=dis_code[n2];
delay(10);
}
voidmain()
{
serial_initial();
while(1)
{
display_num();
}
}
voidserial()interrupt4
{
if(RI==1)
{
RI=0;
num=SBUF;
}
}

原理圖:

Ⅳ 幫我解釋下單片機c語言程序

/********
//p1.0波形為:
//1、10ms為周期的方波或持續的高、低電平(與flag、p1.0初始值有關),持續2秒。
//2、持續的高、低電平或10ms為周期的方波(與flag、p1.0初始值有關),持續2秒。
//3、重復1、2步驟。
*********/
#include

unsigned
int
t02s;
unsigned
char
t05ms;
bit
flag;
void
main(void)
{
tmod=0x01;
//初始化定時器。
//可以對照單片機pdf相應章節,按位對比。
//此處設置定時器0工作於「16
位定時器/
計數器,tl0、th0
全用」模式。
th0=(65536-500)/256;
//初始化定時/計數器高位元組。
tl0=(65536-500)%256;
//初始化。。。。。。低位元組。
tr0=1;
//啟動定時器0。
//以下兩句開啟定時器中斷,缺一不可。
et0=1;
//允許定時器0中斷。
ea=1;
//開啟全局中斷。
while(1);
//循環,整個程序交由定時中斷控制。
}
//此處為定時器中斷子程序,每次定時器溢出,進入此段程序。
//根據參數定義,每5ms中斷一次。
//定時器中斷後,計數不停止,但是需要重新初始化定時/計數器。
void
t0(void)
interrupt
1
using
0
{
//重新「初始化定時/計數器」高、低位元組。
th0=(65536-500)/256;
tl0=(65536-500)%256;
//每次中斷,t02s

1。
t02s++;
//增加400次後(5ms
×
400
=
2s),flag標志取反。
if(t02s==400)
{
t02s=0;
flag=~flag;
}
//若中斷時flag標志為0,p1.0口取反。
if(flag==0)
{
p1_0=~p1_0;
}
}

Ⅳ 單片機c語言程序

如果沒有定義
no_timer2
就執行下面的程序。。如果定義了。。就執行#else下面的程序、、與if。。。else的用法差不多。。
#endif就是結束的意思。。與#ifndef
是相對的。。

Ⅵ 單片機c語言編程

單片機的外部結構:

DIP40雙列直插;
P0,P1,P2,P3四個8位準雙向I/O引腳;(作為I/O輸入時,要先輸出高電平)
電源VCC(PIN40)和地線GND(PIN20);
高電平復位RESET(PIN9);(10uF電容接VCC與RESET,即可實現上電復位)
內置振盪電路,外部只要接晶體至X1(PIN18)和X0(PIN19);(頻率為主頻的12倍)
程序配置EA(PIN31)接高電平VCC;(運行單片機內部ROM中的程序)
P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1
單片機內部I/O部件:(所為學習單片機,實際上就是編程式控制制以下I/O部件,完成指定任務)

四個8位通用I/O埠,對應引腳P0、P1、P2和P3;
兩個16位定時計數器;(TMOD,TCON,TL0,TH0,TL1,TH1)
一個串列通信介面;(SCON,SBUF)
一個中斷控制器;(IE,IP)
針對AT89C52單片機,頭文件AT89x52.h給出了SFR特殊功能寄存器所有埠的定義。教科書的160頁給出了針對MCS51系列單片機的C語言擴展變數類型。
C語言編程基礎:

十六進製表示位元組0x5a:二進制為01011010B;0x6E為01101110。
如果將一個16位二進數賦給一個8位的位元組變數,則自動截斷為低8位,而丟掉高8位。
++var表示對變數var先增一;var—表示對變數後減一。
x |= 0x0f;表示為 x = x | 0x0f;
TMOD = ( TMOD & 0xf0 ) | 0x05;表示給變數TMOD的低四位賦值0x5,而不改變TMOD的高四位。
While( 1 ); 表示無限執行該語句,即死循環。語句後的分號表示空循環體,也就是{;}
在某引腳輸出高電平的編程方法:(比如P1.3(PIN4)引腳)
#include <AT89x52.h> //該頭文檔中有單片機內部資源的符號化定義,其中包含P1.3
void main( void ) //void 表示沒有輸入參數,也沒有函數返值,這入單片機運行的復位入口
{
P1_3 = 1; //給P1_3賦值1,引腳P1.3就能輸出高電平VCC
While( 1 ); //死循環,相當 LOOP: goto LOOP;
}
注意:P0的每個引腳要輸出高電平時,必須外接上拉電阻(如4K7)至VCC電源。
在某引腳輸出低電平的編程方法:(比如P2.7引腳)
#include <AT89x52.h> //該頭文檔中有單片機內部資源的符號化定義,其中包含P2.7
void main( void ) //void 表示沒有輸入參數,也沒有函數返值,這入單片機運行的復位入口。
{
P2_7 = 0; //給P2_7賦值0,引腳P2.7就能輸出低電平GND
While( 1 ); //死循環,相當 LOOP: goto LOOP;
}

在某引腳輸出方波編程方法:(比如P3.1引腳)
#include <AT89x52.h> //該頭文檔中有單片機內部資源的符號化定義,其中包含P3.1
void main( void ) //void 表示沒有輸入參數,也沒有函數返值,這入單片機運行的復位入口
{
While( 1 ) //非零表示真,如果為真則執行下面循環體的語句
{
P3_1 = 1; //給P3_1賦值1,引腳P3.1就能輸出高電平VCC
P3_1 = 0; //給P3_1賦值0,引腳P3.1就能輸出低電平GND
} //由於一直為真,所以不斷輸出高、低、高、低……,從而形成方波
}

將某引腳的輸入電平取反後,從另一個引腳輸出:( 比如 P0.4 = NOT( P1.1) )
#include <AT89x52.h> //該頭文檔中有單片機內部資源的符號化定義,其中包含P0.4和P1.1
void main( void ) //void 表示沒有輸入參數,也沒有函數返值,這入單片機運行的復位入口
{
P1_1 = 1; //初始化。P1.1作為輸入,必須輸出高電平
While( 1 ) //非零表示真,如果為真則執行下面循環體的語句
{
if( P1_1 == 1 ) //讀取P1.1,就是認為P1.1為輸入,如果P1.1輸入高電平VCC
{ P0_4 = 0; } //給P0_4賦值0,引腳P0.4就能輸出低電平GND
else //否則P1.1輸入為低電平GND
//{ P0_4 = 0; } //給P0_4賦值0,引腳P0.4就能輸出低電平GND
{ P0_4 = 1; } //給P0_4賦值1,引腳P0.4就能輸出高電平VCC
} //由於一直為真,所以不斷根據P1.1的輸入情況,改變P0.4的輸出電平
}

將某埠8個引腳輸入電平,低四位取反後,從另一個埠8個引腳輸出:( 比如 P2 = NOT( P3 ) )
#include <AT89x52.h> //該頭文檔中有單片機內部資源的符號化定義,其中包含P2和P3
void main( void ) //void 表示沒有輸入參數,也沒有函數返值,這入單片機運行的復位入口
{
P3 = 0xff; //初始化。P3作為輸入,必須輸出高電平,同時給P3口的8個引腳輸出高電平
While( 1 ) //非零表示真,如果為真則執行下面循環體的語句
{ //取反的方法是異或1,而不取反的方法則是異或0
P2 = P3^0x0f //讀取P3,就是認為P3為輸入,低四位異或者1,即取反,然後輸出
} //由於一直為真,所以不斷將P3取反輸出到P2
}
注意:一個位元組的8位D7、D6至D0,分別輸出到P3.7、P3.6至P3.0,比如P3=0x0f,則P3.7、P3.6、P3.5、P3.4四個引腳都輸出低電平,而P3.3、P3.2、P3.1、P3.0四個引腳都輸出高電平。同樣,輸入一個埠P2,即是將P2.7、P2.6至P2.0,讀入到一個位元組的8位D7、D6至D0。

Ⅶ 單片機C語言編程

KEY4EQU30H

KEY2EQU31H

ORG0000H

LJMPMAIN

ORG0030H

MAIN:

CLREA

MOVSP,#5FH

MOVKEY2,#0

MOVKEY4,#0

LOOP:

JBP1.0,LOOP

MOVR7,#10

LCALLDELAY

JBP1.0,LOOP

JNBP1.0,$

MOVP3,#0C0H

LOOP0:

LCALLKEYDEAL

MOVA,KEY4

JNZLOOP41

MOVA,P3

ANLA,#0F0H

ORLA,#0EH

MOVP3,A

SJMPLOOP21

LOOP41:

DECA

JNZLOOP42

MOVA,P3

ANLA,#0F0H

ORLA,#0DH

MOVP3,A

SJMPLOOP21

LOOP42:

DECA

JNZLOOP43

MOVA,P3

ANLA,#0F0H

ORLA,#0BH

MOVP3,A

SJMPLOOP21

LOOP43:

DECA

JNZLOOP21

MOVA,P3

ANLA,#0F0H

ORLA,#07H

MOVP3,A

LOOP21:

MOVA,KEY2

JNZLOOP22

MOVA,P3

ANLA,#0FH

ORLA,#20H

MOVP3,A

SJMPLOOP3

LOOP22:

DECA

JNZLOOP3

MOVA,P3

ANLA,#0FH

ORLA,#10H

MOVP3,A

LOOP3:

LJMPLOOP0

;----------------------------

DELAY:

MOVR2,#2

DLY1:

MOVR3,#250

DJNZR3,$

DJNZR2,DLY1

DJNZR7,DELAY

RET

;-----------------------------

KEYDEAL:

JBP1.1,KEYEN1

MOVR7,#10

LCALLDELAY

JBP1.1,KEYEN1

JNBP1.1,$

INCKEY4

MOVA,KEY4

ANLA,#03H

MOVKEY4,A

KEYEN1:

JBP1.2,KEYEN2

MOVR7,#10

LCALLDELAY

JBP1.2,KEYEN2

JNBP1.2,$

INCKEY2

MOVA,KEY2

ANLA,#01H

MOVKEY2,A

KEYEN2:

RET

;-----------------------------

Ⅷ 一個完整的單片機c語言程序包含哪幾個部分

個人覺得,一個完整C程序至少應該包含頭文件、初始化、主程序四個部分,頭文件是程序編譯預處理的重要組成部分,缺了它就無法生成目標代碼;初始化部分包含變數初始化和埠初始化;主程序是一個C程序的核心代碼,由此執行或調用一些具有特定功能的函數模塊以完成程序的預設功能。