找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3720|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)學(xué)習(xí)隨筆

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:51088 發(fā)表于 2014-8-27 01:48 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式


最近一直在學(xué)習(xí)單片機(jī)。單片機(jī)的學(xué)習(xí)主要通過軟件和硬件兩個(gè)方面學(xué)習(xí),軟件和硬件之間又是緊密聯(lián)系在一起的。軟件的編寫需要聯(lián)系硬件的電路來進(jìn)行,而硬件也需要軟件來控制。

開始沒有意識到硬件電路的重要性,我就想我明明驅(qū)動(dòng)的是LED燈點(diǎn)亮,為什么亮的卻是數(shù)碼管,而數(shù)碼管也只亮了8個(gè)里面的其中一個(gè)。當(dāng)時(shí)也只是看著視頻里的一步步的來,視頻里用的開發(fā)板和我用的不太一樣,但我又不會(huì)變通,完全忽視電路的重要性,沒有去好好研究。后來無意中看到電路板上有個(gè)地方需要用跳線帽來選擇電路,這就驅(qū)使我更加注重對電路的分析。

通過這段時(shí)間的接觸,我發(fā)現(xiàn)要想學(xué)好這些東西C語言相當(dāng)重要,雖然我有一定的C語言基礎(chǔ),但是和實(shí)際相結(jié)合起來完全不知道怎么用,而且還有很多C語言的巧妙運(yùn)用。比如通過for循環(huán)來延時(shí)一定的時(shí)間,通過while循環(huán)來得到死循環(huán),如何使用單片機(jī)的定時(shí)器,如何進(jìn)行中斷的使用,如何消除按鍵的抖動(dòng),如何進(jìn)行程序的調(diào)用使程序更加的簡介清晰,如何進(jìn)行掃描和動(dòng)態(tài)刷新等等。每一樣?xùn)|西都不是那么容易學(xué)到手的,因?yàn)橛械臇|西不是那么容易理解,即使能夠理解時(shí)間長了也通容易遺忘。所以需要我們不斷的練習(xí),不斷地思考,甚至于把一些東西都牢記下來,這樣時(shí)間長了才會(huì)變成自己的東西,才能夠?qū)W以致用融會(huì)貫,甚至去創(chuàng)新。

接下來要學(xué)的東西還有很多,需要我不斷地思考,不斷地練習(xí),甚至是不斷地鸚鵡學(xué)舌。要思考就要不斷的向自己問各種各樣的問題。

明天的問題:

1、  如何用16個(gè)按鍵分別在數(shù)碼管顯示0-F這16個(gè)數(shù)字?

2、  怎么編一個(gè)簡易加法器?

3、  如何控制電機(jī)轉(zhuǎn)一定的轉(zhuǎn)數(shù)?


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:51088 發(fā)表于 2014-8-27 14:02 | 只看該作者
最近學(xué)習(xí)單片機(jī)就沒有以前那么快了,難度越來越大,程序越來越復(fù)雜,需要的技巧越來越多。有些東西真的只有在理解的基礎(chǔ)上背下來才行,只理解即使懂了也不會(huì)運(yùn)用,只背那就更不行了,這兩者都有同時(shí)進(jìn)行。所以需要更大的決心來面對這一切,不能半途而廢。

       這幾天的學(xué)習(xí)主要總結(jié)了一下幾點(diǎn):
       一、就是步進(jìn)電機(jī)的驅(qū)動(dòng),在接觸之前我以為步進(jìn)電機(jī)只要給電就能轉(zhuǎn)動(dòng),接觸之后才發(fā)現(xiàn)這是不可能的,里面需要做很多的工作。如28BYJ-48型步進(jìn)電機(jī)是四相八拍的步進(jìn)電機(jī),它的控制順序(反向就是反著讀)為:

       二、在程序里面,定時(shí)器的部分。當(dāng)我們需要確定的值的時(shí)候,我們就可以直接對TH,TL進(jìn)行賦值,但有的時(shí)候不知道賦值多少,因?yàn)槭亲儎?dòng)的,就需要根據(jù)自己需要的時(shí)間來進(jìn)行賦值,例程如下:
                   void ConfigTimer0(unsigned int ms){        unsigned long tmp;         tmp=11059200/12; //定時(shí)器計(jì)數(shù)頻率        tmp=(tmp*ms)/1000;// 定時(shí)xms時(shí)間需要的計(jì)數(shù)值        tmp=65536-tmp;// 需要裝載的計(jì)數(shù)初值        tmp=tmp+18; //補(bǔ)償中斷響應(yīng)延時(shí)造成的誤差         T0RH=(unsigned char)(tmp<<8); //定時(shí)器重載值拆分為高低字節(jié)        T0RL=(unsigned char)tmp;        TMOD&=0xF0; //清零 T0 的控制位        TMOD|=0x01; 配置 T0 為模式 1        TH0=T0RH; //加載 T0 重載值        TL0=T0RL;        ET0=1;        TR0=1;}
三、數(shù)碼管掃描函數(shù)算法改進(jìn)
以前的 函數(shù)形式為;
       switch (i)
         {   case 0: ADDR2=0; ADDR1=0; ADDR0=0; i++; P0=LedBuff[0]; break;
            case 1: ADDR2=0; ADDR1=0; ADDR0=1; i++; P0=LedBuff[1]; break;
          case 2: ADDR2=0; ADDR1=1; ADDR0=0; i++; P0=LedBuff[2]; break;
          case 3: ADDR2=0; ADDR1=1; ADDR0=1; i++; P0=LedBuff[3]; break;
             case 4: ADDR2=1; ADDR1=0; ADDR0=0; i++; P0=LedBuff[4]; break;
             case 5: ADDR2=1; ADDR1=0; ADDR0=1; i=0; P0=LedBuff[5]; break;
             default: break;
        }
改變后的函數(shù)形式:
P1 = (P1 & 0xF8) | i;
             P0 = LedBuff;
             if (i < 5)
                 i++;
             else
                 i = 0;
       其中,ADDR0,ADDR1,ADDR2是連在P1口的第三位,通過P1 = (P1 & 0xF8) | i;就可以直接改變第三位的值,所以非常簡便。
       四、就是程序的模塊化,把各種功能的程序分別寫成獨(dú)立的模塊,然后在需要的程序里面進(jìn)行調(diào)用,這樣可以讓程序看起來更加的簡單清晰,也便于后面的維護(hù)。
       總之,寫程序真不是一件容易的事情,不僅需要足夠嚴(yán)謹(jǐn)?shù)倪壿嬎季S,還需要足夠的細(xì)心,在程序的編寫中可能一個(gè)小錯(cuò)誤就可能導(dǎo)致得不到想要的結(jié)果,這種問題是經(jīng)常遇到的。不過也要盡力去解決這些問題,增加自己的經(jīng)驗(yàn),遇到什么樣的問題就可以直接對癥下藥,而不是丈二的和尚,摸不著頭腦,什么都不知道。

回復(fù)

使用道具 舉報(bào)

板凳
ID:65516 發(fā)表于 2014-8-27 18:45 | 只看該作者
多謝樓主的分享,很好用自學(xué)筆記
回復(fù)

使用道具 舉報(bào)

地板
ID:65519 發(fā)表于 2014-8-27 20:32 | 只看該作者
加油加加油加加油加加油加
回復(fù)

使用道具 舉報(bào)

5#
ID:64075 發(fā)表于 2014-8-28 13:07 | 只看該作者
加油加加油加加油加加油加
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表