日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

遥控心形流水灯

發(fā)布時(shí)間:2023/12/10 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 遥控心形流水灯 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

??????????????????????

??????????????????????? 畢業(yè)設(shè)計(jì)論文?

? ???????基于單片機(jī)的遙控心形流水燈設(shè)計(jì)? ????????????????

班??? 級 ????????????????????????? ??

姓??? 名 ?????????????????????????? ?????

學(xué)??? 號 ???? ????????????? ???????

指導(dǎo)教師 ???? ????????????? ???????????

提交日期 ????2015 年? 月 ?日?????????? ?????

言……………………………………………………………2???1.1設(shè)計(jì)任務(wù)……………………………………………………….2??

1.設(shè)計(jì)要求……………………………………………………2?

課題綜述………………………………………………………2?2.1課題的來源………………………………………………?2???2.2面對的問題……………………………………………………3??

2?系統(tǒng)分析………………………………………………………3

3.1?STC89C52單片機(jī)引腳圖及引腳功能介紹…………………4

4系統(tǒng)設(shè)計(jì)………………………………………………………4?4.1硬件設(shè)計(jì)…………………………………………………4?4.1.1硬件框圖……………………………………………………4?

4.1.2硬件詳細(xì)設(shè)計(jì)………………………………………………5

4.2軟件設(shè)計(jì)………………………………………………………6

4.3?硬件原理圖…………………………………………………7?4.4?元件清單………………………………………………………8

4.6代碼編寫………………………………………………………9

5心得體會…………………………………………………………9?

6致謝………………………………………………………………10?

參考文獻(xiàn)…………………………………………………………11

1?引言

單片機(jī)課程設(shè)計(jì)主要是為了讓我們增進(jìn)對STC89C51單片機(jī)電路的感性認(rèn)識,加深對理論方面的理解。了解軟硬件的有關(guān)知識,并掌握軟硬件設(shè)計(jì)過程、方法及實(shí)現(xiàn),為以后設(shè)計(jì)和實(shí)現(xiàn)應(yīng)用系統(tǒng)打下良好基礎(chǔ)。另外,通過簡單課題的設(shè)計(jì)練習(xí),使我們了解必須提交的各項(xiàng)工程文件,達(dá)到鞏固、充實(shí)和綜合運(yùn)用所學(xué)知識解決實(shí)際問題的目的。

1.1設(shè)計(jì)任務(wù)

設(shè)計(jì)一個(gè)單片機(jī)控制的心形流水燈系統(tǒng)

1.2設(shè)計(jì)要求

(1)可實(shí)現(xiàn)多種的流水燈模式

(2)可通過紅外遙控進(jìn)行控制

2?課題綜述?

2.1?課題的來源

當(dāng)今社會,這種由單片機(jī)芯片控制各種硬件工作的技術(shù)也日益成熟,并普及在交通、化工、機(jī)械等各個(gè)領(lǐng)域。而流水燈這項(xiàng)技術(shù)在生活中的應(yīng)用更是廣泛,較為貼近生活。而流水燈控制的設(shè)計(jì)所需要的知識也正好吻合了我們本學(xué)期對于單片機(jī)這門課程的學(xué)習(xí),所以設(shè)計(jì)流水燈控制的這個(gè)課題讓我們對知識的學(xué)習(xí)和鞏固都有了進(jìn)一步的加深。

2.2?面對的問題?

這次課程設(shè)計(jì)是通過STC89C52位單片機(jī)實(shí)現(xiàn)。但面對的問題卻是兩方面的:一個(gè)是軟件的設(shè)計(jì),也就是實(shí)現(xiàn)流水燈控制功能的程序編輯;另一個(gè)是硬件的設(shè)計(jì),需要我們自己連接、焊接電路板。而更為嚴(yán)峻的就是設(shè)計(jì)的最后還要將軟硬件相結(jié)合。

3?系統(tǒng)分析

3.1?STC?89C52單片機(jī)引腳圖及引腳功能介紹

本次設(shè)計(jì)的目的在于加深STC89C52單片機(jī)的理解,首先來簡單認(rèn)識一下,它的引腳如圖3-1所示:?圖3.1?STC89C52

STC89C52引腳可以分為四個(gè)部分,各個(gè)引腳功能如下:

主電源引腳(2根)???

??Vcc:電源輸入,接+5V電源?

GND:接地線?

??外接晶振引腳(2根)?

XTAL1:片振蕩電路的輸入端?

XTAL2:片振蕩電路的輸出端?

??控制引腳(4根)?

RST/PROG:復(fù)位引腳,引腳上出現(xiàn)2個(gè)機(jī)器周期的高電平將使單片機(jī)復(fù)位。?ALE/VPP:地址鎖存允許信號?

PESN:外部存儲器選通信號?

EA/VPP:程序存儲器的外部選通,接低電平從外部程序存儲器讀指令,如果接高電平則從部程序存儲器讀指令

??可編程輸入/輸出引腳(32根)?STC89C52單片機(jī)有4組8位的可編程I/O口,分別為P0、P1、P2、P3口,每個(gè)口有8位(8根引腳),共32根。

P0口:8位雙向I/O口線?

P1口:8位準(zhǔn)雙向I/O口線?

P2口:8位準(zhǔn)雙向I/O口線?

P3口:8位準(zhǔn)雙向I/O口線

4系統(tǒng)設(shè)計(jì)?

4.1硬件設(shè)計(jì)?

4.1.1.硬件框圖

