導航:首頁 > 操作系統 > 單片機c51習題

單片機c51習題

發布時間:2025-04-06 19:02:38

『壹』 C51單片機程序設計題,要求用C語言做,模擬交通燈控制單片機電路,答案要詳細具體。

晚上隨手寫,也未調試,權當看看

程序有不嚴謹地方還得調試修改

#include<REGX51.H>

#defineSTATUS_1S 1

#defineSTATUS_2S 2

#defineSTATUS_3S 3

#defineSTATUS_4S 4

#defineSTATUS_5S 5

#defineSTATUS_15S 15

#defineSTATUS_28S 28

#defineSTATUS_29S 29

#defineSTATUS_30S 30

unsignedcharflag,status,status_temp=1,status_temp_;

sbitK1 = P0^0;

sbitK2 = P0^1;

sbitRLED = P0^2;

sbitYLED = P0^3;

sbitGLED = P0^4;

voidInit(void)

{

ET0=1;

TR0=1;

RLED=0; //亮

YLED=0;

GLED=0;

while(status_temp)

{

switch(status)

{

caseSTATUS_1S: //1S

{

RLED=1; //滅,閃一次

YLED=1;

GLED=1;

} break;

caseSTATUS_2S: //1S

{

RLED=0; //亮,閃一次

YLED=0;

GLED=0;

} break;

caseSTATUS_3S: //1S

{

RLED=1; //滅

YLED=1;

GLED=1;

status_temp=0;

} break;

}

}

status_temp=1;

ET0=0;

TR0=0;

}

voidInit_Timer0(void)

{

TMOD=0x01;

// ET0=1;

// TR0=1;

EA=1;

TH0=0X3C;

TL0=0XB0; //未計算,偷樓上的

}

voidM_Start(void)

{

TH0=0X3C;

TL0=0XB0;

ET0=1;

TR0=1;

RLED=0; //紅亮

while(status_temp)

{

switch(status)

{

caseSTATUS_1S:

{

if(status_temp_==1)

{

YLED=0;

}

} break;

caseSTATUS_2S:

{

if(status_temp_==1)

{

YLED=1;

}

} break;

caseSTATUS_3S:

{

if(status_temp_==1)

{

YLED=0;

status_temp_=0;

}

} break;

caseSTATUS_15S: //15S滅,綠亮

{

RLED=1;

GLED=0;

} break;

caseSTATUS_28S:

{

GLED=1;

} break;

caseSTATUS_29S:

{

GLED=0;

} break;

caseSTATUS_30S:

{

GLED=1;

status=0;

status_temp_=1;

} break;

}

}

ET0=0;

TR0=0;

status=0;

status_temp=1;

YLED=1;

}

voidM_End(void)

{

TH0=0X3C;

TL0=0XB0;

ET0=1;

TR0=1;

RLED=0; //亮1次

YLED=0;

GLED=0;

while(status_temp)

{

switch(status)

{

caseSTATUS_1S: //1S

{

RLED=1; //滅一次

YLED=1;

GLED=1;

} break;

caseSTATUS_2S: //1S

{

RLED=0; //亮二次

YLED=0;

GLED=0;

} break;

caseSTATUS_3S: //1S

{

RLED=1; ////滅二次

YLED=1;

GLED=1;

} break;

caseSTATUS_4S: //1S

{

RLED=0; ////亮三次

YLED=0;

GLED=0;

} break;

caseSTATUS_5S: //1S

{

RLED=1; ////滅三次

YLED=1;

GLED=1;

status_temp=0;

} break;

}

}

status_temp=1;

ET0=0;

TR0=0;

}

main()

{

Init();//單片機初始化

Init_Timer0();//定時器初始化

while(1)

{

if(K1==0)

M_Start();//模擬開始

if(K2==0)

M_End();//模擬結束

}

}

voidinterrupt_time0()interrupt1 //核對頭文件,一致就好

{

TH0=0X3C;

TL0=0XB0;

flag++;

if(flag==20)

{

status++;

flag=0;

}

}

『貳』 單片機C51 C語言編程問題!!!!

voiddisplay(ucharshi,ucharge)

