實現的效果
0.png (29.83 KB, 下載次數: 73)
下載附件
2017-8-12 00:33 上傳
0.png (450.94 KB, 下載次數: 79)
下載附件
2017-8-12 00:32 上傳
0.png (450.77 KB, 下載次數: 94)
下載附件
2017-8-12 00:33 上傳
0.png (465.48 KB, 下載次數: 85)
下載附件
2017-8-12 00:33 上傳
0.png (441.25 KB, 下載次數: 80)
下載附件
2017-8-12 00:33 上傳
0.png (9.77 KB, 下載次數: 94)
下載附件
2017-8-12 00:22 上傳
0.png (48.54 KB, 下載次數: 93)
下載附件
2017-8-12 00:27 上傳
上面是用Proteus仿真的,,對了如果自己想用proteus仿真需要安裝下面這個軟件
再看一下實物顯示效果
先做上位機部分...........
為了程序一啟動就把電腦上能用的串口號顯示在下拉框中
還有就是串口呢可能會隨時改變,所以在用戶點擊下拉框的時候重新更新一下下拉框中的內容
虛擬串口軟件下載:http://www.zg4o1577.cn/bbs/dpj-89983-1.html
現在在波特率框中添加常用的波特率
現在的效果
然后放一個按鈕用來打開和關閉串口
現在就做打開和關閉串口部分,,,
對了按鈕點擊了打開串口,讓它顯示"關閉串口"
就用回調來顯示
現在按鈕事件就這樣了
現在在多優化一下,我們在打開了串口的時候,我接著用去選擇別的串口了,那么為了不去重復重新打開的按鈕動作,我們就多加一點程序,,,,這個一會再說吧!現在看不出效果現在寫接收程序部分
放一個textbox
接收的文本框設置只讀
接收的數據肯定會很多,,所以讓他有上下的滾動條
然后界面又加了幾個按鈕和選擇
現在接收數據
為了接收到一條完整的數據之后再去做處理,我就用個定時器用于檢測接收是否空閑了一段時間,只要出現空閑說明接收到了一條完整的數據
設置的是10ms檢測一次
看程序里面怎么做,,,其實和我的單片機檢測空閑是一樣的道理
定義一個鏈表用于存儲數據,還有兩個計數變量
我電腦上安裝了虛擬串口軟件,方便調試
還有就是
當我們選擇這個的時候希望接收框里面的內容也跟著改變
就像是這樣
選擇上
然后再取消選擇
這樣感覺更好一些
寫上以下代碼
加一個功能,,,我已經電機打開一個串口了,然后呢想換一個
然而如果和第一次選擇的一樣就不切換了
這段代碼放在了定時器2里面,,,我這樣做的,只要拖動滑塊后500Ms沒在改變滑塊的值,那么就把當前滑塊的值發給單片機,讓單片機顯示出來
我沒有做成一直發給單片機的,,因為12864本身刷新整個界面就慢,,一直發也沒什么用.............
其余的親們看源碼吧!
現在做做下位機--單片機程序
由于單片機程序太多了,所以就事先做好了底層的了,,,就先看一看
直接貼上來把
單片機源程序如下:
- #define _MAIN_C_
- #include "include.h"
- #include "main.h"
- void main()
- {
- unsigned int CRC=0;
- InitTimer0();//初始化定時器
- InitUART(9600);//初始化串口
- Init12864();//初始化12864
- ClearGDRAM();//清除界面
- CRAM_OFF();//關閉顯示
- DisplayImage(Image);//顯示圖片
- CRAM_ON();//打開顯示
- DelayS(1);
- ClearGDRAM();//清除界面
-
- Init12864();//初始化12864
-
- for(CRC = 17;CRC<127;CRC+=23)
- {
- DrawCircle(32,CRC, 16);
- }
- while(1)
- {
- if(UsartFlage == 1)
- {
- UsartFlage = 0;
-
- if(crc16_flage(UsartReceive,UsartReadCntCopy-2))
- {
- ClearGDRAM();//清除界面
- Init12864();//初始化12864
- switch(UsartReceive[0])
- {
- case 1 : Chinese(1,1,(UsartReadCntCopy-3)/2,&UsartReceive[1]); break;//顯示漢字
- case 2 : fsin(UsartReceive[1],UsartReceive[2]); break;//顯示正弦波
- case 3 : RecWave(UsartReceive[1],UsartReceive[2]); break;//顯示鋸齒波
- case 4 : TriWave(UsartReceive[1],UsartReceive[2]); break;//顯示三角波
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼 算了剩下的不貼了,反正后面有源碼.......
說幾個地方吧
程序風格呢,還是自己習慣的風格.....
串口接收和上位機一樣的道理
在定時器里面做的判斷是否接收到一個完整的數據
串口的配置呢加入了115200的,因為印象深刻......
這個控制顯示正弦波的函數 h呢很容易看出來是控制這個波形的高度,,,,,那個3.14和f共同決定了周期(其實就是點數),,f越大這個函數的圖像越拉伸,,,,,
這個三角波函數是當初自己造的......其實就是畫線.....
上面的 f 很容易看出來就是控制拐點的,,每隔 f 個點拐一下,
x1 和 x2是記錄當前的 i 的值,關于那個 j 是由于 i 是從 0 開始的 如果不限制一下,那么第一根先就會是這樣
最后看一下主函數
主函數呢,沒什么說的....源碼地址
關于為什么要有實物了,,因為確實有人用到實物,,,,能滿足的就一定要滿足,而且好多元器件放著就浪費了.....
記得當初一個朋友學8266,竟然用了1個多月才能正常通信,,,那時候其實就想著應該做一個實物供朋友使用,這樣的話就不能耽擱這么長時間了...
想想這都過去5個多月了,,我還沒有去做8266的實驗板......哎,,,,,,,感覺太懶了
0.png (44.26 KB, 下載次數: 81)
下載附件
2017-8-12 00:27 上傳
所有資料51hei提供下載:
上位機控制12864顯示.rar
(3.31 MB, 下載次數: 113)
2017-8-12 00:29 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|