按照單片機(jī)系統(tǒng)擴(kuò)展與系統(tǒng)配置狀況,單片機(jī)應(yīng)用系統(tǒng)可分為最小系統(tǒng)、最小功耗系統(tǒng)及典型系統(tǒng)等。STC89C52單片機(jī)是本次課程設(shè)計(jì)運(yùn)用的主要原件。流水燈控制設(shè)計(jì)是用一個(gè)帶有多個(gè)發(fā)光二極管的單片機(jī)最小應(yīng)用系統(tǒng),即為由發(fā)光二極管、晶振、復(fù)位、電源等電路和必要的軟件組成的單個(gè)單片機(jī)。從原理圖中可以看出,如果要讓接在P1、P2、P3、P0口的LED亮起來,那么只要把P2、P1、P3、P0口的電平變?yōu)榈碗娖骄涂梢粤?#xff1b;因此,要實(shí)現(xiàn)流水燈功能,我們只要將發(fā)光二極管LED1~LED32依次點(diǎn)亮、熄滅,LED燈便會一亮一暗的做流水燈了。在此我們還應(yīng)注意一點(diǎn),由于人眼的視覺暫留效應(yīng)以及單片機(jī)執(zhí)行每條指令的時(shí)間很短,我們在控制二極管亮滅的時(shí)候應(yīng)該延時(shí)一段時(shí)間,否則我們就看不到“流水”效果了。?

4.1.2.硬件詳細(xì)設(shè)計(jì)

(1)復(fù)位電路部分??

當(dāng)要對晶體重置時(shí),只要對此引腳電平提升至高電平并保持兩個(gè)及其周期以上的時(shí)間便能完成系統(tǒng)重置的各項(xiàng)動作,使得部特殊功能寄存器容均被設(shè)成已知狀態(tài)。

(2)晶振部分

(3)紅外接收頭部分

4.2?軟件設(shè)計(jì)

單片機(jī)的應(yīng)用系統(tǒng)由硬件和軟件組成,在硬件原理圖搭建完成上電之后,我們還不能看到流水燈循環(huán)點(diǎn)亮的現(xiàn)象,我們還需要編寫程序控制單片機(jī)管腳電平的高低變化,來實(shí)現(xiàn)發(fā)光二極管的一亮一滅

紅外遙控的工作原理

系統(tǒng)上電初始化后,對單片機(jī)的P3.3口進(jìn)行檢測,當(dāng)其為高電平時(shí),系統(tǒng)處于等待狀態(tài)。當(dāng)其為低電平時(shí),將啟動中斷服務(wù)程序,實(shí)現(xiàn)接收數(shù)據(jù)幀。需要說明的是:數(shù)據(jù)幀采用中斷方式進(jìn)行接收,單片機(jī)在外中斷1方式下工作。在數(shù)據(jù)幀接收時(shí),將對所接收數(shù)據(jù)的前3位碼的碼寬進(jìn)行驗(yàn)證。前3位碼的碼寬分別為4ms、2ms、4ms,若任意一位的碼寬不滿足要求,都將作為錯(cuò)誤碼處理,當(dāng)系統(tǒng)接收到的高電平脈寬大于5ms時(shí),結(jié)束脈沖接收。然后系統(tǒng)會對所接收脈沖的最后兩位脈寬進(jìn)行驗(yàn)證,其值應(yīng)分別是2ms和4ms,否則將會作為錯(cuò)誤碼處理,最后系統(tǒng)根據(jù)累加器A中的脈沖個(gè)數(shù),在單片機(jī)P0或P2口的某一對應(yīng)引腳輸出控制信號,同時(shí)在P1口輸出相應(yīng)的二進(jìn)制數(shù)據(jù)。此時(shí)即完成一次數(shù)據(jù)的接收處理。HRM5700B接收8個(gè)編碼時(shí)的輸出信號波形如下圖

紅外接收頭接收8個(gè)編碼時(shí)的輸出信號波形圖

數(shù)據(jù)幀的接收處理

當(dāng)紅外線接收器輸出脈沖幀數(shù)據(jù)時(shí),第一位碼的低電平將啟動中斷程序,實(shí)時(shí)接收數(shù)據(jù)幀。在數(shù)據(jù)接收時(shí),先對第一位(起始位)碼的碼寬進(jìn)行驗(yàn)證。若第一位低電平碼的脈寬小于2ms,將作為錯(cuò)誤碼處理;否則認(rèn)為是起始碼,累加器A加1.當(dāng)間隔位的高電平大于3ms時(shí),結(jié)束接收,然后根據(jù)累加器A中的脈沖個(gè)數(shù),執(zhí)行相應(yīng)的輸出操作。圖3-14為紅外線接收器輸出的一幀遙控碼波形圖。

遙控接收控制流程圖

遙控接收中斷流程圖

中斷過程:首先判斷低電平脈寬度是否大于2ms,若脈寬不到2ms,中斷返回;若低電平大于2ms,則接收并地低電平脈沖計(jì)數(shù),接下來看判斷高電平脈沖寬度是否大于3ms,若脈寬不到3ms,則返回上一接收計(jì)數(shù)過程;若高電平脈寬大于3ms,則按照脈沖個(gè)數(shù)至對應(yīng)功能程序。此時(shí)中斷返回。

4.3?硬件原理圖

4.4?元件清單

代碼編寫

#include<reg51.h>

#include<intrins.h>

#define uint unsigned int

#define uchar unsigned char

sbit P0_0=P0^0;

sbit P0_1=P0^1;

sbit P0_2=P0^2;

sbit P0_3=P0^3;

sbit P0_4=P0^4;

sbit P0_5=P0^5;

sbit P0_6=P0^6;

sbit P0_7=P0^7;

sbit P1_0=P1^0;

sbit P1_1=P1^1;

sbit P1_2=P1^2;

sbit P1_3=P1^3;

sbit P1_4=P1^4;

sbit P1_5=P1^5;

sbit P1_6=P1^6;

sbit P1_7=P1^7;

sbit P3_0=P3^0;

sbit P3_1=P3^1;

sbit P3_3=P3^3;

sbit P3_4=P3^4;

sbit P3_5=P3^5;

sbit P3_6=P3^6;

sbit P3_7=P3^7;

sbit P2_0=P2^0;

sbit P2_1=P2^1;

sbit P2_2=P2^2;

sbit P2_3=P2^3;

sbit P2_4=P2^4;

sbit P2_5=P2^5;

sbit P2_6=P2^6;

sbit P2_7=P2^7;

uint pwm=99;???????? //調(diào)節(jié)占空比變量

uint su=0;

uint vaule=0;

char moshi=0;

char lm=0;

uint sudu=60;

sbit hwx=P3^2;?????? //紅外接收數(shù)據(jù)引腳,

