⑴ 新手如何學習編程
熟悉以下關鍵東西,可以邊學邊做,定期訓練,經常思考,長期積累:
1、語法。
2、基礎理論(數學、數據結構、演算法等)。
3、設計方法(編程原則、設計模式、框架設計等)。
4、庫(核心、基礎、UI、擴展、游戲引擎等)。
5、計算機相關(操作系統、網路、圖形學等)。
6、領域知識(游戲設計、網站設計等)。
7、開發工具(編輯器、IDE、自動部署等)。
8、項目管理(進度管理、分工協作、Bug管理、版本控制等)。
最普遍也是最重要的能力:創造力。努力分析並理解好做什麼以及怎麼做。要知道上面那些東西一開始都是不存在的。
具體方法包括:
1、快速閱讀入門教程和書籍,適合學習語言和基礎庫。比如我學Java讀的《Java編程思想》,練習題做過一點,然後學ActionScript就沒讀過書,只讀過Adobe官方文檔《ActionScript 3.0編程》。
2、閱讀庫的文檔、實例、源碼。比如Flash、Flex開發,熟悉官方API很重要,很多細節要具體使用時才注意到,這時候最好做個筆記,雖然我從沒看過我的筆記。
3、做一個自己感興趣或熟悉的小項目,比如我就以黑白棋游戲作為多個語言的試水項目,一樣的邏輯,便於把關注點放在語言特點上。
4、自己動手豐衣足食。廚師有菜譜,程序員可沒菜譜。比如我做游戲,最關鍵的游戲編程知識全部是動手學出來的,很少有專門針對某個業務領域(如游戲)的編程書籍,要麼是入門書,要麼是模式書(如演算法)、理論書(圖形學),很少有書籍教你如何開發一個45度角地圖系統加編輯器的,全靠自己思考,以及看前人的代碼,需要時找些網路資料。關鍵是,可以培養最重要的創造力。
對於演算法和設計模式,可以研讀下,但是關鍵還是靠平時如何使用了。新手勉強不來的。
項目管理方面的,就得靠工作經驗了,多思考多提意見不要只走流程。
⑵ 關於51單片機做數碼電壓表時有段程序始終看不懂,請各位單片機高手們指點迷津
void也可以看成是數據類型,只是他是特殊的數據類型,這個類型就是「沒有東西」。
比如一個函數
int a(int b){ }
表示函數的參數是int類型的,返回值是int類型的。如果沒有返回值,也沒有參數,就都把類型名稱寫成void,既然沒有了,那麼也就沒有名稱了,所以b也可以省了,便成了 void a(void) { }。
函數的定義是很基本的c語言知識,這個說起來很啰嗦,隨便看書就能明白了。
void delay(void) 這個函數沒什麼特別意義,只是一個延時而已。因為單片機運行速度很快,數碼管也不是恆定的點亮一個,而是動態掃描的,就是說,先點亮一個位,然後關閉,點亮另一個位。這個過程很快,由於視覺暫留作用,人眼只能看到所有的位都是同時亮的,這個原理和放電影一樣,不過,如果點亮一個後,立即點亮另一個,會因為點亮時間太短,燈還沒全亮就滅了(本人估計的,但應該也是這樣),造成燈光太暗。所以要延時一下。
單片機的電源電壓是5V,那麼所有埠的承受電壓就一定是5V,如果是3.3V單片機,就一定只能承受3.3V,所以測量量程一定是0 至 5V。如果實際測量量程遠遠小於這個范圍,必須用放大器放大。如果量程大於這個范圍,必須分壓。
void convdata(unsigned char i)
這個 i 明顯就是數模轉換得到的結果,作為參數傳遞給這個函數處理。void以及函數參數等名詞術語,說起來就是一本教科書的量,請自行看書,這是很基本的。
dis[0] = i/51 以及後面的兩句,是一個數學問題。(dis[i]就是一個數組,這個不用多言)。
為什麼是51呢?看他的注釋「將0-255級換算成0.00-5.00的電壓數值」。
也就是說,如果測得的電壓是5V,那麼數模轉換的結果就是255,這是一個8位數的最大值,這個數模轉換器的最大值就是8位,所以5V的電壓轉換得到就是255.
然後就可以照推了,如果測得的值是2.5V,那麼得到的值就是255 / 2 = 127.5。也就是說,實際測得的值和這個轉換值的關系是正比的,他們的比值就是 255 / 5 = 51 ,所以用測到的值去除以51,就得到實際值。明白了嗎?如果這樣說還不明白,那就沒辦法了~
然後,為什麼後面又要搞那兩條式子呢?這是因為,要把一個數值在數碼管上顯示出來,必須把一個數值上每一個位的數字單獨處理給數碼管顯示。比如,上面除以51後,得到的數可能會有小數,比如1.45,那麼要把這個數用數碼管顯示出來,就必須把 1、4、5和小數點都單獨取出來。
以這個(i%51)*10/51*2為例:
i%51 , 是 i 除以 51 後的余數。這個數再除以51,再乘以10,再取整,就是第一個小數了。他這個式子把"乘以10"放在前面,是因為如果先除以51,那麼因為i 和 51 都是int類型,結果也必將是int類型,沒有小數,再乘以10也沒意義了。至於後面為什麼還要乘以2,這個還真不清楚,不過他這個dis數組是用來查表的,就是後面的tab[],要看他的表是怎麼定義的。他第一個數沒有乘以2,但是這個數和小數點的顯示有關,可能不顯示小數點的就要乘以2。
後面的求第二個小數,參照這個解釋自己理解一下。