具體實現功能:
利用51單片機流水燈和LCD1602實現表白功能。
設計介紹
51單片機簡介
51單片是一種低功耗、高性能CMOS-8位微控制器,具有8K可編程Flash存儲器,使得其為眾多嵌入式控制應用系統提供高靈活、超有效的解決方案。
51系列單片機具有以下標準功能:
8k字節Flash,512字節RAM,
內置4KB EEPROM,
MAX810復位電路,
三個16位定時器/計數器,
一個6向量2級中斷結構,
全雙工串行口。
另外, 51系列在空閑模式下,CPU停止工作,允許RAM、定時器/計數器、串口、中斷繼續工作。掉電保護方式下,RAM內容被保存,振蕩器被凍結,單片機停止工作,直到下一個中斷或硬件復位為止。本設計所使用的芯片可兼容以下所有的51系列單片機(包括AT系列和STC系列)。
設計思路
文獻研究法:搜集整理相關研究資料,閱讀文獻,為研究做準備;
調查研究法:通過調查、分析、具體實驗等方法,發現相關存在問題和解決辦法;
比較分析法:比較不同設計的具體原理,以及同一類傳感器性能的區別,分析系統的研究現狀與發展前景;
軟硬件設計法:通過軟硬件設計實現硬件,最后測試各項功能是否滿足要求。
單片機類設計論文參考模板:
畢設無憂|單片機類畢設論文模板
設計內容
仿真圖(protues8.7)
本設計利用protues8.7軟件實現仿真設計,具體如圖。
注:免費分享,請按照下圖自行繪制仿真!!
protues8.7軟件資料及仿真解決辦法:
proteus8.7安裝及破解教程(內附安裝包)
protues仿真常見問題解決方案
Protues8.7簡易教程
程序(Keil5)
本設計利用KEIL5軟件實現程序設計。
注:全部代碼免費分享,請自行建立工程!!
本設計由C語言編寫,全部代碼如下:
#include//包含頭文件 #include #define uchar unsigned char #define uint unsigned int #define SPEED 10 //流水燈的速度 sbit RS = P2^2;//命令數據選擇腳 sbit RW = P2^3;//讀寫操作腳 sbit E = P2^4;//使能腳 低電平有效 /****延時****/ void delay(uint i) { uint j=1000; while(i--) { j=1000; while(j--); } } void delayms(uint z) //毫秒 { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } uchar LED_WATER1() { static uchar temp1=0x01,temp2=0x80; P1=~temp1; temp1=_crol_(temp1,1); P3=~temp2; temp2=_cror_(temp2,1); delay(SPEED); if(temp1==0x01)//循環了一圈 {return 1;} else return 0; } void write_command(uchar command)//寫指令函數 { RW = 0;//寫 RS = 0;//指令 E = 1;//拉高電平 P0 = command;//送指令 delay(20);//延時 E = 0;//拉低電平 輸出有效 RW = 1;//拉高電平 } void write_data(uchar date)// { RW = 0;//寫 RS = 1;//數據 E = 1;//拉高電平 P0 = date;//送數據 delay(20);//延時 E = 0;//使能腳 低電平寫入有效 RW = 1;//拉高電平 } void display_string(uchar *p)//顯示地址函數 { while(*p)//循環這個p { write_data(*p);//送數據 為p p++;//每次p自加一 } } void gotoxy(unsigned y,unsigned x)//地址位置定義 { if(y == 1) // 如果y等于1 write_command(0x80+x);//地址就是0x80加上x else if(y == 2) //如果y等于1 write_command(0x80+0x40+x);//地址就是0x80+0x40(第二行)加上x } void F1602_init(void)//初始化函數 { write_command(0x38);//兩行,每行16字符,每個字符5*7點陣 write_command(0x0C);//開光標及進入光標設置 write_command(0x06C);//設置光標和地址自動加一 } void F1602_clear()//清屏 { write_command(0x01);//寫指令 0x01 清屏 write_command(0x02);//寫指令 0x02 光標回歸原點 但內容不變 } uchar LED_WATER2() { static uchar temp1=0x01,temp2=0x01; P1=~temp1; temp1=_crol_(temp1,1); P3=~temp2; temp2=_crol_(temp2,1); delay(SPEED); if(temp1==0x01) {return 1;} else return 0; } uchar LED_WATER3() { static uchar temp1=0x07,temp2=0x07; P1=~temp1; temp1=_crol_(temp1,1); P3=~temp2; temp2=_crol_(temp2,1); delay(SPEED); if(temp1==0x07) {return 1;} else return 0; } uchar LED_WATER4() { static uchar temp1=0x07,temp2=0xe0; P1=~temp1; temp1=_crol_(temp1,1); P3=~temp2; temp2=_cror_(temp2,1); delay(SPEED); if(temp1==0x07)//循環了一圈 {return 1;} else return 0; } //主函數 void main() { F1602_init();//初始化1602 F1602_clear();//清屏 LED_WATER1(); delayms(500); LED_WATER2(); delayms(500); LED_WATER3(); delayms(500); LED_WATER4(); display_string(" I LOVE YOU ");//執行顯示地址函數 gotoxy(2,0);//設定地址 display_string(" MY GIRL "); while(1) { LED_WATER1(); delayms(500); LED_WATER2(); delayms(500); LED_WATER3(); delayms(500); LED_WATER4(); } }
運行結果如圖:
電子工程師成長日記
-
微控制器
+關注
關注
48文章
7658瀏覽量
152183 -
單片機
+關注
關注
6044文章
44624瀏覽量
638944 -
51單片機
+關注
關注
274文章
5705瀏覽量
124389 -
流水燈
+關注
關注
21文章
433瀏覽量
59842 -
LCD1602
+關注
關注
14文章
607瀏覽量
52734
原文標題:設計分享|單片機流水燈表白
文章出處:【微信號:電子工程師成長日記,微信公眾號:電子工程師成長日記】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論