仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
熟練掌握Keil和Proteus軟件的C51設計與仿真操作
熟練掌握并行口P口的編程
熟悉C51編程的變量、存儲等概念及使用方法
初步掌握延時程序的原理,初步掌握P口的輸入檢測編程
實驗要求
電路圖設計:
可以用P1或更多的P口分別連接八個LED燈進行組合
可以用四個P口連的LED燈構成一個4×8的矩陣
可以用不同數量的LED等構成一個特定圖案
程序要求:
要盡量考慮for、while、switch、函數等用途,鞏固C語言設計能力
各種效果可以考慮做成函數,通過按鍵進行不同函數的調用
效果提示:
常規流水燈效果
多種流水燈效果切換
多種流水燈以某種規律切換
實驗實現的功能說明
P1、P2口分別接在第一、第二排LED燈上,利用開關SW1和SW2分別控制LED燈的不同運作,當開關SW1按下時,第一排LED燈從左到右按順序點亮,再由右到左順序點亮;斷開開關SW1,閉合開關SW2,第二排LED燈兩邊向中間依次點亮,形成匯中的效果。
實驗實現的原理及仿真電路設計
實驗原理:本次實驗使用十六個四種顏色的LED燈排成兩排,用if語句選擇開關SW1和SW2,按下SW1時,利用for循環和左移i位,右移8-i為相或實現LED燈從左到右依次點亮的流水燈效果,同理再得到由右向左的流水燈效果,左右依次循環。按下SW2時,設定最左和最右的初始值,用for循環循環四次,實現流水燈匯中。
實驗原理電路圖:


聲明開關按鍵:
sbit SW1=P3^0;
sbit SW2=P3^1;
延時程序:
void delay(unsigned int m)
{
while(m--);
}
當開關SW1按下時,流水燈的工作:
if(SW1==0)
{
t=0x01;
P1=t;
for(i=0;i<8;i++)
{
a=t<<i;
b=t>>(8-i);
P1=a|b;
delay(20000);
}
for(i=1;i<8;i++)
{
a=t>>i;
b=t<<(8-i);
P1=a|b;
delay(20000);
}
}
開關SW2按下時,另一流水燈的運作:
if(SW2==0)
{
p=0x01;
q=0x80;
for(j=0;j<4;j++)
{
P2=p+q;
delay(20000);
p=p<<1;
q=q>>1;
}
}
實驗過程及實驗情況
編寫SW1代碼時,第二個從右到左的for循環的初始值i設置成0,以致流水燈從左運動到最右端后,又多亮了一個最左端的燈,達不到左右循環流水的效果。后將其i設置成1,實現正常的左右流水循環的效果。制作電路圖時,LED方向和代碼沒有結合好,導致一排LED燈接地,一排接高電平,調整好后兩排LED燈都接地。
實驗小結
本次實驗要求初步掌握延時程序的原理,初步掌握P口的輸入檢測編程。掌握Keil和Proteus軟件的C51設計與仿真操作,熟練掌握并行口P口的編程,熟悉C51編程的變量、存儲等概念及使用方法。但是實驗過程中仍有不熟練的地方,需要不斷改進,且能做出更好的作品。
Proteus7.5版本的仿真與程序下載:
18034520204 何穎(2).zip
(175.74 KB, 下載次數: 34)
2021-11-10 10:11 上傳
點擊文件名下載附件
dd
|