unsigned char ly_lhj[4];?????????????? //保存NEC的四個(gè)字節(jié)數(shù)據(jù)

bit ly_flag=0;??????????????????????????? //成功接收標(biāo)志

void delay1(void){??????

??? unsigned char i=10;

??? while(i--);

}

void delay(unsigned int i)//延時(shí)函數(shù)

{

??? unsigned int a,b;

??? for(a=sudu;a>0;a--)

?????? for(b=i;b>0;b--);

}

void dis1()????????? //花樣一函數(shù)

{

??? uchar j;

??? int time=70;

??? P2=0XFE;

??? delay(time);

??? for(j=0;j<7;j++)

??? {

?????? P2=(P2<<1);

?????? delay(time);

?????? if(ly_flag==1){ly_flag=0;goto hm;}

??? }

???

??? P3_0=0;

??? delay(time);

??? P3_1=0;

??? delay(time);

??? P3_3=0;

??? delay(time);

??? if(ly_flag==1){ly_flag=0;goto hm;}

??? P3_4=0;

??? delay(time);

??? P3_5=0;

??? delay(time);

??? P3_6=0;

??? delay(time);

??? if(ly_flag==1){ly_flag=0;goto hm;}

??? P3_7=0;

??? delay(time);

??? P0=0XFE;

??? delay(time);

??? for(j=0;j<7;j++)

??? {

?????? P0=(P0<<1);

?????? delay(time);

?????? if(ly_flag==1){ly_flag=0;goto hm;}

??? }

???

??? P1=0XFE;

??? delay(time);

??? for(j=0;j<7;j++)

??? {

?????? P1=(P1<<1);

?????? delay(time);

?????? if(ly_flag==1){ly_flag=0;goto hm;}

??? }

??? delay(1000);

??? if(ly_flag==1){ly_flag=0;goto hm;}

??? delay(1000);

??? if(ly_flag==1){ly_flag=0;goto hm;}

??? delay(1000);

??? if(ly_flag==1){ly_flag=0;goto hm;}

??? delay(1000);

hm:;

}

void dis2()

{

??? char j,aa;

??? int time=100;

??? aa=0x80;

??? for(j=0;j<7;j++)

??? {

?????? P1=aa;?

?????? delay(time);

?????? aa=_cror_(aa,1);

?????? aa=aa | 0x80;

?????? if(ly_flag==1){ly_flag=0;goto hm;}

??? }

??? P1=0XFF;

??? aa=0x80;

??? for(j=0;j<7;j++)

??? {

?????? P0=aa;?

?????? delay(time);

?????? aa=_cror_(aa,1);

?????? aa=aa | 0x80;

?????? if(ly_flag==1){ly_flag=0;goto hm;}

??? }

??? P0=0XFF;??

??? P3_7=1;

??? delay(time);

??? P3_6=1;

??? delay(time);

??? P3_5=1;

??? delay(time);

??? P3_4=1;

??? delay(300);

??? if(ly_flag==1){ly_flag=0;goto hm;}

??? P3_3=1;

??? delay(time);

??? P3_1=1;

??? delay(time);

??? P3_0=1;

??? delay(time);

??? if(ly_flag==1){ly_flag=0;goto hm;}

???

??? aa=0x80;

??? for(j=0;j<7;j++)

??? {

?????? P2=aa;?

?????? delay(time);

?????? aa=_cror_(aa,1);

?????? aa=aa | 0x80;

?????? if(ly_flag==1){ly_flag=0;goto hm;}

??? }

??? P2=0XFF;

hm:;??????

}

void dis3()

{

??? uchar j;

??? P2=0XFE;

??? delay(100);

??? for(j=0;j<7;j++)

??? {

?????? P2=(P2<<1)|0X01;

?????? delay(100);

?????? if(ly_flag==1){ly_flag=0;goto hm;}

??? }

??? P2=0XFF;

??? P3_0=0;

??? delay(100);

??? P3_0=1;

??? P3_1=0;

??? delay(100);

??? P3_1=1;

??? P3_3=0;

??? delay(100);

??? P3_3=1;

??? P3_4=0;

??? delay(100);

??? if(ly_flag==1){ly_flag=0;goto hm;}

??? P3_4=1;

??? P3_5=0;

??? delay(100);

??? P3_5=1;

??? P3_6=0;

??? delay(100);

??? P3_6=1;

??? P3_7=0;

??? delay(100);

??? P3_7=1;

??? if(ly_flag==1){ly_flag=0;goto hm;}

??? P0=0XFE;

??? delay(100);

??? for(j=0;j<7;j++)

??? {

?????? P0=(P0<<1)|0X01;

?????? delay(100);

?????? if(ly_flag==1){ly_flag=0;goto hm;}

??? }

??? P0=0XFF;

???

??? P1=0XFE;

??? delay(100);

??? for(j=0;j<7;j++)

??? {

?????? P1=(P1<<1)|0X01;

?????? delay(100);

?????? if(ly_flag==1){ly_flag=0;goto hm;}

??? }

??? P1=0XFF;

hm:;??

}

void dis4()

{

??? char j;

??? P2=0X00;

??? delay(300);??

??? P3_0=0;

??? P3_1=0;

??? P3_3=0;

??? P3_4=0;

??? P3_5=0;

??? P3_6=0;

??? P3_7=0;

??? delay(300);??

??? if(ly_flag==1){ly_flag=0;goto hm;}

??? P0=0X00;

??? delay(300);??

??? P1=0X00;

??? delay(300);?? //

??? for(j=0;j<6;j++)

??? {

?????? P0=0XFE;

?????? P1=0XFF;

???

?????? P2=0X00;

?????? P3_0=0;

?????? P3_1=0;

?????? P3_3=0;

?????? P3_4=0;

?????? P3_5=0;

?????? P3_6=0;

?????? P3_7=0;

?????? delay(300);??

?????? if(ly_flag==1){ly_flag=0;goto hm;}

?????? P0=0X01;

?????? P1=0X00;

???

?????? P2=0XFF;

?????? P3_0=1;

?????? P3_1=1;

?????? P3_3=1;

?????? P3_4=1;

?????? P3_5=1;

?????? P3_6=1;

?????? P3_7=1;

?????? delay(300);??????

??? }

hm:;

}

