51单片机使用C语言点亮闪烁LED灯

发布时间:2023-05-10  

导语

下面是点亮51单片机使用C语言闪烁LED灯的的一段代码,也是我们迈入C51的第一步。我们将从头开始,一步步讲解下面的程序。


#include

#define uchar unsigned char
#define uintunsigned int

sbit LED= P1^0;

void main()
{
LED=0;
while(1)
{
LED=0;
delay(1000);
LED=1;
delay(1000);
}
}

void delay(uchar ms)
{
uint x=0, y=0;
for(x=xms;x>=0;x--)
for(y=110;y>=0;y--);
}


.C to .Hex

在从编写的上述文本程序到实际烧录到单片机的Hex二进制机器语言,keil这个大家伙帮我们做了很多的东西。

单片机可以看作是一个功能完全的计算机,同计算机一样,单片机只能识别机器语言。也就是用二进制代码表达指令,但更确切一点来说,机器语言是由高低电位构成的,指定高电位为1,低电位为0,而我们对电路进行一定的设计后,电路中高低电位的输入输出正好与2进制状态相符,所以我们也就看到了 1、0的那种表现形式。

同时,为了简化二进制的表现形式,我们使用16进制来表示,即Hex文件。

但编写机器语言太过繁琐,人们开始用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。这就是汇编语言,但低级,不具有移植性,能直接访问计算机硬件,效率高,占用资源少,学习入门较为困难,切移植性差。

C语言是一种高级编程语言,与低级语言相对。它是以人类的日常语言为基础的一种编程语言,使用一般人易于接受的文字来表示,有较高的可读性,以方便对电脑认知较浅的人亦可以大概明白其内容。

所编写的C语言通过Keil进行预处理,编译,链接等就生成了Hex文件,我们将Hex文件烧录到单片机中,复位就运行起来了。

预处理

预处理以#开头,在从.C到 .hex之前,扩展C语言程序设计的环境。

#include 的作用将 reg52.h文件复制到编译的源文件中,使用<>或" "包含文件名。

#define uchar unsigned char的作用是将unsigned char替换为uchar。

也常用#define定义一些函数宏、常量等。如#define PI 3.14、#define ABS(x) (x)<0?-(x):(x)

还有更多的预处理方式,暂无必要,勿增新知。

变量

变量格式

[存储种类]数据类型[存储器类型]变量名表 赋值;

其中存储种类和存储器类型在初学时不必了解,编译器会自动的赋予默认值。

变量名是C51区分不同变量,为不同变量取的名称。在C51中规定变量名可以由字母、数字和下划线三种字符组成,且第一个字母必须为字母或下划线。

数据类型用于向单片机申请内存大小,也决定了变量的数值范围。在单片机的内部是以字节为操作,一个字节八个位,即一个字节所表示的数据范围在 0000 0000到 1111 1111;在此,二进制没有符号位,于是人为的使用最高位表示符号位,1为负,0为1;即表示范围为 1111 1111到 0111 1111,即十进制的-128到127。但大多数时候,单片机很少用到赋值,因此我们在数据类型前加上修饰符unsigned来去掉符号位。



在C语言中,无法直接去操作变量中的单独的某一位,但C51中添加了bit位,是 c51编译器的一种扩充数据类型,利用它可定义一个位标量,它的值是一个二进制位,不是 0就是 1,sbit同样是单片机c语言中的一种扩充数据类型,利用它能访问芯片内部的 RAM中的可寻址位或特殊功能寄存器中的可寻址位。

函数

void main()和 void delay(uchar ms)都是函数;

返回类型函数名(数据类型形参名称...){
功能代码;
}

函数是指一段可以直接被另一段程序或代码引用的程序或代码。也叫做子程序、方法。

void表示没有返回值,大多数的情况下,我们将使用void修饰的函数,也可以使用有返回值的方式返回uint等;

其中main()是每一个函数中最重要的,单片机开机复位后将运行main()函数,当他执行完后,程序将会从头开始,我们不希望这样,因此我们添加了

while(1){

}

这时一行循环语句,并且是一个死循环,即会一直循环{ }内的程序。

delay()是一个延时函数,我们向括号中填写ms,程序便会赞同多少ms,他用于实现的延时的子功能;

运算符

LED=0;

给led赋值0,即将右边的值填入左边,填入的值不应超过数据类型的表示范围。

y--

运行过后,y将减少1;

y>=0

布尔运算,只有两个值,0或 1,大于0为真1,反之为0。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    名为“Keil uVision2”的软件中汇编完成,汇编后得到一个*.hex文件,这就是目标文件,然后用编程器将该文件“写”到单片机89s51中,这样该89s51就具有自动控制小灯闪烁的功能了。 在实......
    51单片机C语言程序100例分析(1)IO+C语言+头文件;//实例1:用单片机控制第一个灯亮 #include   //包含51单片机寄存器定义的头文件 void main(void......
    P1.7端口输出高电平的语句是: SETBP1.7; 让P1.7端口输出低电平的语句是: CLRP1.7,实现发光二极管LED闪烁的编程思路如下图3所示。 图3: 《51单片机最小系统原理编程框图》 完整的源程序......
    剩下的其他可以不接线悬空。 下面我们来写一个驱动发光二极管闪烁的程序,这是很简单的事情,只需要以一定的世界间隔,给p1.7高电平,然后低电平,如此重复,我们就看到了发光2极管在闪烁程序如下: 完整的源程序......
    电阻后分别连接到MCS-51单片机的P1^0和P1^1引脚,利用上述代码即可实现LED交替闪烁的效果。 这是个很小的成功的C51程序,可以看到,它清楚地包括头文件和程序主题。头文......
    零基础:学51单片机定时器;   我们学单片机是首先学的就是 led 闪烁,那是用延时程序做的,现在回想起来,这样做不很恰当,为什么呢?我们的主程序做了灯的闪烁,就不能再干其它的事了,难道单片机......
    上没有什么市场,而STM32单片机的开发,仿真似乎是必不可少的工具。 另一个就是传统的51单片机是不支持仿真的,如果需要仿真功能,就需要购买专用的仿真芯片,这种操作感觉比较麻烦。 51单片机的程序......
    AT89S51单片机定时计数器的使用技巧详细说明;1. 实验任务 用AT89S51的定时/计数器T0产生2秒钟的定时,每当2秒定时到来时,更换指示灯闪烁,每个指示闪烁的频率为0.2秒,也就是说,开始......
    闪烁5次后亮红灯,东西向绿灯亮,如此往复。请用单片机设计其控制系统并调试运行。 电路原理图 元件清单 C语言程序 #include  //包含头文件reg51.h,定义51单片机......
    没有这个耐心去等,比如在将一个数从1调节到100的时候,那后果是可想而知的。为此,就有必要引入一个叫中断的神奇东西,程序中的中断,会把正在运行的普通程序或者低级的中断服务程序打断,先运行本中断服务函数内的程序,就好......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>