單片機實驗說明<一>數字口基本使用
機器人類單片機課程為突出專業特色,對實驗作了大量補充和講解,除了uno,cozmo和tianbotmini之外,加入了大量相關單片機案例,使課程緊密融合物聯網和機器人工程,增加Linux下調試方式,作為windows之外的補充,補充esp8266,esp32等wifi單雙核單片機,補充操作系統概念。相關內容在課程中已經測試過,但并未得到有效的批評和建議,現全部公開。
項目名稱:實驗一 流水燈設計/報警產生器設計
這是典型數字口應用案例。
實驗一(上) 流水燈設計
設計要求:
(1)掌握單片機實驗箱的使用方法與程序調試技巧;
(2)學會使用51系列單片機I/O的基本輸入輸出功能。
使發光二極管LED4-6-8-10閃爍 間隔1000毫秒。
使發光二極管從LED10往LED3循環點亮間隔500毫秒,然后熄滅。
依次點亮LED3到LED10發光二極管隔500毫秒。請編寫程序并完成調試。
注意:LED3-LED10為重命名。
通過了解 P1 口連接 3-8 譯碼器進行 LED 選通電路圖及數碼管位選電路、P0 的控制 74HC245
驅動 LED 的電路和 P3 口連接的獨立鍵盤電路,見圖 1-1。
軟件代碼:
依據具體調試過程,方法不唯一,在重點部分加入注釋,使程序更容易閱讀和理解。
參考代碼1:
/*****************************************************************************
* 頭文件 *
*****************************************************************************/
#include "hml/hml.h"
#define LSA P1_5
#define LSB P1_6
#define LSC P1_7
/*****************************************************************************
* 初始化 *
*****************************************************************************/
void sys_init(void)
{
LSA = 0;
LSB = 0;
LSC = 0;
}
/*****************************************************************************
* 主函數 *
*****************************************************************************/
void main(void)
{
sys_init();
while(true)
{
/* send per 1000ms */
sleep(1000);
P0=0x55;
/* send per 1000ms */
sleep(1000);
P0=0xFF;
}
}
參考代碼2:
/*****************************************************************************
* 頭文件 *
*****************************************************************************/
#include "hml/hml.h"
#define LSA P1_5
#define LSB P1_6
#define LSC P1_7
/*****************************************************************************
* 初始化 *
*****************************************************************************/
void sys_init(void)
{
LSA = 0;
LSB = 0;
LSC = 0;
}
/*****************************************************************************
* 主函數 *
*****************************************************************************/
void main(void)
{
sys_init();
unsigned char j=0,sel=0x7F;
for(j=0;j<8;j++)
{
P0=sel;
sleep(500);
sel=sel>>1|0x80;
}
sel=0xFF;
P0=sel;
sleep(10000);
}
參考代碼3:
/*****************************************************************************
* 頭文件 *
*****************************************************************************/
#include "hml/hml.h"
#define LSA P1_5
#define LSB P1_6
#define LSC P1_7
/*****************************************************************************
* 初始化 *
*****************************************************************************/
void sys_init(void)
{
LSA = 0;
LSB = 0;
LSC = 0;
}
/*****************************************************************************
* 主函數 *
*****************************************************************************/
void main(void)
{
sys_init();
unsigned char j=0,sel=0xFE;
for(j=0;j<8;j++)
{
P0=sel;
sleep(500);
sel=sel<<1|0x01;
}
sel=0xFF;
P0=sel;
sleep(10000);
}
思考題:
1.修改程序,實現 4 個按鍵控制,自上至下、自下至上、自中間至兩邊、自兩邊至中間循環點亮 LED,循環次數均為 3 圈,3 圈結束后恢復到所有 LED 熄滅的正常狀態。請編寫程序并調試。
2.編寫程序,實現 8 個發光二極管同時點亮,但亮度從上到下由亮變暗(選做)。
3. 簡述你在本實驗中遇到過哪些問題?這些問題是解決的?有何收獲和體會?
實驗一(下) 報警產生器設計
設計要求:
用P4.4輸出1KHz和500Hz的音頻信號驅動揚聲器,作報警信號,要求1KHz信號響100ms,500Hz信號響200ms,交替進行,P1.7接一開關進行控制,當開關合上響報警信號,當開關斷開報警信號停止,請按流程圖編出程序。
1)首先定義??sfr P4=0xe8
2)然后主函數設置 P4SW=0X70; //將P4.4/5/6設置為I/O口
注意P4.4口!
把喇叭當作LED燈,分別給端口送1khz和500hz的方波試試看效果是什么樣的。
軟件代碼:
依據具體調試過程,方法不唯一,在重點部分加入注釋,使程序更容易閱讀和理解。
參考代碼:
/*****************************************************************************
* 頭文件 *
*****************************************************************************/
#include "hml/hml.h"
/*****************************************************************************/
/** 初始化
******************************************************************************/
void sys_init(void)
{
;
}
void sound(int hz)
{
char time=500/hz;
sleep(time);
P4_4=1;
sleep(time);
P4_4=0;
}
/*****************************************************************************/
/** 主函數
******************************************************************************/
void main(void)
{
sys_init();
unsigned int a=600;
while(a--)
{
sound(500);
}
a=600;
while(a--)
{
sound(250);
}
a=600;
while(a--)
{
sound(125);
}
}
思考題:
揚聲器音量大小如何調節,是否和LED亮度調節類似呢?
單片機 硬件開發
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。