{

uintledout[1],i;//這里應該是ledout[2]

我在proteus上進行了模擬,但是不知道什麼原因,只對共陽極LED數碼管好使。我就把程序稍微做了改動,模擬結果可以正確計時。

我把程序貼在下面供參考

#include<reg52.h>

#define禪悔ucharunsignedchar

#defineuintunsignedint

ucharnum=0,count=0,num2=0,shi=0,ge=0;

ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

//共陽//段選數據表

//ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

ucharcodewei[2]={0xfe,0xfd};//位選數據表

voiddisplay(uchar,uchar);

voiddelay(uint);

voidmain()

{

TMOD=0x10;//設定定時器1工作在方式1

TH1=(65536-50000)/256;//裝載初值

TL1=(65536-50000)%256;//開總中斷

//開定時器1中斷

ET1=1;//啟動定時器1

TR1=1;//程序在此不停對於數碼管動態掃描等待中斷

EA=1;

while(1)

{

display(shi,ge);//顯示函數

}

}

voiddisplay(ucharshi,ucharge)

{

uintledout[2],i;

ledout[0]=table[shi];雹襲鋒//段選數據十位

ledout[1]=table[ge];//段選數據各個

for(i=0;i<2;i++)

{//用P0輸出位選數據

P0=wei[i];

//這里用查表的方式來賦值

P2=ledout[i];//用P2輸出段選數據

delay(1);//掃描間隔

}

}

//1S中斷函數

voidT1_time()interrupt3

{

TH0=(65536-50000)/256;源晌//重新裝載初值

TL0=(65536-50000)%256;

count++;

if(count==20)//如果到了20次,說明1秒到

{//把COUNT清零重新計數20次

count=0;

num2++;//用NUM2向來數碼管顯示到60後歸零

if(num2==60)

num2=0;

shi=num2/10;//把NUM2分成2個數十位和個位

ge=num2%10;

}

}

voiddelay(uintxms)

{

uinti,j;

for(i=xms;i>0;i--)//延時程序

for(j=110;j>0;j--);

}

『叄』 51單片機的問題

7.定時/計數器工作於定時方式時,是通過89C51片內振盪器輸出經12分頻後的脈沖進行計數,
--對。

直至溢出。
--這要看你的軟體,也可以讓它永遠不溢出。

8.80C51單片機的擴展程序存儲器與片內程序存儲器存儲空間重疊。
--可以重疊,也可以不重疊。
--這要看,是誰設計電路了。

9.在中斷響應時斷點地址自動入棧
--對。

『肆』 求解幾道MCS51單片機的答案

11. C51 中,若定義8 位有符號類型的變數,可定義為 char 型變數,其值域為 -128~127 ;unsigned int 型變數的長度為 無符號整型 ,其值域為 0~65535 。5. 若MCS-51 晶振頻率為12MHz,則T0 工作於計數方式時,可以接受的計數脈沖頻率范圍為 1000000~1000000/65536 。11.欲對300個外部事件計數,可以選用定時器/計數器T1的模式 0 或模式 1 。 10.MCS-51 單片機的串列口工作於方式0 時用於 同步 移位寄存器。MCS-51單片機串列方式0通信時,數據從 Rxd 引腳發送/接收。

『伍』 第八屆藍橋杯單片機組預賽真題解析

第八屆藍橋杯單片機組預賽真題解析如下

  1. 單片機基礎知識

    • 定時器0的4種工作模式被重點考察,需理解每種模式的工作原理及其最大定時長度,如最大定時長度為4、65536 us。
  2. 電路分析

    • 第二題涉及三級放大電路的輸出電壓計算,答案為2.4V,要求參賽者具備電路分析和計算能力。
  3. 濾波器類型識別

    • 當有用信號為固定頻率時,應選擇帶通濾波器;
    • 直流電源濾波則選用低通濾波器,答案為D和B,考察了對濾波器類型的理解和應用。
  4. 邏輯門功能

    • OC門能夠實現線與功能,這是邏輯門電路中的一個重要知識點,答案為D。
  5. 數電表達式簡化

    • 第五題要求簡化數電表達式,考察了對數字電路的理解和邏輯運算能力,答案為C。
  6. 中斷優先順序

    • 第六題中斷優先順序表中,外部中斷0的請求優先順序最高,這是單片機中斷機制中的一個重要知識點,答案為D。
  7. 地址分配

    • 第七題討論了地址分配,P2口作為輸出高8位地址,P0口用於外部存儲器低8位地址/數據傳輸,這是對單片機地址分配機制的理解和應用,答案為D。
  8. 數碼管消除陰影

    • 第八題代碼中數碼管消除陰影的方法是全滅,這是對數碼管顯示原理的理解和應用,答案為A。
  9. 存儲區分析

    • 第九題考察存儲區分析,xdata指向外部存儲空間,C51的code存儲區寫入後不可更改,常用於ROM,這是對單片機存儲結構的理解和應用,答案為D。
  10. 復位與程序下載

    • 第十題考察復位後P0P3口的配置以及程序下載的特性,要求理解單片機的復位機制和程序下載過程,A和D選項有誤。

實驗總結: 本部分真題涵蓋了定時器、濾波器、中斷優先順序等多個單片機領域的核心知識點,要求參賽者具備扎實的理論基礎和實際應用能力。

閱讀全文

與單片機c51習題相關的資料

熱點內容
python代碼覆蓋率工具官網 瀏覽:29
好分數app的考試信息在哪裡 瀏覽:484
程序員與內行語錄 瀏覽:376
清除主窗口屏幕的命令 瀏覽:570
易語言防反編譯器 瀏覽:485
21歲當總裁pdf 瀏覽:257
三菱壓縮機與東芝 瀏覽:63
ecu編程語言 瀏覽:246
lombok程序員 瀏覽:912
md的命令 瀏覽:449
發型p圖素材哪個app可以 瀏覽:791
彈性雲伺服器價格表 瀏覽:387
有關三生三世番外的小說在哪個app 瀏覽:374
cmd打開伺服器地址 瀏覽:387
思域壓縮機型號 瀏覽:859
文件加密轉移 瀏覽:184
3d中的ffd命令點不上 瀏覽:905
球面怎麼編程序 瀏覽:798
怎麼給電腦安裝伺服器系統 瀏覽:124
ndklinux環境配置 瀏覽:947