void dis5()

{

??? char i;

??? int time=200;

??? P0=0XFF;

??? P3=0XFF;

??? for(i=0;i<12;i++)

??? {

?????? P2=0XFD;

?????? P1=0X7F;

?????? delay(time);?

?????? P2=0XFB;

?????? P1=0XBF;?

?????? delay(time);

?????? P2=0XF7;

?????? P1=0XDF;?

?????? delay(time);

?????? if(ly_flag==1){ly_flag=0;goto hm;}

?????? P2=0XEF;

?????? P1=0XEF;?

?????? delay(time);

?????? P2=0XDF;

?????? P1=0XF7;?

?????? delay(time);

?????? P2=0XBF;

?????? P1=0XFB;?

?????? delay(time);

?????? if(ly_flag==1){ly_flag=0;goto hm;}

?????? P2=0X7F;

?????? P1=0XFD;?

?????? delay(time);

?????? P2=0XFF;

?????? P3=0XFE;

?????? P1=0XFE;?

??? ??? delay(time);//

?????? P1=0XFF;

?????? P3=0XFD;

?????? P0=0X7F;

?????? delay(time);

?????? if(ly_flag==1){ly_flag=0;goto hm;}

?????? P3=0XF7;?

?????? P0=0XBF;

?????? delay(time);

?????? P3=0XEF;??

?????? P0=0XDF;

?????? delay(time);

?????? P3=0XDF;

?????? P0=0XEF;

?????? delay(time);

?????? if(ly_flag==1){ly_flag=0;goto hm;}

??? ??? P3=0XBF;

?????? P0=0XF7;

?????? delay(time);

?????? P3=0X7F;

?????? P0=0XFB;

?????? delay(time);

?????? P3=0XFF;

?????? P0=0XFC;

?????? delay(time);

?????? P0=0XFF;

?????? if(i<4)time=time-40;

??? }

hm:;

}

void dis6()

{

??? char j;

??? int time=200;

??? for(j=0;j<12;j++)

??? {

?????? P0=0XFC;//

?????? P2=0XFD;//P21

?????? P1=0X7F;//P17

?????? delay(time);

?????? P3=0X7F;//P37

?????? P0=0XFB;//P02

?????? P2=0XFB;//P22

?????? P1=0XBF;//P16

?????? delay(time);

?????? P3=0XBF;//P36

?????? P0=0XF7;//P03

?????? P2=0XF7;//P23

?????? P1=0XDF;//P15

?????? delay(time);

?????? if(ly_flag==1){ly_flag=0;goto hm;}

?????? P3=0XDF;//P35

?????? P0=0XEF;//P04

?????? P2=0XEF;//P24

?????? P1=0XEF;//P14?

?????? delay(time);

?????? P3=0XEF;//P34

?????? P0=0XDF;//P05

?????? P2=0XDF;//P25

?????? P1=0XF7;//P13? ?????

?????? delay(time);

?????? P3=0XF7;//P33?

?????? P0=0XBF;//P06

?????? P2=0XBF;//P26

?????? P1=0XFB;//P12?

?????? delay(time);

?????? if(ly_flag==1){ly_flag=0;goto hm;}

?????? P3=0XFD;//P31

?????? P0=0X7F;//P07

?????? P2=0X7F;//P27

?????? P1=0XFD;//P11? ??

?????? delay(time);

?????? P2=0XFF;

?????? P0=0XFF;

?????? P1=0XFE;//P10

?????? P3=0XFE;//P30

?????? delay(time);

?????? P1=0XFD;//P11

?????? P2=0X7F;//P27

?????? P0=0X7F;//P07

?????? P3=0XFD;//P31

?????? delay(time);

?????? if(ly_flag==1){ly_flag=0;goto hm;}

?????? P1=0XFB;//P12

?????? P2=0XBF;//P26

?????? P3=0XF7;//P33

?????? P0=0XBF;//P06

?????? delay(time);

?????? P1=0XF7;//P13

?????? P2=0XDF;//P25

?????? P3=0XEF;//P34

?????? P0=0XDF;//P05

?????? delay(time);?

?????? P1=0XEF;//P14

?????? P2=0XEF;//P24

?????? P3=0XDF;//P35

?????? P0=0XEF;//P04

?????? delay(time);

?????? if(ly_flag==1){ly_flag=0;goto hm;}

?????? P1=0XDF;//P15

?????? P2=0XF7;//P23

?????? P3=0XBF;//P36

?????? P0=0XF7;//P03

?????? delay(time);

?????? P1=0XBF;//P16

?????? P2=0XFB; //P22

?????? P3=0X7F;//P37

?????? P0=0XFB;//P02

?????? delay(time);

?????? P1=0X7F;//P17

?????? P2=0XFD;//P21

?????? P3=0XFF;//

?????? P0=0XFC;

?????? delay(time);

?????? P1=0XFF;//P17

?????? P2=0XFF;//P21

?????? P0=0XFF;

?????? if(j<4)time=time-40;???????????

??? }

hm:;??

}

void dis7()

{

??? char j;

??? int time=70;

??? for(j=0;j<3;j++)

??? {

?????? P0=0XFC;

?????? delay(time);

?????? P3=0X7F;

?????? P0=0XF8;

?????? delay(time);

?????? P3=0X3F;

?????? P0=0XF0;

?????? delay(time);

?????? P3=0X1F;

?????? P0=0XE0;

?????? delay(time);

?????? P3=0X0F;

?????? P0=0XC0;

?????? delay(time);

?????? P3=0X07;

?????? P0=0X80;

?????? delay(time);

?????? P3=0X05;

?????? P0=0X00;

?????? delay(time);//

?????? if(ly_flag==1){ly_flag=0;goto hm;}

?????? P3=0X04;

?????? P1=0XFE;

?????? delay(time);

?????? P2=0X7F;

?????? P1=0XFC;

?????? delay(time);

?????? P2=0X3F;

?????? P1=0XF8;

?????? delay(time);

?????? P2=0X1F;

?????? P1=0XF0;

?????? delay(time);

?????? P2=0X0F;

?????? P1=0XE0;

?????? delay(time);

?????? P2=0X07;

?????? P1=0XC0;

?????? delay(time);

?????? if(ly_flag==1){ly_flag=0;goto hm;}

?????? P2=0X03;

?????? P1=0X80;

?????? delay(time);

?????? P2=0X01;

?????? P1=0X00;

?????? delay(time);

?????? P2=0X00;

?????? delay(time);

?????? if(ly_flag==1){ly_flag=0;goto hm;}

?????? delay(1000);

?????? if(ly_flag==1){ly_flag=0;goto hm;}

?????? delay(1000);

?????? if(ly_flag==1){ly_flag=0;goto hm;}

?????? delay(1000);

?????? P0=0XFF;

?????? P1=0XFF;

?????? P2=0XFF;

?????? P3=0XFF;??

??? }

hm:;

}

