圖15 緊急車
4、心得體會
這次交通燈的制作是我學會了不少的東西,首先是proteus和keil的使用。單片機程序的編寫和原理圖的仿真都是在這兩個軟件的運行下才可以進行的。這個實驗最重要的是讓我對51系列的單片機有了更深層次的了解,這一學期開始接觸單片機的時候覺得這是一門極其高深的課程,老師講的什么基本完全不懂,課后看仍舊是一頭霧水。通過交通燈的學習和制作,對單片機有了初步的了解,知道了它的組成、工作原理等等。
在軟件編寫這一塊,開始時遇到了很大的難題,因為兩百行的程序,哪怕有一個錯誤,修改起來也不是十分方便。時常沒有心思去尋找和改正錯誤,所以軟件這一塊花了很大的一部分時間。幾次調試后總算出現“0 warning”和“0 error”的字樣。
除了學會很多東西以為,也發現了自己的不足。由于自己在這一方面只是的短缺,所以很多問題都需要查閱資料或者向別的同學請教。比如說proteus和keil的使用方法,都是看著別人操作幾遍之后才慢慢學會。另外,由于時間問題,沒能做到真正的實物實現,沒有接觸到焊接工作,這一點是十分遺憾的,相信如果做了實物實現,可能還會遇到更多的問題,學習到更多的實踐知識。
慶幸設計模擬結果是成功的,模擬出了交通燈的功能,各個按鍵的功能也和模擬時一致,看著數字的跳動自己信息也感到十分開心。雖然想過在這個交通燈里加入一些額外的功能,但終究由于自己知識的局限性而放棄,有點遺憾,不過能夠學到東西就好。此次試驗增長了自己的單片機知識外也讓我知道實踐和理論學習的差別。實踐過程中學到的知識自己記得會更加牢固一些,不容易忘記。總的來說,單片機的制作讓我收獲不小。
附件2 原理圖
#include #define uchar unsigned char #define uint unsigned int uchar data buf[4]; uchar data sec_dx = 20;//東西數默認 uchar data sec_nb = 30;//南北默認值 uchar data set_timedx = 20; uchar data set_timenb = 30; int n; uchar data b;//定時器中斷次數 sbit k1 = P1 ^ 6;//++ sbit k2 = P1 ^ 7; //-- sbit k3 = P2 ^ 7; //確定 sbit k4 = P3 ^ 0; //切換方向 sbit k5 = P3 ^ 1; //緊急車 sbit Yellow_nb = P2 ^ 5; //南北黃燈標志 sbit Yellow_dx = P2 ^ 2; //東西黃燈標志 sbit Green_nb = P2 ^ 4; sbit Green_dx = P2 ^ 1; sbit Red_nb = P2 ^ 6; sbit Red_dx = P2 ^ 3; sbit Buzz = P3 ^ 7; bit Buzzer_Indicate; bit time = 0;//燈狀態循環標志 bit set = 1;//調時方向切換鍵標志 uchar code table[11] = { //共陰極字型碼 0x3f, //--0 0x06, //--1 0x5b, //--2 0x4f, //--3 0x66, //--4 0x6d, //--5 0x7d, //--6 0x07, //--7 0x7f, //--8 0x6f, //--9 0x00 //--NULL }; //函數的聲明部分 void delay(int ms);//延時子程序 void key();//按鍵掃描子程序 void key_to1();//鍵處理子程序 void key_to2(); void key_to3(); void display();//顯示子程序 void logo(); //開機LOGO void Buzzer(); //主程序 void main() { TMOD = 0X01; /*TH0 = 0XD8; TL0 = 0XF0;*/ TH0 = 0X3C; //1101 1000 50ms TL0 = 0XB0; EA = 1; ET0 = 1; TR0 = 1; //開始 EX0 = 1; //外部中斷0請求標志 允許 EX1 = 1; logo(); P2 = 0Xc3;// 開始默認狀態,東西綠燈,南北黃燈 sec_nb = sec_dx + 5; while (1) { key(); //調用按鍵掃描程序 display(); //調用顯示程序 //Buzzer(); } } //函數的定義部分 void key() //按鍵掃描子程序 { if (k1 != 1) { delay(10); if (k1 != 1) { while (k1 != 1) { key_to1(); //時間增加 for (n = 0; n < 40; n++) { display(); } } } } if (k2 != 1) { delay(10); if (k2 != 1) { while (k2 != 1) { key_to2(); //時間減少 for (n = 0; n < 40; n++) { display(); } } } } if (k3 != 1) { TR0 = 1; //啟動定時器 Buzzer_Indicate = 0; sec_nb = set_timenb; //從中斷回復,仍顯示設置過的數值 sec_dx = set_timedx; if (time == 0) { P2 = 0X99; sec_nb = sec_dx + 5; } else { P2 = 0xC3; sec_dx = sec_nb + 5; } } if (k4 != 1) { //切換方向 delay(5); if (k4 != 1) { while (k4 != 1); set = !set; } } if (k5 != 1) { delay(5); if (k5 != 1) { while (k5 != 1) //緊急車 key_to3(); } } } void display() //顯示子程序 { buf[1] = sec_dx / 10; //第1位 東西秒十位 buf[2] = sec_dx % 10; //第2位 東西秒個位 buf[3] = sec_nb / 10; //第3位 南北秒十位 buf[0] = sec_nb % 10; //第4位 南北秒個位 P1 = 0xff; // 初始燈為滅的 P0 = 0x00; P1 = 0xfe; //片選LCD1 P0 = table[buf[1]]; delay(1); P1 = 0xff; P0 = 0x00; P1 = 0xfd; //片選LCD2 P0 = table[buf[2]]; delay(1); P1 = 0xff; P0 = 0x00; P1 = 0Xfb; //片選LCD3 P0 = table[buf[3]]; delay(1); P1 = 0xff; P0 = 0x00; P1 = 0Xf7; P0 = table[buf[0]]; //片選LCD4 delay(1); } void time0(void) interrupt 1 using 1 //定時中斷 定時器0 子程序 { Buzz = 1; b++; if (b == 20) // 定時器中斷次數 { Buzz = 0; b = 0; sec_dx--; sec_nb--; if (sec_nb <= 5 && time == 0) //東西黃燈閃
上一篇:1602的各種顯示效果(靜態 動態 移動 滾動顯示程序)
下一篇:單片機串口收發程序分享
推薦閱讀
史海拾趣
作為一家高新技術企業,啟臣微深知綠色生產的重要性。公司采用先進的生產工藝和設備,實現了生產過程中的節能減排。同時,公司還積極參與環保公益活動,倡導綠色生活方式,為社會的可持續發展貢獻了自己的力量。
BTCPower公司自成立以來,一直致力于研發高效能、低能耗的電源管理芯片。經過數年的努力,公司成功開發出了一款具有革命性的芯片,能夠在保證性能的同時,顯著降低電子設備的能耗。這一技術突破迅速吸引了市場的關注,BTCPower的產品開始被廣泛應用于智能手機、平板電腦等消費電子產品中,公司因此獲得了巨大的商業成功。
Euvis Inc公司自成立以來,始終將技術創新作為發展的核心動力。公司投入大量研發資源,成功開發出一款具有革命性意義的新型半導體材料,該材料具有更高的導電性能和更低的能耗,極大地提升了電子產品的性能。隨著這款材料的廣泛應用,Euvis Inc公司在半導體材料市場迅速崛起,成為行業內的領軍企業。
隨著科技的不斷進步和消費者需求的日益多樣化,電子行業面臨著巨大的變革壓力。Euvis Inc公司敏銳地洞察到這一趨勢,積極調整戰略方向,將業務拓展至物聯網、智能家居等新興領域。通過不斷的技術創新和市場拓展,公司成功應對了行業變革帶來的挑戰,保持了持續的發展勢頭。
2010年3月15日,BLACK&DECKER迎來了公司歷史上的一個重要時刻——與史丹利公司合并組建史丹利百得公司。這一合并不僅使BLACK&DECKER獲得了更強大的資源和市場支持,還為其未來的發展提供了更廣闊的空間。合并后的史丹利百得公司致力于提供整合的五金工具、存儲設備和安防系統解決方案,以滿足全球消費者的多樣化需求。通過整合雙方的優勢資源和技術力量,史丹利百得公司有望在電子行業中取得更加輝煌的成就。
綜上所述,BLACK&DECKER公司在電子行業中的發展故事充滿了創新、進取和成功的元素。從創立初期的艱苦創業到如今的全球領先品牌,BLACK&DECKER憑借其卓越的產品質量、技術創新和市場拓展能力,贏得了消費者的信任和市場的認可。未來,隨著科技的不斷進步和市場需求的不斷變化,BLACK&DECKER將繼續保持創新精神,推動電子行業的持續發展。
在競爭激烈的電子行業中,CML Microcircuits公司始終堅持質量與服務并重的經營理念。公司注重產品的可靠性和穩定性,通過嚴格的質量控制和測試流程確保產品的高品質。同時,CML還為客戶提供全面的技術支持和售后服務,幫助客戶解決在使用過程中遇到的問題。這種以客戶為中心的服務理念贏得了客戶的信任和忠誠,也為CML贏得了良好的口碑。
如何在miniGUI程序中控制電機轉動(菜問題,表笑我,呵呵) 電機有自己的驅動程序,gpio_drv.c 畫了一個窗口,在窗口過程函數中可以直接調用驅動程序中的函數嗎? 如: 在MSG_COMMAND消息中,是否可以這樣做: case IDSTART: write_gpio_bit(GPIO_MODE_OUT | G ...… 查看全部問答∨ |
|
誠聘電子設計師一名。 要求:①.大專以上學歷,電子類相關專業; ②.三年以上電子電路設計經驗; ③.熟悉單片機開發、匯編語言,熟練使用protel、cad等相關設計軟件,精通模擬和數字電路,了解常用電子元器件的性能及特性; ④.能獨立開發設計電路 ...… 查看全部問答∨ |
|
大家好: 第二期學生的全免費培訓已經正式開始,這一期的培訓視頻也是全部免費的除了周末外視頻可能會不定時更新,敬請大家以后多關注。 以下是這一期的培訓視頻: 免費視頻地址為: http://pan.baidu.com/share/link?shareid=484506&uk=18461 ...… 查看全部問答∨ |
|
我使用ZLG提供的實例代碼去調試ADC,PIO0_11引腳接可調電源,通過可調電源來改變模擬電壓值,但是,不管我怎么改變電壓值,讀取出來的AD轉換值總是0x3ff,IC的VDD為固定3.3V。 代碼如下: uint32_t ulADCBuf; uint32_t ADC ...… 查看全部問答∨ |
|
電磁兼容,不但是作為一門研究和解決電子設備,系統自身及其與周圍電磁環境無干擾問題的綜合性學科,更重要的是作為一項應用性極強的工程技術,在民用和軍用電子產品的設計、測試、制造、應用等環節發揮著至關重要甚至是決定性的作用。對于民用產品 ...… 查看全部問答∨ |