久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機(jī)講義6:#define與typedef 軟件延時If For語句 按鍵講解

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:250285 發(fā)表于 2017-11-19 01:35 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
第六講 實(shí)驗(yàn)5實(shí)驗(yàn)8
知識點(diǎn):
1、 學(xué)會畫程序流程圖
2、 流程控制語句 if(){}else{}用法
3、 操作符 ”~ ”、“!”、“&&”含義
4、 帶參函數(shù)
5、 函數(shù)調(diào)用
6、 理解宏定義 #define “替換”作用
7、 循環(huán)語句 for 的用法
8、 庫函數(shù) unsigned char_cror_ (unsigned char, unsigned char);
unsigned char _crol_ (unsignedchar, unsigned char);含義
9、 C51 擴(kuò)展類型 code含義
10、   流程控制語句:switchcase 用法
11、   數(shù)組定義、引用方式
12、   延時函數(shù)


一、51單片機(jī)軟件延時:
1、 幾種周期介紹
  周期名稱
  
  描述
  
  時間
  
  振蕩
  
  機(jī)
  的振蕩源的周期
  
  T=1/f
  
  狀態(tài)
  
  經(jīng)
  
  
  2T
  
  機(jī)器
  
  CPU 可以完成一個獨(dú)立操
  作所需要的周期
  
  12T
  
  指令
  
  指 CPU 完成一條操作所需
  的全部時間
  
  n*12T
  


2、指令:
1、MUL、DIV:僅有的 4 周期指令
2、包含 DPTR 和 PC 的指令均為 2 周期指令
3、所有的絕對跳轉(zhuǎn)和條件轉(zhuǎn)移指令,均為 2 周期指令
4、所有包括 A 寄存器的指令,均為單周期指令
5、位操作指令中,ANL 和 ORL 是 2 周期指令
6、所有包含立即地址的指令,除 INC direct 及 DEC direct 外,均為 2 周期指令
7、剩下的均為單周期指令。如:
voiddelay(uint z)
{
uinti ,j;
for(i = z; i> 0;i--)


for(j =0; j < 921; j++)
}


分析:
1.先計(jì)算你單片機(jī)的振蕩(時鐘)周期 T=1/晶振(11.0592MHZ)
2.一次 i--操作為 12T
3.忽略變量定義,上述延時函數(shù)共需時間:921*z*12T
4.帶入 T:921*12*T*z 約為 z us
3、計(jì)算誤差出現(xiàn)的原因:
1.軟件仿真時,函數(shù)調(diào)用的時候入棧出棧操作的耗時。
2.指令周期隨指令的不同而不同導(dǎo)致的誤差。
3.中斷的影響。
4.變量的范圍超過,從而與預(yù)計(jì)時間不一樣。


while(i--):如果 i 為 char 型,執(zhí)行一次大概為 5us 左右;如果 i 為 int 型則執(zhí)行一次大概為 10us 左右。注意:軟件延時通常用于時序要求較高的編程中,其它需延時較長的地方必須采用單片機(jī)內(nèi)部定時器。

二、#define與 typedef 區(qū)別
1、typedef 的用法

在 C 語言中,typedef 常用來定義一個標(biāo)識符及關(guān)鍵字的別名,它是語言編譯過程的一部分, 但它并不實(shí)際分配內(nèi)存空間,
如:typedef    int       INT;

2、#define 的用法
#define 為一宏定義語句,通常用它來定義常量(包括無參量與帶參量),以及用來實(shí)現(xiàn)那些 “表面似和善、背后一長串”的宏,它本身并不在編譯過程中進(jìn)行,而是在這之前(預(yù)處理過程)就已經(jīng)完成了,但也因此難以發(fā)現(xiàn)潛在的錯誤及其它代碼維護(hù)問題,如:

#define   INT    int
#define   TRUE   1
#define   Add(a,b)     ((a)+(b));
#define   Loop_10    for (inti=0; i<10; i++)

3、typedef 與#define 的區(qū)別
從以上的概念便也能基本清楚,typedef 只是為了增加可讀性而為標(biāo)識符另起的新名稱(僅僅只是個別名),而#define原本在 C 中是為了定義常量,到了 C++,const、enum、 inline 的出現(xiàn)使它也漸漸成為了起別名的工具。有時很容易搞不清楚與 typedef 兩者到 底該用哪個好,如#define INT int 這樣的語句,用 typedef 一樣可以完成,用哪個好 呢?我主張用 typedef,因?yàn)樵谠缙诘脑S多 C 編譯器中這條語句是非法的,只是現(xiàn)今的 編譯器又做了擴(kuò)充。

為了盡可能地兼容,一般都遵循#define 定義“可讀”的常量以及一些宏語句的任務(wù), 而 typedef 則常用來定義關(guān)鍵字、冗長的類型的別名。

