本文目錄一覽:
- 1、單片機C語言聲明一個變量的一般格式是什麼?
- 2、單片機的C語言編程
- 3、單片機c語言編程
- 4、單片機C語言編程,要使用C語言自帶的庫函數,使用哪個宏包含命令?
- 5、C語言編程問題 單片機編程 在C上是 #define (宏名)( 字符串) 這種格式
單片機C語言聲明一個變量的一般格式是什麼?
格式是
[存儲種類] 數據類型 [存儲器類型] 變量名
存儲種類:規定變量的作用域,一般不寫,使用默認的自動變量(auto)
數據類型:規定變量佔用多少存儲單元
存儲器類型:規定變量存放在哪個存儲空間,一般不寫,使用默認的數據存儲器,code是程序存儲器
變量名:變量的名字
單片機的C語言編程
#include AT89X51.h //包含頭文件
unsigned char code dispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //定義數碼管位選碼
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};//定義數碼管段選碼
unsigned char dispbuf[8]={0,0,0,0,0,0,10,10}; //顯示碼數組,因為只用了六個數碼管,所以將最後兩位賦值為10對應與段碼0x00,表示不亮
unsigned char temp[8]; //暫存數組
unsigned char dispcount; //掃描位的記錄
unsigned char T0count; //計數次數
unsigned char timecount; //定時器5ms中斷的次數
bit flag; //定義標誌位
unsigned long x; //定義變量用來存放頻率值
void main(void)
{
unsigned char i;
TMOD=0x15; //定義定時器0為計數方式,定時器1為記時方式,均工作在方式1
TH0=0; //定時器0初值高8位為0
TL0=0; //定時器0初值低8位為0
TH1=(65536-5000)/256; //定時器1初值高8位
TL1=(65536-5000)%256; //定時器1初值低8位,即定時5ms
TR1=1;//啟動定時器1
TR0=1;//啟動定時器0
ET0=1;//開定時器0中斷
ET1=1;//開定時器1中斷
EA=1; //開總中斷
while(1)
{
if(flag==1) //如果定時時間到了1s
{
flag=0; //標誌位清零
x=T0count*65536+TH0*256+TL0; //獲得整型的頻率值,T0count計數器在1s內溢出的次數,每溢出一次就計數了T0count*65536次,再加上當前計數寄存器的值即為實際計數總數
for(i=0;i8;i++)
{
temp[i]=0; //暫存緩衝區清零
}
i=0;
while(x/10) //將頻率值的每一位分離出來,存進temp數組,例如63239分離為6、3、2、3、9
{
temp[i]=x%10;
x=x/10;
i++;
}
temp[i]=x;
for(i=0;i6;i++)
{
dispbuf[i]=temp[i]; //將暫存數組的數據賦給顯示數組
}
timecount=0; //記時清零
T0count=0; //計數清零
TH0=0; //定時器0初值清零
TL0=0; //定時器0初值清零
TR0=1; //重新啟動定時器0,其實是作為計數器來用
}
}
}
void t0(void) interrupt 1 using 0 //每個計數中斷一次
{
T0count++; //計數加一
}
void t1(void) interrupt 3 using 0 //5ms產生一次中斷
{
TH1=(65536-5000)/256; //
TL1=(65536-5000)%256; //重裝初值
timecount++;
if(timecount==200) //當timecount=200時,即為1s
{
TR0=0; //關閉定時器0,為了讀出定時器0計數個數
timecount=0; //timecount清零,重新計時
flag=1; //置標誌位通知主程序1s已到
}
/**********以下為數碼管掃描部分**********/
//因為放在該中斷程序中,故每5ms掃描一位數碼管
P2=0xff; //先關閉所有數碼管
P0=dispcode[dispbuf[dispcount]]; //先確定相應數碼管的段碼,送入段碼
P2=dispbit[dispcount]; //送入位碼
dispcount++; //下一次應該掃描下一位數碼管所以要加一
if(dispcount==8) //因為共有8個數碼管
{
dispcount=0; //掃描完第7個,回頭掃描第0個
}
}
單片機c語言編程
問題在變量申明,修改為:
#include “reg52.h”
typedef unsigned char u8;
typedef unsigned int u16;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sfr GPIO_KEY=0x90;
sfr GPIO_DIG=0x80;
u16 KeyValue;
u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(u16 i)
{
while(i–);
}
void KeyDown()
{
u8 a=0;
GPIO_KEY=0x0f;
if(GPIO_KEY!=0x0f)
{
delay(1000);
if(GPIO_KEY!=0x0f)
{
GPIO_KEY=0x0f;
switch(GPIO_KEY)
{
case(0x07):KeyValue=0;break;
case(0x0b):KeyValue=1;break;
case(0x0d):KeyValue=2;break;
case(0x0e):KeyValue=3;break;
}
GPIO_KEY=0xf0;
switch(GPIO_KEY)
{
case(0x70):KeyValue=KeyValue;break;
case(0xb0):KeyValue=KeyValue+4;break;
case(0xd0):KeyValue=KeyValue+8;break;
case(0xe0):KeyValue=KeyValue+12;break;
}
while((a50)(GPIO_KEY!=0xf0))
{
delay(1000);
a++;
}
}
}
}
void main()
{
LSA=0;
LSB=0;
LSC=0;
while(1)
{
KeyDown();
GPIO_DIG=smgduan[KeyValue];
}
}
單片機C語言編程,要使用C語言自帶的庫函數,使用哪個宏包含命令?
使用#include調用庫函數。
C51語言的編譯器中包含有豐富的庫函數,使用庫函數可以大大簡化用戶程序設計的工作量,提高編程效率。每個庫函數都在相應的頭文件中給出了函數原型聲明,在使用時,必須在源程序的開始處使用預處理命令#include將有關的頭文件包含進來。
C51庫函數中類型的選擇考慮到了8051單片機的結構特性,用戶在自己的應用程序中應儘可能地使用最小的數據類型,以最大限度地發揮8051單片機的性能,同時可減少應用程序的代碼長度。
單片機c語言編程是基於C語言的單片機編程。單片機的C語言採用C51編譯器(簡稱C51)。由C51產生的目標代碼短,運行速度高,存儲空間小,符合C語言的ANSI標準,生成的代碼遵循Intel目標文件格式,而且可與A51彙編語言PL/M51語言目標代碼混合使用。51單片機支持三種高級語言,即PL/M,C和BASIC。C語言是一種通用的程序設計語言,其代碼率高,數據類型及運算符豐富,並具有良好的程序結構,適用於各種應用的程序設計,是使用較廣的單片機編程語言。
C語言編程問題 單片機編程 在C上是 #define (宏名)( 字符串) 這種格式
這個只是定義這個宏是存在的,很大情況是用於條件編譯用的,
比如後面有如下代碼
#ifdef
FUNC_USB_EN
//代碼*****
#endif
這樣如果有#define
FUNC_USB_EN
這個定義,則編譯器編譯這段代碼,否則就編譯,這樣控制某些功能的開與關
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/276582.html