void dis8()

{

??? char j;

??? int time=250;

??? for(j=0;j<10;j++)

??? {

?????? P2=0XAA;

?????? P3=0X56;

?????? P0=0X55;

?????? P1=0X55;

?????? delay(time);

?????? P2=0X55;

?????? P3=0XAD;

?????? P0=0XAA;

?????? P1=0XAA;

?????? delay(time);

?????? if(ly_flag==1){ly_flag=0;goto hm;}

?????? if(j<3)time=time-60;

??? }

hm:;

}

void dis9()

{

??? char j;

??? for(j=0;j<4;j++)

??? {

?????? P2=0X00;

?????? P3=0X04;

?????? P0=0XFE;

?????? P1=0XFF;

?????? delay(200);??

?????? P2=0XFF;

?????? P3=0XFF;

?????? P0=0X01;

?????? P1=0X00;

?????? delay(200);??

?????? if(ly_flag==1){ly_flag=0;goto hm;}

??? }

hm:;

}

void dis10()

{

??? char j;

??? for(j=0;j<4;j++)

??? {

?????? P2=0X00;

?????? P1=0X00;

?????? P3=0XFE;

?????? P0=0XFF;

?????? delay(200);??

?????? P2=0XFF;

?????? P1=0XFF;

?????? P3=0X04;

?????? P0=0X00;

?????? delay(200);??

?????? if(ly_flag==1){ly_flag=0;goto hm;}

??? }

hm:;

}

void dis11()

{

??? char j;

??? for(j=0;j<5;j++)

??? {

?????? P2=0X00;

?????? P3=0X04;

?????? P0=0X00;

?????? P1=0X00;

?????? delay(100);

?????? P2=0XFF;

?????? P3=0XFF;

?????? P0=0XFF;

?????? P1=0XFF;

?????? delay(100);

?????? if(ly_flag==1){ly_flag=0;goto hm;}

??? }

hm:;

}

void dis12()

{

??? char j;

??? int time=70;

??? for(j=0;j<6;j++)

??? {

?????? P2=0XFE;

?????? P3=0XFE;

?????? P0=0XFE;

?????? P1=0XFE;

?????? delay(time);

?????? P2=0XFD;

?????? P3=0XFD;

?????? P0=0XFD;

?????? P1=0XFD;

?????? delay(time);

?????? P2=0XFB;

?????? P3=0XF7;

?????? P0=0XFB;

?????? P1=0XFB;

?????? delay(time);

?????? P2=0XF7;

?????? P3=0XEF;

?????? P0=0XF7;

?????? P1=0XF7;

?????? delay(time);

?????? if(ly_flag==1){ly_flag=0;goto hm;}

?????? P2=0XEF;

?????? P3=0XDF;

?????? P0=0XEF;

?????? P1=0XEF;

?????? delay(time);

?????? P2=0XDF;

?????? P3=0XBF;

?????? P0=0XDF;

?????? P1=0XDF;

?????? delay(time);

?????? P2=0XBF;

?????? P3=0X7F;

?????? P0=0XBF;

?????? P1=0XBF;

?????? delay(time);

?????? P2=0X7F;

?????? P3=0XFF;

?????? P0=0X7F;

?????? P1=0X7F;

?????? delay(time);

??? }

hm:;??

}

void dis13()

{

??? int time=200;

??? P2=0XFE;

??? P3=0XFE;

??? P0=0XFE;

??? P1=0XFE;

??? delay(time);

??? P2=0XFC;

??? P3=0XFC;

??? P0=0XFC;

??? P1=0XFC;

??? delay(time);

??? P2=0XF8;

??? P3=0XF4;

??? P0=0XF8;

??? P1=0XF8;

??? delay(time);

??? if(ly_flag==1){ly_flag=0;goto hm;}

??? P2=0XF0;

??? P3=0XE4;

??? P0=0XF0;

??? P1=0XF0;

??? delay(time);

??? P2=0XE0;

??? P3=0XC4;

??? P0=0XE0;

??? P1=0XE0;

??? delay(time);?

??? P2=0XC0;

??? P3=0X84;

??? P0=0XC0;

??? P1=0XC0;

??? delay(time);

??? if(ly_flag==1){ly_flag=0;goto hm;}

??? P2=0X80;

??? P3=0X04;

??? P0=0X80;

??? P1=0X80;

??? delay(time);

??? P2=0X00;

??? P3=0X04;

??? P0=0X00;

??? P1=0X00;

??? delay(time);

hm:;

}

void dis14()

{

??? P0 = 0xFF;

??? P1 = 0xFF;

??? P2 = 0xFF;

??? P3 = 0xFF;

??? delay(10);

??? P0 = 0x00;

??? P1 = 0x00;

??? P2 = 0x00;

??? P3 = 0x04;

??? delay(1000);

??? if(ly_flag==1){ly_flag=0;goto hm;}

??? delay(1000);

??? if(ly_flag==1){ly_flag=0;goto hm;}

??? delay(1000);

??? P0 = 0xFF;

??? P1 = 0xFF;

??? P2 = 0xFF;

??? P3 = 0xFF;

hm:;

}

void dis15()

