
头文件里面定义了51系列单片机各寄存器的地址sbitclk=p1^0;//位定义,把p1点0i/o口位定义成clk写程序的时候clk就代替p1^6口往下的几个位定义都是一样的
譬如说我写代码clk=1;则单片机的p10引脚为高电平(有些不一样)如果写clk=0;则单片机的p10引脚为低电平(高电平可以简单的理解为此点电压对地线电压的值)
随着单片机硬件性能的提高,编写应用程序更着重于程序本身的效率。
Franklin或KEIIC51交叉编译器是专为51系列单片机设计的一种高效的C语言编译器,用其开发的应用程序易于维护,可移植性好,是目前较流行的51系列单片机的开发工具。
一、C51语言程序设计的基本技巧
首先,C51语言程序设计要尽可能采用结构化的设计方法。可将整个程序按功能分成若干个模块,不同的模块完成不同的功能。对于不同的功能模块,分别指定相应的入口参数和出口参数,而经常使用的一些程序最好编成函数,这样既不会引起整个程序管理的混乱,还可使程序的可读性、移植性增强。
C51语言的主程序结构:
#include
main0{while(1);}
这是最小的C程序,包括头部文件和程序主体。头部文件为引用的外部资源文件,包括硬件信息和外部模块提供的可使用的函数和变量的说明。
语句定义后,就可以在C语言程序中像汇编一样使用这些硬件设备。
在C5l中常用项目来管理,项目一般分为C文件块和头部文件块,常把不同的功能写在不同的C文件中,依靠项目的管理,最后把所有文件连接起来,这样就可以得到烧录的HEX文件或BIN文件。没有在头部文件中列出的文件,可以算是该C文件的内部函数和变量,外部C不能使用。另外,在程序设计过程中要充分利用C51语言的预处理命令。
对于一些常用的常数,如TRUE、FAlSE、PI,以及各种特殊功能寄存器,或程序中一些重要的依据外界条件可变的常量,可采用宏定义(#de-fine)或集中起来放在一个头文件中进行定义,再采用文件包含命令(#in-elude)将其加入到程序中,这样当需要修改某个参量时,只需修改相应的包含文件或宏定义,而不必对使用它们的每个程序文件都进行修改,有利于文件的维护和更新。
举例:利用宏定义和条件编译,源程序不作任何修改就可适用于不同时钟频率的单片机系统,并可根据情况的不同取不同的delay值,完成不同的目的。程序如下:
#define flag 1#ifdef flag==l#define fose 6Mdelay=10;#elif flag==0#define fose 8Mdelay=12;#else#define fosc 12Mdelay=20;#endiFMain0{ for(I=O;l
#include<reg51h>
#include "intrinsh"
#include "absacch"
#define uchar unsigned char
uchar code ledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0xff};//0-9
unsigned char disdat[4]="2018";
sbit key=P3^0;
void ext0() interrupt 0
{
key++;
key%=3;
}
void t1isr() interrupt 3 //显示
{
TH1=0xec;
TL1=0x78;
P0=0xff;
P2=0x01<<scanled;
P0=~ledtab[disdat[3]];
scanled++;
scanled%=4;
}
main()
{
TMOD=0x10;
TH1=0xec;
TL1=0x78;
TR1=1;
ET1=1;
EA=1;
while(1)
{
if(key==0)
{
disdat[]="0423";
while(key==0);
disdat[]="2018";
}
}
}
在返回值类型不为void类型时,是有用的。
在 int main()中,return 表示返回一个整形,
正常结束,而在一般函数体中 return 0 表示不正常的结束。
void display()
{
com1= 1;
com2= 1;
com3= 1; // close all segment display
nop();
com_count++; //位选移位
// return; //调试时使用,以免干扰调试
if(com_count>3) com_count=1; //控制位选,使他能自动循环。
switch(com_count)
{
case 1: //位选码为1就准备显示第一个数码管
segment=table[key_value];//送数码管的数字显示编码。
com3=0; //开此位选
break; //停止,跳出循环
case 2: //位选码为2就准备显示第二个数码管
segment=table[volume_l]; //同上
com1=0;//同上
break;//同上
case 3://同上
segment=table[volume_h];
com2=0;
break;
default: //默认入口
return; //跳出循环,也就是数码管显示无任何动作。
}
推荐使用keil,现在至少使用的都是是V6以上的版本。
keil uvision2:>
以上就是关于编写 C51 程序控制单片机,需要添加的存储 51 单片机寄存器地址的头文件是全部的内容,包括:编写 C51 程序控制单片机,需要添加的存储 51 单片机寄存器地址的头文件是、at89c51单片机 如何用c语言编程啊、求大神用c51编写一个单片机小程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)