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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機C語言雜記:初學單片機C語言的可以看看

[復制鏈接]
跳轉到指定樓層
樓主
ID:434779 發表于 2018-11-29 15:46 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<>與#include""
一、#include<>
  #include< > 引用的是編譯器的類庫路徑里面的頭文件。
  假如你編譯器定義的自帶頭文件引用在 C:\Keil\c51\INC\下面,則 #include<stdio.h> 引用的就是 C:\Keil\c51\INC\stdio.h 這個頭文件,不管你的項目在什么目錄里,C:\Keil\c51\INC\stdio.h 這個路徑就定下來了,一般是引用自帶的一些頭文件,如:stdio.h、conio.h、string.h、stdlib.h 等等。
二、#include""
  #include" " 引用的是你程序目錄的相對路徑中的頭文件。
  假如你的項目目錄是在 D:\Projects\tmp\ ,則 #include"my.h" 引用的就是D:\Projects\tmp\my.h 這個頭文件,一般是用來引用自己寫的一些頭文件。如果使用#include" " ,它是會先在你項目的當前目錄查找是否有對應頭文件,如果沒有,它還是會在對應的引用目錄里面查找對應的頭文件。例如,使用 #include "stdio.h" 如果在你項目目錄里面,沒有 stdio.h 這個頭文件,它還是會定位到C:\Keil\c51\INC\stdio.h 這個頭文件的。

#ifndef和#define區別
頭文件中的 #ifndef/#define/#endif 防止該頭文件被重復引用”。但是是否能理解“被重復引用”是什么意思?是不能在不同的兩個文件中使用include來包含這個頭文件嗎?如果頭文件被重復引用了,會產生什么后果?是不是所有的頭文件中都要加入#ifndef/#define/#endif 這些代碼?

其實“被重復引用”是指一個頭文件在同一個cpp文件中被include了多次,這種錯誤常常是由于include嵌套造成的。比如:存在a.h文件#include "c.h"而此時b.cpp文件導入了#include "a.h" 和#include"c.h"此時就會造成c.h重復引用。

頭文件被重復引用引起的后果:有些頭文件重復引用只是增加了編譯工作的工作量,不會引起太大的問題,僅僅是編譯效率低一些,但是對于大工程而言編譯效率低下那將是一件多么痛苦的事情。
有些頭文件重復包含,會引起錯誤,比如在頭文件中定義了全局變量(雖然這種方式不被推薦,但確實是C規范允許的)這種會引起重復定義。

是不是所有的頭文件中都要加入#ifndef/#define/#endif 這些代碼?
    答案:不是一定要加,但是不管怎樣,用#ifndexxx #define xxx #endif或者其他方式避免頭文件重復包含,只有好處沒有壞處。個人覺得培養一個好的編程習慣是學習編程的一個重要分支。
     下面給一個#ifndef/#define/#endif的格式:
    #ifndef A_H意思是"if not definea.h"  如果不存在a.h
    接著的語句應該#define A_H  就引入a.h
    最后一句應該寫#endif   否則不需要引入
例子:
#ifndefGRAPHICS_H // 防止graphics.h被重復引用
#defineGRAPHICS_H
#include<math.h> // 引用標準庫的頭文件
#include“header.h” // 引用非標準庫的頭文件
voidFunction1(…); // 全局函數聲明
classBox // 類結構聲明
{
};
#endif






Sbit
bit
sfr
1.bit和sbit都是C51擴展的變量類型。 bit和intchar之類的差不多,只不過char=8位, bit=1位而已。都是變量,編譯器在編譯過程中分配地址。除非你指定,否則這個地址是隨機的。這個地址是整個可尋址空間,RAM+FLASH+擴展空間。bit只有0和1兩種值,意義有點像Windows下VC中的BOOL。 sbit是對應可位尋址空間的一個位,可位尋址區:20H~2FH。一旦用了sbi xxx= REGE^6這樣的定義,這個sbit量就確定地址了。sbit大部分是用在寄存器中的,方便對寄存器的某位進行操作的。
  2.bit位標量 bit位標量是C51編譯器的一種擴充數據類型,利用它可定義一個位標量,但不能定義位指針,也不能定義位數組。它的值是一個二進制位,不是0就是1,類似一些高級語言中的Boolean類型中的True和False。