{

??? int time=80;

??? P3_0=0;

??? P1_0=0;

??? delay(time);

??? P2_7=0;

??? P3_1=0;

??? P1_1=0;

??? P0_7=0;

??? delay(time);

??? P3_3=0;

??? P2_6=0;

??? P1_2=0;

??? P0_6=0;

??? delay(time);

??? if(ly_flag==1){ly_flag=0;goto hm;}

???

??? P3_4=0;

??? P2_5=0;

??? P1_3=0;

??? P0_5=0;

??? delay(time);

???

??? P3_5=0;

??? P2_4=0;

??? P1_4=0;

??? P0_4=0;

??? delay(time);

???

??? P3_6=0;

??? P2_3=0;

??? P1_5=0;

??? P0_3=0;

??? delay(time);

??? if(ly_flag==1){ly_flag=0;goto hm;}

??? P1_6=0;

??? P0_2=0;???

??? P3_7=0;

??? P2_2=0;

??? delay(time);

???

??? P2_1=0;

??? P0_0=0;

??? P1_7=0;

??? P0_1=0;

??? delay(time);

??? P2_0=0;

??? delay(time);

??? P0 = 0xFF;

??? P1 = 0xFF;

??? P2 = 0xFF;

??? P3 = 0xFF;

hm:;?????????

}

void init()

{

??? P0 = 0x00;

??? P1 = 0x00;

??? P2 = 0x00;

??? P3 = 0x04;

??? delay(3000);

??? P0 = 0xFF;

??? P1 = 0xFF;

??? P2 = 0xFF;

??? P3 = 0xFF;

??? IT0=1;??????? ?????????? //設(shè)置成下降沿觸發(fā)方式

??? EX0=1;? ???????????? //開啟外部中斷 1,按鍵5

??? TMOD=0X12;?????????? //定時(shí)器1的方式1,16位計(jì)數(shù)器,用來計(jì)數(shù)時(shí)間

??? TL1=0;

??? TH1=0;?????????????? //定時(shí)/計(jì)數(shù)器1初始值

??? TH0=210;???? ????????????????????? //寫入預(yù)置初值(取值1-255,數(shù)越大PWM頻率越高)

??? TL0=210;???? ????????????????????? //寫入預(yù)置值 (取值1-255,數(shù)越大PWM頻率越高)

??? TR0=1;?????? ????????????????????? //啟動定時(shí)器

??? ET0=1;?????? ????????????????????? //允許定時(shí)器0中斷

??? EA=1;??????????????? //首先開啟總中斷

}

char zh=0,gs=0;

void main()

{

??? init();

??? while(1)

??? {

?????? if(moshi==0)

?????? {

?????????? if(zh==0)dis1();

?????????? if(zh==1)if(gs==0)dis1();

?????? }?????

?????? if(moshi==0)

?????? {

?????????? if(zh==0)dis2();

?????????? if(zh==1)if(gs==1)dis2();

?????? }

?????? if(moshi==0)

?????? {

?????????? if(zh==0)dis3();

?????????? if(zh==1)if(gs==2)dis3();

?????? }

?????? if(moshi==0)

?????? {

?????????? if(zh==0)dis4();

?????????? if(zh==1)if(gs==3)dis4();

?????? }

?????? if(moshi==0)

?????? {

?????????? if(zh==0)dis5();

?????????? if(zh==1)if(gs==4)dis5();

?????? }

?????? if(moshi==0)

?????? {

?????????? if(zh==0)dis6();

?????????? if(zh==1)if(gs==5)dis6();

?????? }

?????? if(moshi==0)

?????? {

?????????? if(zh==0)dis7();

?????????? if(zh==1)if(gs==6)dis7();

?????? }

?????? if(moshi==0)

?????? {

?????????? if(zh==0)dis8();

?????????? if(zh==1)if(gs==7)dis8();

?????? }

?????? if(moshi==0)

?????? {

?????????? if(zh==0)dis9();

?????????? if(zh==1)if(gs==8)dis9();

?????? }

?????? if(moshi==0)

?????? {

?????????? if(zh==0)dis10();

?????????? if(zh==1)if(gs==9)dis10();

?????? }

?????? if(moshi==0)

?????? {

?????????? if(zh==0)dis11();

?????????? if(zh==1)if(gs==10)dis11();

?????? }

?????? if(moshi==0)

?????? {

?????????? if(zh==0)dis12();

?????????? if(zh==1)if(gs==11)dis12();

?????? }

?????? if(moshi==0)

?????? {

?????????? if(zh==0)dis13();

?????????? if(zh==1)if(gs==12)dis13();

??? ??? }

?????? if(moshi==0)

?????? {

?????????? if(zh==0)dis14();

?????????? if(zh==1)if(gs==13)dis14();

?????? }

?????? if(moshi==0)

?????? {

?????????? if(zh==0)dis15();

?????????? if(zh==1)if(gs==14)dis15();

?????? }

?????? if(moshi==3)

?????? {

?????????? if(lm==0)

?????????? {

?????????? ??? P0 = 0x00;

?????????? ??? P1 = 0x00;

?????????? ??? P2 = 0x00;

?????????? ??? P3 = 0x04;??????????

?????????? }

?????????? if(lm==1)

?????????? {

?????????? ??? P0 = 0xFF;

?????????? ??? P1 = 0xFF;

?????????? ??? P2 = 0xFF;

?????????? ??? P3 = 0xFF;??????????

?????????? }

?????? }?????

??? }

}

/***********外中斷1入口函數(shù),P32引腳,紅外線接收IC數(shù)據(jù)腳**************************/

void hongwai(void)?? interrupt 0

