標題: 單片機16x16點陣廣告牌設(shè)計(含仿真+源碼+論文+原理圖) [打印本頁]
作者: 4545454577878 時間: 2018-4-30 15:02
標題: 單片機16x16點陣廣告牌設(shè)計(含仿真+源碼+論文+原理圖)
分享自己做得16x16點陣廣告牌
目次
1緒論 1
1.1 MCS-51系列單片機簡介 1
1.2 單片機的應(yīng)用模式和應(yīng)用領(lǐng)域 2
1.3 主要工作任務(wù) 3
2硬件設(shè)計 3
2.1 單片機系統(tǒng)的基本模塊 3
2.2 16*16點陣滾動顯示的硬件設(shè)計 4
3軟件設(shè)計 6
3.1 16*16點陣滾動顯示的軟件設(shè)計 6
4軟件仿真結(jié)果 8
4.1 16*16點陣滾動顯示仿真結(jié)果 8
結(jié) 論 9
參考文獻 10
致謝 11
附錄相關(guān)源程序 12
所謂16*16點陣,就是行列各位16個長度的點陣,現(xiàn)實中我們可以通過4個8*8點陣進行拼湊來實現(xiàn)一個16*16的點陣。如圖3所示。圖中的16*16點陣由U6,U7,U8,U9四個單點陣組成,所有的行(X0-X7)都通過排阻接到單片機的P0口上,所有的列(Y00-Y07、Y10-Y17、Y20-Y27、Y30-Y37)接到不同的74ls138(U2,U3,U4,U5)上,U2控制U6,U3控制U7,U4控制U8,U5控制U9。74ls138直接由單片機的P2口進行驅(qū)動,這樣就形成了一個完整的電路。
其顯示原理與單個點陣的顯示原理類似,但是這里需要先把代碼寫入U6,然后短暫延時后寫入U7,直到U9。時間段控制合理的話,我們就可以看到顯示屏上將顯示穩(wěn)定的字符。這里涉及到一個滾動顯示的問題,所謂滾動顯示,即字符是從屏幕右端慢慢往左邊移動,好像是一個拉幕的效果,那么滾動顯示在程序上如何實現(xiàn)呢?這里我們就要用到單片機的定時中斷,中斷一次,字符往左移動一次,如此循環(huán),即實現(xiàn)了字符的滾動顯示。這與上面單個點陣的靜態(tài)顯示是有區(qū)別的。
關(guān)于74hc138的使用,74hc138是3-8線譯碼器,當E1=1,E2,E3=0時,該譯碼器被選中,此時如果數(shù)據(jù)輸入端ABC輸入000-111八個數(shù)據(jù),輸出端Y0-Y7將依次輸出0。所以,我們可以依次選中四個譯碼器,向數(shù)據(jù)輸入端寫入數(shù)據(jù)來直接控制某個點陣的顯示。
以上就是16*16點陣的滾動顯示原理。
2.2.3 16*16點陣滾動顯示的硬件設(shè)計
如圖5就是本次設(shè)計的全部硬件電路圖:
在設(shè)計16*16滾動顯示的軟件部分時,我們必須要明白其中的原理。本次設(shè)計中我們需要注意以下幾個問題:第一,怎么樣讓點陣顯示我們需要的字符,即我們?nèi)绾潍@得字符顯示的代碼。第二,如何實現(xiàn)字符的滾動顯示。第三,如何使畫面保持穩(wěn)定。
第一,如何取得代碼,F(xiàn)在針對點陣的取字模軟件很多,我們只需要打開軟件,寫入需要取字模的字,然后注意取字模的順序,是橫向還是縱向就行了。我們這里采用縱向取模,設(shè)置字模為C51格式。這樣當寫入的字確定后,我們就可以直接復(fù)制字模到程序中來實現(xiàn)相應(yīng)功能。如“老”的字模就為:{0x02,0x10,0x22,0x10,0x22,0x20,0x22,0x20,0x22,0x40,0x22,0x7C,0xFE,0x92,0x23,0x12,0x23,0x22,0x22,0x22,0x26,0x42,0x2A,0x42,0x72,0x02,0x22,0x0E,0x02,0x00,0x00,0x00,/*"老",2*/}。
第二,如何實現(xiàn)滾動顯示。為了實現(xiàn)字符的滾動顯示,我們加入了定時中斷函數(shù),如下:
- void timer1() interrupt 3
- {
- alt++;
- if(alt==10) //到一定的時間加以實現(xiàn)左移
- {
- alt=0;
- if(fangxiang==0) //如果是正向 正向移動
- {
- net=net+2;
- if(net>sl) //字移動數(shù)量
- net=0;
- }
- else //否則反向移動
- {
- net=net-2;
- if(net<2)
- net=sl; //字移動數(shù)量
- }
- }
- }
復(fù)制代碼
電路原理圖如下:
0.png (47.88 KB, 下載次數(shù): 108)
下載附件
2018-4-30 15:43 上傳
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (38.53 KB, 下載次數(shù): 95)
下載附件
2018-4-30 15:46 上傳
0.png (21.39 KB, 下載次數(shù): 98)
下載附件
2018-4-30 15:43 上傳
0.jpg (45.67 KB, 下載次數(shù): 85)
下載附件
2018-4-30 15:44 上傳
單片機源程序如下:
- #include<reg51.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define data1 P0
- #define data2 P2
- sbit s1=P3^6;
- sbit s2=P3^7;
- bit fangxiang;
- uint alt=0,net=0,sl=128;
- bit mode;
- uchar code tab[]={
- //
- 0x20,0x08,0x24,0x10,0x22,0x60,0x21,0x80,0x26,0x41,0x39,0x32,0x02,0x04,0x0C,0x18,
- 0xF0,0x60,0x13,0x80,0x10,0x60,0x10,0x18,0x14,0x04,0x18,0x02,0x00,0x01,0x00,0x00,/*"歡",2*/
- 0x02,0x00,0x02,0x02,0x42,0x04,0x33,0xF8,0x00,0x04,0x00,0x02,0x3F,0xF2,0x20,0x22,
- 0x40,0x42,0x00,0x02,0x3F,0xFE,0x20,0x42,0x20,0x22,0x3F,0xC2,0x00,0x02,0x00,0x00,/*"迎",3*/
- 0x00,0x80,0x01,0x00,0x06,0x00,0x1F,0xFF,0xE0,0x00,0x02,0x08,0x04,0x30,0x18,0xC0,
- 0xF0,0x02,0x10,0x01,0x13,0xFE,0x10,0x00,0x10,0x80,0x14,0x60,0x18,0x18,0x00,0x00,/*"你",4*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",5*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",6*/
- };
- void delay(uint z) //延時子函數(shù)
- {
- uchar x;
- for(;z>0;z--)
- for(x=110;x>0;x--);
- }
- void xianshi() //顯示
- {
- uchar aa,i;
- for(i=0;i<16;i++)
- {
- P1=i; //列掃描
- data1=tab[net+aa]; //取出上8行數(shù)據(jù)輸出
- aa++;
- data2=tab[net+aa]; //取出下8行數(shù)據(jù)輸出
- aa++;
- delay(5); //延時
- data1=0; //清屏
- data2=0; //清屏
- P1=0x00; //消除余輝
- if(aa>30) aa=0; //字模地址
- }
-
- }
- void main() //主函數(shù)
- {
- ET1=1; //使能定時器0
- EA=1; //開啟總中斷
- TR1=1; //開始計數(shù)
- while(1) //無限循環(huán)
- {
- xianshi(); //顯示
- if(s1==0) //檢測按鍵
- {
- delay(30); //延時消抖
- TR1=~TR1; //按下暫停 ,暫按繼續(xù)
- while(!s1)xianshi();
- delay(30);
- }
- if(s2==0) //檢測按鍵
- {
- delay(30); //延時消抖
- fangxiang=~fangxiang; //方向取反
- while(!s2)xianshi();
- delay(30);
- }
- }
- }
-
- void timer1() interrupt 3
- {
- alt++;
- if(alt==10) //到一定的時間加以實現(xiàn)左移
- {
- alt=0;
- if(fangxiang==0) //如果是正向 正向移動
- {
- net=net+2;
- if(net>sl) //字移動數(shù)量
- net=0;
- }
- else //否則反向移動
- {
- net=net-2;
- if(net<2)
- net=sl; //字移動數(shù)量…………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
0.png (47.55 KB, 下載次數(shù): 116)
下載附件
2018-4-30 15:42 上傳
所有資料51hei提供下載(含仿真+源碼+論文+原理圖):
111.zip
(525.24 KB, 下載次數(shù): 806)
2018-4-30 15:02 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者: Liar1717 時間: 2018-5-15 11:42
謝謝分享,正好需要呢哈哈
作者: 隨風(fēng)飄遠 時間: 2018-6-25 10:28
不錯的資料,謝謝分享
作者: CHI丨春笙 時間: 2018-6-25 11:05
老是調(diào)試失敗啊
作者: LiuMX 時間: 2018-6-27 23:17
我是新手請問元器件清單有嗎 謝謝
作者: weae 時間: 2018-9-19 07:50
感謝分享,只希望可以讓我的單片機設(shè)計通過
作者: ptlantu 時間: 2018-9-19 15:54
這是個實用的例子,感謝分享
作者: kobeB24 時間: 2018-12-17 10:27
感謝分享 太棒了
作者: ytv12345 時間: 2018-12-24 22:30
大神請問我顯示要顯示9個字,把數(shù)組改好后,sl=320,仿真出來第二遍剛開始是亂碼怎么回事?我發(fā)現(xiàn)字數(shù)一多就會這樣。
作者: 嘿嘿嗎 時間: 2018-12-24 23:32
不錯,不錯值得學(xué)習(xí)
作者: ygvttfftvtfv 時間: 2018-12-27 22:49
用那個軟件畫的圖里用的是哪些原件?不知道是什么名字誒
作者: ygvttfftvtfv 時間: 2018-12-27 23:47
小姐姐可不可以給我發(fā)一下這個的原理圖~QQ1215029362 感謝分享 (有酬)
作者: ygvttfftvtfv 時間: 2019-1-2 22:49
不會做pcb原件封裝
作者: js12345 時間: 2019-5-9 01:10
怎樣在此基礎(chǔ)上用按鍵按下不同的鍵顯示不同的字符的程序,求大神幫幫忙,急用,拜托
作者: laoqian 時間: 2019-5-11 19:39
很不錯,謝謝分享
作者: laoqian 時間: 2019-5-12 21:26
我的自定義字體亂碼怎么解決啊
作者: laoqian 時間: 2019-5-12 21:27
自定義字體亂碼怎么解決呢
作者: gemxie 時間: 2019-5-30 16:37
感覺挺好玩的樣子啊
作者: Eminemstan 時間: 2019-6-11 15:23
我也失敗
作者: hexueliang9 時間: 2019-7-18 23:44
謝謝大佬
作者: as798839407 時間: 2019-8-17 10:32
很不錯的分享
作者: 千與千尋9527 時間: 2019-9-24 16:13
好東西,正在學(xué)習(xí)
作者: a345111651 時間: 2019-11-4 09:30
感謝分享,幫助很大
作者: 民政丶達康 時間: 2019-11-4 16:06
感謝樓主分享教程
作者: hz_gaohua 時間: 2019-11-4 22:23
非常感謝樓主分享
作者: zhangyushan123 時間: 2019-12-27 15:34
試試效果
作者: frd666 時間: 2020-7-6 21:15
正好需要就看到了哈哈哈,謝謝
作者: 阿芷 時間: 2020-12-4 21:55
好強啊,膜拜大佬
作者: 火少米粉 時間: 2020-12-16 10:41
超級棒。
作者: HeroFong 時間: 2020-12-16 12:07
取模軟件發(fā)一下唄
作者: kayak8 時間: 2021-12-23 12:48
取模軟件PCtoLCD2002
作者: 1209626965 時間: 2022-6-3 23:56
這是什么仿真軟件阿?
作者: Zhangabm339 時間: 2022-6-6 18:24
字數(shù)增多如何更改
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |