設計題目:甲機通過串口控制乙機LED閃爍 一、設計實驗條件 計算機與通信工程實驗室 二、設計任務及要求 兩片單片機(稱為甲機和乙機)之間采用串行通信方式1來控制乙機的LED1閃爍,LED2閃爍, LED1和LED2同時閃爍,或者同時關閉LED1和LED2。 - 甲機發送字符“A”,控制乙機的LED1閃爍;
- 甲機發送字符“B”,控制乙機的LED2閃爍;
- 甲機發送字符“C”,控制乙機的LED1和LED2同時閃爍;
- 甲機停止發送任何命令字符,則乙機的LED1和LED2均停止閃爍。
在上述功能的基礎上,在電路中添加LED指示燈和蜂鳴器,使系統可以同時識別依次按下的多個按鍵,在到達指定位置后蜂鳴器發出短暫聲音且LED閃爍片刻,數字繼續滾動顯示。例如,當前位置在1層時,用戶依次按下4、6、5時,則數字分別向上滾動到4、5、6時暫停且LED閃爍片刻,同時蜂鳴器發出提示音。聲音頻率可固定或可變。如果在待去的樓層的數字中,有的在當前運行的反方向,則數字現在當前方向運行完畢后,再依次按順序前往反方向的數字位置。
三、設計報告的內容 為了增強實踐能力,拓展學習范圍,加深對單片機原理及相關知識的理解與應用,我們組隊參加了此次單片機課程設計,并選擇了“甲機通過串口控制乙機LED閃爍”作為本次課設的題目。 設計電路圖:
結束語:本次單片課設試驗是鍛煉我們動手能力的一個考驗,讓我們將課上學到的以及試驗中學到的融入到此次課設中,極大地增強了我們的實際操作能力,感謝我的隊友和老師。
參考資料陳海宴.51單片機原理及應用【M】.北京:北京航空航天大學出版社,2006年四、設計時間與安排
1、設計時間: 1周2、設計時間安排: 熟悉實驗設備、收集資料: 1 天設計圖紙、實驗、計算、程序編寫調試:4 天編寫課程設計報告: 1 天答辯: 1 天
MAX232:簡介和主要作用 【MAX232是一種雙組驅動器/接收器,片內含有一個電容性電壓發生器以便在單5V電源供電時提供EIA/TIA-232-E電平。】 當用單片機和PC機通過串口進行通信,盡管單片機有串行通信的功能,但單片機提供的信號電平和RS232的標準不一樣,因此要通過max232這種類似的芯片進行電平轉換。 引腳介紹 第一部分是電荷泵電路。由1、2、3、4、5、6腳和4只電容構成。功能是產生+12v和-12v兩個電源,提供給RS-232串口電平的需要。 第二部分是數據轉換通道。由7、8、9、10、11、12、13、14腳構成兩個數據通道。 其中13腳(R1IN)、12腳(R1OUT)、11腳(T1IN)、14腳(T1OUT)為第一數據通道。 8腳(R2IN)、9腳(R2OUT)、10腳(T2IN)、7腳(T2OUT)為第二數據通道。 TTL/CMOS數據從11引腳(T1IN)、10引腳(T2IN)輸入轉換成RS-232數據從14腳(T1OUT)、7腳(T2OUT)送到電腦DB9插頭;DB9插頭的RS-232數據從13引腳(R1IN)、8引腳(R2IN)輸入轉換成TTL/CMOS數據后從12引腳 (R1OUT)、9引腳(R2OUT)輸出。 第三部分是供電。15腳GND、16腳VCC(+5v)。 電路分析: 甲機P1.0口連接一個秒脈沖,當開關按下時,產生一個下降沿,此時軟件命令p3.1口發送一個字符,經過max232傳輸到乙機p3.0口,由軟件命令控制乙機p0.0口和p0.3口連接的LED閃爍與熄滅。從而實現甲機通過串口控制乙機LED閃爍。 代碼:甲機程序
- #include<reg51.h>
- #define uchar unsigned char
- sbit K1=P1^0; //P1.0腳作為換檔開關
- void delay(); //延時子函數
-
- void conveysymbol(uchar c) //傳送字符
- {
- SBUF=c; //將要傳送字符的ASCII碼寫入甲機的SBUF上
- while(TI==0); //當SBUF數據滿時跳出循環
- TI=0; //將TI手動清零
- }
-
- void main()
- {
- uchar model=0; //換檔變量
- SCON=0x40; //串口為工作方式1
- TMOD=0x20; //定時器1工作方式2
- PCON=0x00; //波特率不加倍
- TH1=0xfd; //波特率為9600bps
- TL1=0xfd;
- TI=0; //默認SBUF未寫滿
- TR1=1; //啟動定時器1
- while(1)
- {
- if(K1==0)
- {
- while(K1==0); //每檢測到P1.0引腳有下降沿,即換檔
- model=(model+1)%4;
- }
- switch(model)
- {
- case 0: break;//無操作
- case 1: conveysymbol('A'); break; //傳送字符A的ASCII碼
- case 2: conveysymbol('B'); break; //傳送字符B的ASCII碼
- case 3: conveysymbol('C'); break; //傳送字符C的ASCII碼
- }
- delay(); //延時
- }
-
- }
-
- void delay() //延時子函數
- {
- uchar i,j;
- for(i=200;i>0;i--)
- for(j=500;j>0;j--);
- }
-
- 乙機程序
-
-
- #include<reg51.h>
- #define uchar unsigned char
- sbit LED1=P0^0; //P0.0引腳接LED燈1
- sbit LED2=P0^3; //P0.0引腳接LED燈1
- void delay(); //延時子函數
- void main()
- {
- SCON=0x50; //串口為工作方式1,允許接收
- TMOD=0x20; //定時器1工作方式2
- PCON=0x00; //波特率不加倍
- TH1=0xfd; //波特率為9600bps
- TL1=0xfd;
- RI=0; //默認SBUF未寫滿
- TR1=1; // 啟動定時器1
- LED1=LED2=0; //led燈初始狀態為滅
- while(1)
- {
- if(RI) //當RI為1,即SBUF寫滿時,進入換檔
- {
- RI=0; //手動將RI清零
- switch(SBUF)
- {
- case 'A': LED1=~LED1;LED2=0;break; //接收到A的ASCII碼值時執行此句
- case 'B': LED2=~LED2;LED1=0;break; //接收到B的ASCII碼值時執行此句
- case 'C': LED1=~LED1;LED2=~LED2; //接收到C的ASCII碼值時執行此句
- }
- }
- else LED1=LED2=0; //若接收不到來自主機的字符,兩個led燈均滅
- delay();
- }
-
- }
- void delay()
- {
- uchar i,j;
- for(i=200;i>0;i--)
- for(j=500;j>0;j--);
- }
復制代碼
完整的Word格式文檔51黑下載地址:
串口.doc
(188.5 KB, 下載次數: 26)
2018-9-11 17:06 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|