宏定義只是簡單的字符串代換(原地?cái)U(kuò)展),而 typedef 則不是原地?cái)U(kuò)展,它的新名字具 有一定的封裝性,以致于新命名的標(biāo)識符具有更易定義變量的功能。請看上面第一大點(diǎn) 代碼的第三行:typedef    (int*)  pINT;以及下面這行:#define               pINT2 int*效果相同?實(shí)則不同!實(shí)踐中見差別:pINT a,b;的效果同 int *a;int *b;表示定 義了兩個整型指針變量。而 pINT2 a,b;的效果同 int*a, b;表示定義了一個整型指針 變量 a 和整型變量 b。

typedef 的四個用途和兩個陷阱
用途一: 定義一種類型的別名,而不只是簡單的宏替換
用途二: 用在舊的 C 代碼中(具體多舊沒有查),幫助 struct。

typedef   struct   tagPOINT
{
int   x;
int   y;
}POINT;

POINT   p1;   //   這樣就比原來的方式少寫了一個 struct,比較省事,尤其在大量 使用的時候 或許,在 C++中,typedef 的這種用途二不是很大,但是理解了它,對掌握 以前的舊代碼還是有幫助的,畢竟我們在項(xiàng)目中有可能會遇到較早些年代遺留下來的代 碼。

用途三: 用 typedef 來定義與平臺無關(guān)的類型。用途四:為復(fù)雜的聲明定義一個新的簡單的別名。

陷阱一: 記住,typedef 是定義了一種類型的新別名,不同于宏,它不是簡單的字符串替換。字符串替換就行。



陷阱二: typedef 在語法上是一個存儲類的關(guān)鍵字(如 auto、extern、mutable、static、 register 等一樣),雖然它并不真正影響對象的存儲特性,如: typedef   static   intINT2;  //不可行 編譯將失敗,會提示“指定了一個以上的存儲類”。



三、按鍵:
按鍵是單片機(jī)系統(tǒng)中最常用的器件。各種儀器儀表、家用電器操作面板上都離不開按鍵,是最基本的輸入部件。因此,掌握按鍵輸入電路設(shè)計(jì)、按鍵驅(qū)動程序設(shè)計(jì)是十分必要的。按鍵的分類:從單片機(jī)獲取按鍵信號類型的角度來講,可以分為模擬按鍵和數(shù)字按鍵;從按鍵與單片機(jī)IO 端口對應(yīng)關(guān)系上來講,可以分為獨(dú)立按鍵和矩陣式按鍵。獨(dú)立按鍵很簡單,就是一個按鍵對應(yīng)一個 IO 端口;而矩陣式按鍵則相對復(fù)雜一些,通過行與列的交叉組合成 i 行*j 列個 按鍵。

按鍵的有效方式:
按下有效、按下松開(抬起)有效、長按 n 秒有效、連按 n 次有效、組合按鍵有效等。按鍵驅(qū)動程序設(shè)計(jì)步驟:
讀取鍵值—按鍵消抖—鍵值處理


四、cror 與 crol 的區(qū)別
循環(huán)右移與循環(huán)左移



這是以前給小學(xué)生培訓(xùn)單片機(jī)做的一套講義,盡可能的做到了通俗易懂,現(xiàn)分享給大家,絕對的純原創(chuàng)資料.
全部資料下載地址(共15章,pdf格式):http://www.zg4o1577.cn/bbs/dpj-98524-1.html




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

使用道具 舉報(bào)

沙發(fā)
ID:610271 發(fā)表于 2019-9-11 08:15 | 只看該作者
謝謝樓主
回復(fù)

使用道具 舉報(bào)

板凳
ID:635120 發(fā)表于 2019-11-12 20:47 來自手機(jī) | 只看該作者
謝謝         
回復(fù)

使用道具 舉報(bào)

地板
ID:8222 發(fā)表于 2021-12-13 10:27 | 只看該作者
謝謝樓主詳細(xì)解釋。
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品片| 国产乱肥老妇国产一区二 | 亚洲精品乱码久久久久久蜜桃91 | 91在线播 | av中文字幕在线播放 | 欧美午夜精品 | 欧美男人亚洲天堂 | 久草青青草 | 黄a大片 | 欧美日韩精品在线一区 | 日韩欧美一区二区三区免费观看 | 一区二区三区国产好的精 | 黄色成人免费看 | 欧美一区二区三区视频 | 激情 亚洲 | 精品国产一区二区国模嫣然 | 国产一区二区三区四 | 国产在线精品一区二区 | 欧美成人第一页 | 一级做a爰片久久毛片免费看 | 在线看91 | 成人影院免费视频 | 色在线看 | 欧美日韩国产在线观看 | 久草久草久草 | 天天操夜夜看 | 九九九久久国产免费 | 色视频网站| 久草网站 | 日韩一级欧美一级 | 亚洲精品1 | 日韩精品一区二区三区中文在线 | 国产精品成人国产乱一区 | 在线欧美小视频 | 国产成人精品一区二区在线 | 午夜免费在线观看 | 黄色一级大片在线观看 | 精品国产乱码久久久久久闺蜜 | 成人精品鲁一区一区二区 | 亚洲国产精品99久久久久久久久 | 国产精品久久久久久久久久 |