您的位置:

单片机c语言编程格式,单片机c语言函数大全

本文目录一览:

单片机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

这个定义,则编译器编译这段代码,否则就编译,这样控制某些功能的开与关