{

??? unsigned char i,ia;

??? /**************開始判斷是否為NEC波形引導(dǎo)碼的前9MS和后4.5MS******************************/

??? TL1=0;

??? TH1=0;??????????? //定時(shí)/計(jì)數(shù)器1初始值

??? TR1=1;??????????? //定時(shí)器以12M晶振12分頻計(jì)數(shù),即1us計(jì)數(shù)

??? while(!hwx);

??? TR1=0;??????????? //信號翻轉(zhuǎn)停止計(jì)數(shù)

??? if(TH1<30||TH1>40)?? //NEC引導(dǎo)碼前9MS,計(jì)數(shù)約9000,TH1約等于35,給個(gè)誤差值,用30-40之間來判斷

?????? return;

??? TH1=0;??????????? //定時(shí)/計(jì)數(shù)器1初始值

??? TR1=1;

??? while(hwx){

?????? delay1();

?????? if(TH1>22)??? //NEC引導(dǎo)碼引導(dǎo)碼的后4。5MS,計(jì)數(shù)約4500,TH1約等于17

?????????? return;??????

??? }

??? TR1=0;

??? if(TH1<12)??????? //NEC引導(dǎo)碼引導(dǎo)碼的后4。5MS,計(jì)數(shù)約4500,TH1約等于17

?????? return;

??? /***********開始接收四個(gè)字節(jié)內(nèi)容**************************************/??

??? for(i=0;i<4;i++){

?????? for(ia=0;ia<8;ia++){???????????

?????????? while(!hwx);? //低電平開始,不處理只等待高電平

??????????

?????????? TH1=0;

?????????? TR1=1;??????? //高電平開始,啟動計(jì)數(shù)

?????????? while(hwx){

????????????? delay1();

????????????? if(TH1>15)???

????????????????? return;??????

?????????? }

?????????? TR1=0;

?????????? //高電平結(jié)束,判斷數(shù)據(jù)1或0向變量移入

?????????? ly_lhj[i]>>=1;?????????? //數(shù)據(jù)由高位移入低位

?????????? if(TH1>4)??????????? //時(shí)間量TH1高于4,即高于1MS判斷為1

????????????? ly_lhj[i]|=0x80;

?????? }

??? }

??? if(moshi==2)//小夜燈亮度調(diào)節(jié)

??? {

?????? if(ly_lhj[2]==0x07)//加

?????? {

?????????? pwm=pwm+10;

?????????? if(pwm>99)pwm=99;

?????? }

???

?????? if(ly_lhj[2]==0x09)//減

?????? {

?????????? pwm=pwm-10;

?????????? if(pwm<10)pwm=10;

?????? }

??? }

??? if(moshi==0)//動畫模式速度調(diào)節(jié)

??? {

?????? if(ly_lhj[2]==0x40)//速度加

?????? {

?????????? sudu=sudu-10;

?????????? if(sudu<10)sudu=10;?

?????? }

???

?????? if(ly_lhj[2]==0x19)//速度減

?????? {

?????????? sudu=sudu+10;

?????????? if(sudu>100)sudu=100;?????????????

?????? }

??? }

??? if(ly_lhj[2]==0x43)//自動動畫模式

??? {

?????? moshi=0;

?????? zh=0;

??? }

??? if(ly_lhj[2]==0x44)//呼吸燈模式

??? {

?????? moshi=1;

?????? ly_flag=1; //接收成功

??? }

??? if(ly_lhj[2]==0x15)//小夜燈模式

??? {

?????? moshi=2;

?????? ly_flag=1; //接收成功

??? }

??? if(ly_lhj[2]==0x45)//全滅

??? {

?????? moshi=3;

?????? lm=1;

??? ??? P0 = 0xFF;

??? ??? P1 = 0xFF;

??? ??? P2 = 0xFF;

??? ??? P3 = 0xFF;

?????? ly_flag=1; //接收成功???

??? }

??? if(ly_lhj[2]==0x47)//全亮

??? {

?????? moshi=3;

?????? lm=0;

??? ??? P0 = 0x00;

??? ??? P1 = 0x00;

??? ??? P2 = 0x00;

??? ??? P3 = 0x04;

?????? ly_flag=1; //接收成功

??? }

??? if(ly_lhj[2]==0x42)//手動動畫選擇

??? {

?????? moshi=0;

?????? zh=1;

??? }

??? if(ly_lhj[2]==0x52)//手動動畫選擇

??? {

?????? gs++;

?????? if(gs>14)gs=0;

??? }

??? if(ly_lhj[2]==0x4A)//手動動畫選擇

??? {

?????? gs--;

?????? if(gs<0)gs=14;

??? }

??? TF1=0;

}

//定時(shí)器一中斷函數(shù),產(chǎn)生波形

void timer_init0(void) interrupt 1 using 2?

{

??? static? uchar?? t ;?? ?? //PWM計(jì)數(shù)

??? if(moshi==1 || moshi==2)

??? {

?????? t++;??? ???????????? //每次定時(shí)器溢出加1

???

?????? if(t == 100)?? ????????? //PWM周期 100個(gè)單位

?????? {

?????????? t=0;? ??????????? //使t=0,開始新的PWM周期

?????? ??? P0 = 0xFF;

?????? ??? P1 = 0xFF;

?????? ??? P2 = 0xFF;

?????? ??? P3 = 0xFF;??????

?????? }???????????? ??

??????

?????? if(pwm == t)? ?????? //按照當(dāng)前占空比切換輸出為高電平

?????? {?

?????? ??? P0 = 0x00;

?????? ??? P1 = 0x00;

?????? ??? P2 = 0x00;

?????? ??? P3 = 0x04;???

?????? }??

??? }

??? if(moshi==1)

??? {

?????? su++;

?????? if(su==6){su=0;vaule++;}

??????

?????? if(vaule==100)pwm=25;

?????? if(vaule==200)pwm=30;

?????? if(vaule==300)pwm=35;

?????? if(vaule==400)pwm=40;

?????? if(vaule==500)pwm=45;

?????? if(vaule==600)pwm=50;

?????? if(vaule==700)pwm=55;

?????? if(vaule==800)pwm=60;

?????? if(vaule==900)pwm=65;

?????? if(vaule==1000)pwm=70;

?????? if(vaule==1100)pwm=75;

?????? if(vaule==1200)pwm=80;

?????? if(vaule==1300)pwm=85;

?????? if(vaule==1400)pwm=90;

?????? if(vaule==1500)pwm=95;

?????? if(vaule==1600)pwm=99;

?????? if(vaule==2000)pwm=95;

?????? if(vaule==2100)pwm=90;

?????? if(vaule==2200)pwm=85;

?????? if(vaule==2300)pwm=80;

?????? if(vaule==2400)pwm=75;

?????? if(vaule==2500)pwm=70;

?????? if(vaule==2600)pwm=65;

?????? if(vaule==2700)pwm=60;

?????? if(vaule==2800)pwm=55;

?????? if(vaule==2900)pwm=50;

?????? if(vaule==3000)pwm=45;

?????? if(vaule==3100)pwm=40;

?????? if(vaule==3200)pwm=35;

?????? if(vaule==3300)pwm=30;

?????? if(vaule==3400){pwm=25;vaule=0;}

??? }

}