3.sfr特殊功能寄存器 sfr也是一種擴充數據類型,占用一個內存單元,值域為0~255。利用它可以訪問51單片機內部的所有特殊功能寄存器。如用sfr P1 = 0x90這一句定P1為P1端口在片內的寄存器,在后面的語句中我們用以用P1 = 255(對P1端口的所有引腳置高電平)之類的語句來操作特殊功能寄存器。 sfr P1 = 0x90; //定義P1 I/O 口,其地址90H sfr 關鍵定后面是一個要定義的名字,可任意選取,但要符合標識符的命名規則,名字最好有一定的含義如P1 口可以用P1 為名,這樣程序會變的好讀好多.等號后面必須是常數,不允許有帶運算符的表達式,而且該常數必須在特殊功能寄存器的地址范圍之內(80H-FFH),具體可查看附錄中的相關表. sfr 是定義8 位的特殊功能寄存器而sfr16 則是用來定義16 位特殊功能寄存器, 如8052 的T2 定時器,可以定義為: sfr16 T2 = 0xCC; //這里定義8052 定時器2,地址為T2L=CCH,T2H=CDH

有符號型signed和無符號型unsigned的區別
就拿short型來說吧
signed short型的表示范圍是-32768~32767中的整數
而unsigned short型的表示范圍是0~65535中的整數
也就是說,signed型能夠表示負數,而unsigned則不能,但signed表示的最大數總要比unsigned小,其原因是因為在內存中signed需要用1位(short型共有16位)來存儲正負號,unsigned型沒有正負號,所以這1位也就節省了下來和其它位一起表示整數了。
int型、long型同理
如果要運算的數存在負數的可能,那么一定要用signed。如果不存在負數,且要求存儲的數據范圍盡可能大,則一般用unsigned型。
如果聲明變量時不指明signed還是unsigned,則默認為signed

char是字符變量的說明符
字符變量的取值是字符常量,即單個字符。字符變量的類型說明符是char。字符變量類型說明的格式和書寫規則都與整型變量相同。
unsignedchar code  table[  ]={  };
定義一個無符號字符型一維數組,table是數組名table[],中的[],省掉了一個參數,如果有參數,參數就表示些數組包含的個數,{}里的值就是數組包含的值。上面的代碼可以寫成
unsignedchar code table[16]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};
unsignedchar TempData[8];
unsignedchar是無符號字節型,char類型變量的大小通常為1個字節(1字節=8個位),且屬于整型。整型的每一種都有無符號(unsigned)和有符號(signed)兩種類型(float和double總是帶符號的),在默認情況下聲明的整型變量都是有符號的類型(char有點特別),如果需聲明無符號類型的話就需要在類型前加上unsigned。無符號版本和有符號版本的區別就是無符號類型能保存2倍于有符號類型的數據,比如16位系統中一個int能存儲的數據的范圍為-32768~32767,而unsigned能存儲的數據范圍則是0~65535。

VOID
表示空類型,它跟int,float是同地位的,一般用在沒有返回值的函數中,比如你寫void main (),主函數完了不用寫return 語句,但是如果是int main ()或者是main (),你不寫return 語句它就會有warning
void是C語言中的一個關鍵字,字面意思是“無類型”,常用在程序編寫中對定義函數的參數類型、返回值、函數中指針類型進行聲明,有注釋和限制程序的作用。void *可以指向任何類型的數據,在C語言中,凡不加返回值類型限定的函數,就會被編譯器作為返回整型值處理。
void的字面意思是“無類型”,void *則為“無類型指針”,void *可以指向任何類型的數據。
void幾乎只有“注釋”和限制程序的作用,定義一個void變量沒有意義。

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产激情一区二区三区 | 日韩精品一区二区三区 | 乳色吐息在线观看 | 国产精品成人一区二区三区夜夜夜 | 国产精品成人一区二区 | 日日天天 | 中国一级特黄真人毛片免费观看 | 欧美一区成人 | 狠狠综合久久av一区二区老牛 | 中文字幕在线观看av | 日韩欧美中文字幕在线观看 | 成人av看片 | 日韩国产精品一区二区三区 | 中文字幕在线第二页 | 国内精品久久久久久 | 国产精品日韩欧美一区二区三区 | 成人激情视频在线播放 | 一区二区三区免费在线观看 | 亚洲欧美成人在线 | 欧美一区在线视频 | 青春草国产 | 精品久久久久久久久亚洲 | 成人午夜激情 | 国产在线观看 | 另类 综合 日韩 欧美 亚洲 | 国产乡下妇女做爰 | 毛片av免费在线观看 | 久久骚| 一区二区三区欧美 | 欧美激情一区二区三区 | 国产黄色精品在线观看 | 91人人在线 | 97日日碰人人模人人澡分享吧 | 成年人在线 | 精品视频在线观看 | 久久久精品一区二区三区 | 亚洲36d大奶网 | 天天天天操 | 五月婷婷中文 | 日韩三级免费网站 | 伊色综合久久之综合久久 |