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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5509|回復: 3
打印 上一主題 下一主題
收起左側

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

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


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


2、指令:
1、MUL、DIV:僅有的 4 周期指令
2、包含 DPTR 和 PC 的指令均為 2 周期指令
3、所有的絕對跳轉和條件轉移指令,均為 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.先計算你單片機的振蕩(時鐘)周期 T=1/晶振(11.0592MHZ)
2.一次 i--操作為 12T
3.忽略變量定義,上述延時函數共需時間:921*z*12T
4.帶入 T:921*12*T*z 約為 z us
3、計算誤差出現的原因:
1.軟件仿真時,函數調用的時候入棧出棧操作的耗時。
2.指令周期隨指令的不同而不同導致的誤差。
3.中斷的影響。
4.變量的范圍超過,從而與預計時間不一樣。


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

二、#define與 typedef 區別
1、typedef 的用法

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

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

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

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

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

宏定義只是簡單的字符串代換(原地擴展),而 typedef 則不是原地擴展,它的新名字具 有一定的封裝性,以致于新命名的標識符具有更易定義變量的功能。請看上面第一大點 代碼的第三行:typedef    (int*)  pINT;以及下面這行:#define               pINT2 int*效果相同?實則不同!實踐中見差別: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 的這種用途二不是很大,但是理解了它,對掌握 以前的舊代碼還是有幫助的,畢竟我們在項目中有可能會遇到較早些年代遺留下來的代 碼。

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

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



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



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

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


四、cror 與 crol 的區別
循環右移與循環左移



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




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

使用道具 舉報

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

使用道具 舉報

板凳
ID:635120 發表于 2019-11-12 20:47 來自手機 | 只看該作者
謝謝         
回復

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久精品中文字幕 | 成人在线视频观看 | 精品国产第一区二区三区 | 成人三级av| 日韩在线视频免费观看 | 国产精品视频一区二区三区四区国 | 成人网址在线观看 | 欧美精品一区二区三区四区五区 | 久久免费国产视频 | 看真人视频一级毛片 | 精品一区二区久久久久久久网精 | 欧美在线一区二区三区 | 久久99精品久久久久 | 我想看国产一级毛片 | 国产精品国产三级国产aⅴ原创 | 涩涩鲁亚洲精品一区二区 | 中文精品久久 | 欧美一区二区三区 | 久久精品一 | 天堂网中文 | 天堂一区二区三区 | 91亚洲免费| 久视频在线 | 美女久久视频 | 日韩三级在线 | 国产高清区 | 亚洲精品一区二区三区中文字幕 | 超碰在线免费公开 | 高清免费在线 | 午夜免费网站 | 色综合天天综合网国产成人网 | 亚洲一区二区av | 日本不卡在线观看 | 超碰97免费 | 在线成人免费视频 | 麻豆av电影网 | 狠狠操狠狠干 | 欧美不卡一区二区三区 | 亚洲视频在线播放 | 91免费看片 | 蜜桃视频在线观看www社区 |