|
本次實(shí)驗(yàn)是通過(guò)上上位機(jī)控制實(shí)驗(yàn)一的升級(jí),通過(guò)輸入數(shù)字來(lái)控制流水燈的速度和方向。在窗口輸入3,流水燈向右流動(dòng);在窗口輸入4,流水燈向左流動(dòng);在窗口輸入5,流水燈左右流動(dòng);在窗口輸入0,流水燈慢速流動(dòng);在窗口輸入1,流水燈中速流動(dòng);在窗口輸入2,流水燈快速流動(dòng)
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機(jī)源程序如下:
- #include "reg51.h"
- #define u8 unsigned char//0--255
- #define u16 unsigned int//0--65535
- void delay16(u16 i){while(i--);}
- #include "uart.h"
- u8 code tab[15]={1,2,4,8,16,32,64,128,64,32,16,8,4,2,1};
- u16 sudu=20000;
- u8 fang=0;//0向右,1向左,2左右
- void loop(u8 d1,u8 d2)//流水燈效果
- {
- u8 i=0;
- for(i=d1;i<d2;i++)
- {
- P1=~tab[i];
- delay16(sudu);
- }
- }
- void main()
- {
- UART1_init();
- while(1)
- {
- if(fang==0)loop(0,8);//向左
- if(fang==1)loop(7,15);//請(qǐng)補(bǔ)充代碼,向右
- if(fang==2)loop(0,15);//請(qǐng)補(bǔ)充代碼,左右
- }
- }
- void UART_INT(void) interrupt 4//暫時(shí)只接收1個(gè)數(shù)
- {
- u8 i=0;//獲取串口發(fā)送過(guò)來(lái)的數(shù)
- if(RI)//如果是串口輸入引起的中斷
- {
- i=SBUF & 0x0F;//或者if(i>0x2F && i<0x3A)i=SBUF-0x30;
- switch(i)
- {
- case 0:sudu=60000;break;
- case 1:sudu=30000;break;
- case 2:sudu=3000;break;
- case 3:fang=1;break;
- case 4:fang=0;break;
- case 5:fang=2;break;
- }//請(qǐng)補(bǔ)充代碼,輸入0慢1中2快3右4左5左右
- RI=0;
- }
- else TI=0;//串口輸出引起的中斷,不管
- }
復(fù)制代碼
所有資料51hei提供下載:
串口控制2-控制流水燈方向速度.7z
(108.79 KB, 下載次數(shù): 21)
2021-7-19 03:08 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|