5.心得體會

由于本次課程設(shè)計(jì)含括了軟件和硬件知識,所以在完成課程設(shè)計(jì)的同時(shí)也讓我們了解到了我們在軟硬件設(shè)計(jì)和制作方面的不足。在這次的設(shè)計(jì)過程中我所擔(dān)任的工作是對電路板各元器件的連接和焊接工作,雖然看似簡單,但做起來卻是一個(gè)細(xì)致的工作,尤其是對于一些引腳的焊接工作,更是要細(xì)中再細(xì),因?yàn)檫@些元器件的引腳距離都是比較近的,一旦將不該連接的引腳焊接到了一起,該元器件就會失它原來的工作效果,還很有可能將整個(gè)電路短路。

通過這次課程設(shè)計(jì),我知道了團(tuán)隊(duì)的力量,只有互相團(tuán)結(jié),才能把事情做好,組員分工合作,每個(gè)人根據(jù)自己的能力圍負(fù)責(zé)不同的工作,達(dá)到事半功倍的效果。而在這次的設(shè)計(jì)過程中讓我深深的了解了我在軟件、硬件方面的許多不足之處,對于今后的學(xué)習(xí)和工作都有了一次很好的借鑒經(jīng)驗(yàn)

6.致謝

首先我要感的是機(jī)電工程學(xué)院醫(yī)工系,機(jī)電工程學(xué)院醫(yī)工系能夠給我提供如此好的實(shí)踐機(jī)會。更要感指導(dǎo)老師,在我們的學(xué)習(xí)過程中他給了很大的幫助,幫助我們理解不懂的地方,使我們最終能夠完成這個(gè)課程設(shè)計(jì)。我還要感參考文獻(xiàn)的原作者。

在此對給予我?guī)椭睦蠋煴硎旧钌畹馗?#xff01;同時(shí)對給予我?guī)椭耐瑢W(xué)表示深深地感。我想說的是,在指導(dǎo)老師和同學(xué)們的幫助下我學(xué)到了很多東西,也發(fā)現(xiàn)了自己的很多不足之處,促使我在以后的學(xué)習(xí)中更加努力的學(xué)習(xí)。我們回顧這過去時(shí)間,我們會發(fā)現(xiàn)自己收獲了很多,也成長了很多,懂得了如何去學(xué)習(xí)以前未曾學(xué)過的新思維新方法,懂得了如何去多方位地查找資料,完善和創(chuàng)新一些舊的思維方式,懂得了如何同老師和同學(xué)交流和協(xié)作,相信這次課程設(shè)計(jì)的體驗(yàn)將成為今后我們更多更廣學(xué)習(xí)中的奠基石。課程設(shè)計(jì)的過程,是學(xué)習(xí)的過程,也是鍛煉的過程,更是教會我們同學(xué)之間相互幫助,共同克服困難的過程,這將是人生中一筆寶貴的財(cái)富,使我受用不盡的同時(shí),我一定將之好好珍惜。

參考文獻(xiàn)

[1]康華光,大欽.?電子技術(shù)基礎(chǔ)—模擬部分(第五版)[M].?:高等教育,2005

[2]志海、艷雷、松?.單片機(jī)的C語言程序設(shè)計(jì)與應(yīng)用——基于Proteus仿真

[3]毅剛,喜元。?單片機(jī)原理與應(yīng)用設(shè)計(jì) 電子工業(yè)?

[4]?黃尊熹.單片機(jī)原理接口與應(yīng)用[M].西北工業(yè)大學(xué)出版社,2000.147-150.??[5]?樓然苗,李光飛.51系列單片機(jī)設(shè)計(jì)實(shí)例[M].北京:北京航空航天大學(xué)出版社,2003,103-120.?

[6]?李必紅,王忠魁.基于單片機(jī)控制的機(jī)床數(shù)控改造[J].山西工學(xué)院學(xué)報(bào),2004,20(1):70-79.?

[7]?余永權(quán).Flash單片機(jī)原理及應(yīng)用[M].?北京:電子工業(yè)出版社,1997.?

[8]?何立民.單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)[M]北京:北京航空航天大學(xué)出版社,1990.?[9]?李洪明.漫談紅外遙控[J].?電子世界,?2000,?(1):53.?

[10]?高建榮.基于單片機(jī)控制紅外線遙控的編碼實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2004,25(11):2105.2107?

[11]?劉曉明,安敏,王軍.兩種紅外解碼技術(shù)的探討[J].測控技術(shù),

[12]?肖圣兵,仲興榮,徐清源.一種紅外遙控信號的解碼方法[J].蘇州大學(xué)學(xué)報(bào)(自然科學(xué)),2002,18(2):104.105.?

[13]?付家才.單片機(jī)控制工程實(shí)踐技術(shù)[M].北京:北京化學(xué)工業(yè)出版社,2004?[14]?姚凱學(xué),孟傳良.單片機(jī)原理及應(yīng)用[M].重慶:重慶大學(xué)出版社,1998.?[15]?周立功.增強(qiáng)型80C51單片機(jī)速成與實(shí)戰(zhàn)[M].北京:北京航空航天大學(xué)出版社,2003.?

[16]?嚴(yán)天峰.單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)與仿真調(diào)試[M].北京:北京航空航天大學(xué)出版社,2005.?

[17]?馮建華.單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)與產(chǎn)品開發(fā)[M].北京:人民郵電出版社,2004.?[18]?裴彥純.基于單片機(jī)系統(tǒng)的紅外遙控器應(yīng)用[M].北京:現(xiàn)代電子技術(shù)

總結(jié)

以上是生活随笔為你收集整理的遥控心形流水灯的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。