设计与开发

单片机c语言实例 单片机编程实例大全!

小编 2024-10-07 设计与开发 23 0

单片机编程实例大全!

*实例 1:使用P3口流水点亮8位LED

#include<reg51.h> //包含单片机寄存器的头文件

/

函数功能:延时一段时间

/

void delay(void)

{

unsigned char i,j;

for(i=0;i<250;i++)

for(j=0;j<250;j++)

;

}

/

函数功能:主函数

/

void main(void)

{

while(1)

{

P3=0xfe; //第一个灯亮

delay(); //调用延时函数

P3=0xfd; //第二个灯亮

delay(); //调用延时函数

P3=0xfb; //第三个灯亮

delay(); //调用延时函数

P3=0xf7; //第四个灯亮

delay(); //调用延时函数

P3=0xef; //第五个灯亮

delay(); //调用延时函数

P3=0xdf; //第六个灯亮

delay(); //调用延时函数

P3=0xbf; //第七个灯亮

delay(); //调用延时函数

P3=0x7f; //第八个灯亮

delay(); //调用延时函数

}

*实例 2: 通过对P3口地址的操作流水点亮8位LED

#include<reg51.h> //包含单片机寄存器的头文件

sfr x=0xb0; //P3口在存储器中的地址是b0H, 通过sfr可定义8051内核单片机

//的所有内部8位特殊功能寄存器,对地址x的操作也就是对P1口的操作

/

函数功能:延时一段时间

/

void delay(void)

{

unsigned char i,j;

for(i=0;i<250;i++)

for(j=0;j<250;j++)

; //利用循环等待若干机器周期,从而延时一段时间

}

/

函数功能:主函数

/

void main(void)

{

while(1)

{

x=0xfe; //第一个灯亮

delay(); //调用延时函数

x=0xfd; //第二个灯亮

delay(); //调用延时函数

x=0xfb; //第三个灯亮

delay(); //调用延时函数

x=0xf7; //第四个灯亮

delay(); //调用延时函数

x=0xef; //第五个灯亮

delay(); //调用延时函数

x=0xdf; //第六个灯亮

delay(); //调用延时函数

x=0xbf; //第七个灯亮

delay(); //调用延时函数

x=0x7f; //第八个灯亮

delay(); //调用延时函数

}

*实例3:用不同数据类型控制灯闪烁时间

#include<reg51.h> //包含单片机寄存器的头文件

/

函数功能:用整形数据延时一段时间

/

void int_delay(void) //延时一段较长的时间

{

unsigned int m; //定义无符号整形变量,双字节数据,值域为0~65535

for(m=0;m<36000;m++)

; //空操作

}

/

函数功能:用字符型数据延时一段时间

/

void char_delay(void) //延时一段较短的时间

{

unsigned char i,j; //定义无符号字符型变量,单字节数据,值域0~255

for(i=0;i<200;i++)

for(j=0;j<180;j++)

; //空操作

}

/

函数功能:主函数

/

void main(void)

{

unsigned char i;

while(1)

{

for(i=0;i<3;i++)

{

P1=0xfe; //P1.0口的灯点亮

int_delay(); //延时一段较长的时间

P1=0xff; //熄灭

int_delay(); //延时一段较长的时间

}

for(i=0;i<3;i++)

{

P1=0xef; //P1.4口的灯点亮

char_delay(); //延时一段较长的时间

*实例 4:用单片机控制第一个灯亮

#include<reg51.h> //包含51单片机寄存器定义的头文件

void main(void)

{

P1=0xfe; //P1=1111 1110B,即P1.0输出低电平

}

*实例 5:用单片机控制一个灯闪烁:认识单片机的工作频率

#include<reg51.h> //包含单片机寄存器的头文件

/

函数功能:延时一段时间

/

void delay(void) //两个void意思分别为无需返回值,没有参数传递

{

unsigned int i; //定义无符号整数,最大取值范围65535

for(i=0;i<20000;i++) //做20000次空循环

; //什么也不做,等待一个机器周期

}

/

函数功能:主函数 (C语言规定必须有也只能有1个主函数)

/

void main(void)

{

while(1) //无限循环

{

P1=0xfe; //P1=1111 1110B, P1.0输出低电平

delay(); //延时一段时间

P1=0xff; //P1=1111 1111B, P1.0输出高电平

delay(); //延时一段时间

}

}

*实例 6:将 P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功能

#include<reg51.h> //包含单片机寄存器的头文件

/

函数功能:主函数 (C语言规定必须有也只能有1个主函数)

/

void main(void)

{

while(1) //无限循环

{

P1=0xff; // P1=1111 1111B,熄灭LED

P0=P1; // 将 P1口状态送入P0口

P2=P1; // 将 P1口状态送入P2口

P3=P1; // 将 P1口状态送入P3口

}

}

*实例 7:用P0口、P1 口分别显示加法和减法运算结果

#include<reg51.h>

void main(void)

{

unsigned char m,n;

m=43; //即十进制数2x16+11=43

n=60; //即十进制数3x16+12=60

P1=m+n; //P1=103=0110 0111B,结果P1.3、P1.4、P1.7 口的灯被点亮

P0=n-m; //P0=17=0001 0001B,结果P0.0、P0.4的灯被熄灭

}

*实例 8:用P0、P1口显示乘法运算结果

#include<reg51.h> //包含单片机寄存器的头文件

void main(void)

{

unsigned char m,n;

unsigned int s;

m=64;

n=71;

s=m*n; //s=64 71=4544,需要16位二进制数表示,高8位送P1口,低8位送P0口

//由于4544=17 256+192=H3 16 16 16+H2 16 16+H1 16+H0

//两边同除以256,可得17+192/256=H3 16+H2+(H1 16+H0)/256

//因此,高8位16进制数H3 16+H2必然等于17,即4544除以256的商

//低8位16进制数H1 16+H0必然等于192,即4544除以256的余数

P1=s/256; //高8位送P1口 ,P1=17=11H=0001 0001B, P1.0和P1.4口灭,其余亮

P0=s%256; //低8位送P0口 , P3=192=c0H=1100 0000B,P3.1,P3.6,P3.7口灭,其余亮

}

*实例 9:用P1、P0口显示除法运算结果

#include<reg51.h> //包含单片机寄存器的头文件

void main(void)

{

P1=36/5; //求整数

P0=((36%5) 10)/5; //求小数

while(1)

; //无限循环防止程序“跑飞”

}

*实例 10:用自增运算控制P0口8位LED流水花样

#include<reg51.h> //包含单片机寄存器的头文件

/

函数功能:延时一段时间

/

void delay(void)

{

unsigned int i;

for(i=0;i<20000;i++)

;

}

/

函数功能:主函数

/

void main(void)

{

unsigned char i;

for(i=0;i<255;i++) //注意i的值不能超过255

{

P0=i; //将i的值送P0口

delay(); //调用延时函数

}

}

单片机C语言编程,心得都在这里了

这个8*8按键程序的过程中,不管是在自己写还是参考别人程序的过程中,发现自己对C语言有些基本知识点和编程规范有很多不懂的地方,有些是自己以前的编程习惯不好,有些就是基础知识不扎实的表现,所以总结出来。

一、.H文件与.C文件的关系:

迄今为止,写过的程序都是一些很简单的程序,从来没有想到要自己写.H文件,也不知道.H文件到底什么用,与.C文件什么关系。只是最近写键盘程序,参考别人的程序时,发现别人写的严格的程序都带有一个“KEY.H”,里面定义了.C文件里用到的自己写的函数,如Keyhit()、Keyscan()等。

经过查找资料得知,.H文件就是头文件,估计就是Head的意思吧,这是规范程序结构化设计的需要,既可以实现大型程序的模块化,又可以实现根各模块的连接调试。

1、.H文件介绍:

在单片机C程序设计中,项目一般按功能模块化进行结构化设计。将一个项目划分为多个功能,每个功能的相关程序放在一个C程序文档中,称之为一个模块,对应的文件名即为模块名。一个模块通常由两个文档组成,一个为头文件*.h,对模块中的数据结构和函数原型进行描述;另一个则为C文件*.c ,对数据实例或对象定义,以及函数算法具体实现。

2、.H文件的作用

作为项目设计,除了对项目总体功能进行详细描述外,就是对每个模块进行详细定义,也就是给出所有模块的头文件。通常H头文件要定义模块中各函数的功能,以及输入和输出参数的要求。模块的具体实现,由项目组成根据H文件进行设计、编程、调试完成。为了保密和安全,模块实现后以可连接文件OBJ、或库文件LIB的方式提供给项目其他成员使用。由于不用提供源程序文档,一方面可以公开发行,保证开发人员的所有权;另一方面可以防止别人有意或无意修改产生非一致性,造成版本混乱。所以H头文件是项目的详细设计和团队工作划分的依据,也是对模块进行测试的功能说明。要引用模块内的数据或算法,只要用包含include指定模块H头文件即可。

3、.H文件的基本组成

/*如下为键盘驱动的头文档*/

#ifndef _KEY_H_ //防重复引用,如果没有定义过_KEY_H_,则编译下句

#define _KEY_H_ //此符号唯一, 表示只要引用过一次,即#i nclude,则定义符号_KEY_H_

/////////////////////////////////////////////////////////////////

char keyhit( void ); //击键否

unsigned char Keyscan( void ); //取键值

/////////////////////////////////////////////////////////////////

#endif

相关问答

肿么把 c语言 程序烧进 单片机 -ZOL问答

1、把C语言编译为编程器支持的语言格式,比如常用的bin,或hex等格式。2、如果是可在线编程的,可以用ISP直接进行烧录。3、如果不是可在线编程的,将单片机芯片...

单片机c语言 指令详解?

单片机C语言指令详解如下:位操作指令。MCS-51单片机的硬件结构中,有一个位处理器(又称布尔处理器),它有一套位变量处理的指令集。传送指令。MOVP1.3,C和...

单片机C语言 编写点亮两盏led灯,首先从中间两盏点亮,依次相邻两盏灯点亮,依次循环永不停息?

#includesbitM=P1^0;voiddelayms(unsignedcharms){unsignedinti;while(ms--){for(i=0;i}}...

编辑好 C语言 程序,怎么导入 单片机 -ZOL问答

单片机ROM。在DOS里有个EDIT编辑器直接输入EDIT就可以了希望能够帮到你刚好我前几天刚用过这个软件你的main前么写int你在程序的最后面加个语句:getch...

学习 单片机C语言 ,哪些书比较好?

看单片机C语言教程如郭天祥的《新概念51单片机C语言教程》;如果不会C语言的话先把C语言学好,学谭浩强《C程序设计》,有C语言基础学C语言编程就没多大问题。单...

C语言 单片机 主要运用到那些?

在单片机的开发应用中,已逐渐开始引入高级语言,C语言就是其中的一种。对用惯了汇编的人来说,总觉得高级语言’可控性’不好,不如汇编那样随心所欲。但是只...

c语言 单片机 应该怎么学习呢?

单片机是一门很有用的技术,懂单片机可以找一份很好的研发岗工作。所谓万事开头难,在初学入门阶段可能摸不着头脑无从下手,如果有了比较好的学习方法单片机学习...

单片机C语言 要达到什么水平?

要学到什么程度是比较主观的,这取决于您期望的应用和使用场景。但是,通常来说,学习单片机C语言需要达到以下几个层次:1.掌握C语言基础:熟悉C语言的基本语...

单片机C语言 中一个字母,一个数字各占几个字节 - 懂得

字母a-z,数字0-9都是占一个字节。置于一个数值就是另一回事了,你可以定义:char一个字节,int两个字节,long四个字节,float四个字节字母占一个字节,...

c语言 单片机 的关系?

C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要...

猜你喜欢