本文目录一览:
- 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
这个定义,则编译器编译这段代码,否则就编译,这样控制某些功能的开与关