单片机C语言编程实例

合集下载

单片机c语言实例程序300篇

单片机c语言实例程序300篇

单片机c语言实例程序300篇单片机C语言【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。

组成所有的排列后再去掉不满足条件的排列。

2.程序源代码:main(){inti,j,k;printf("\n");for(i=1;i<5;i++)/某以下为三重循环某/for(j=1;j<5;j++)for(k=1;k<5;k++){if(i!=k&&i!=j&&j!=k)/某确保i、j、k三位互不相同某/printf("%d,%d,%d\n",i,j,k);}}==============================================================【程序2】题目:企业发放的奖金根据利润提成。

利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?1.程序分析:请利用数轴来分界,定位。

注意定义时需把奖金定义成长整型。

2.程序源代码:main()单片机C语言{longinti;intbonu1,bonu2,bonu4,bonu6,bonu10,bonu;canf("%ld",&i);bonu1=100000某0.1;bonu2=bonu1+100000某0.75;bonu4=bonu2+200000某0.5;bonu6=bonu4+200000某0.3;bonu10=bonu6+400000某0.15;if(i<=100000)bonu=i某0.1;eleif(i<=200000)bonu=bonu1+(i-100000)某0.075;eleif(i<=400000)bonu=bonu2+(i-200000)某0.05;eleif(i<=600000)bonu=bonu4+(i-400000)某0.03;eleif(i<=1000000)bonu=bonu6+(i-600000)某0.015;elebonu=bonu10+(i-1000000)某0.01;printf("bonu=%d",bonu);}============================================================ ==【程序3】题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。

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

单片机c语言编程实例大全
;
}
/
函数功能:主函数
/
void main(void)
{
while(1)
{
P3=0xfe; //第一个灯亮
delay(); //调用延时函数
P3=0xfd; //第二个灯亮
delay(); //调用延时函数
P3=0xfb; //第三个灯亮
delay(); //调用延时函数
P3=0xf7; //第四个灯亮
}
//实例7:通过对P3口地址的操作流水点亮8位LED
#include<reg51.h> //包含单片机寄存器的头文件
sfr x=0xb0; //P3口在存储器中的地址是b0H,通过sfr可定义8051内核单片机
//的所有内部8位特殊功能寄存器,对地址x的操作也就是对P1口的操作
/
函数功能:延时一段时间
x=0xfd; //第二个灯亮
delay(); //调用延时函数
x=0xfb; //第三个灯亮
delay(); //调用延时函数
x=0xf7; //第四个灯亮
delay(); //调用延时函数
x=0xef; //第五个灯亮
delay(); //调用延时函数
x=0xdf; //第六个灯亮
delay(); //调用延时函数
delay(); //调用延时函数
P3=0xef; //第五个灯亮
delay(); //调用延时函数
P3=0xdf; //第六个灯亮
delay(); //调用延时函数
P3=0xbf; //第七个灯亮
delay(); //调用延时函数
P3=0x7f; //第八个灯亮
delay(); //调用延时函数

单片机C语言程序设计实训100例

单片机C语言程序设计实训100例

《单片机C语言程序设计实训100例—基于8051+Proteus仿真》案例第01 篇基础程序设计01 闪烁的LED/* 名称:闪烁的LED说明:LED按设定的时间间隔闪烁*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED=P1^0;//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){while(1){LED=~LED;DelayMS(150);}}02 从左到右的流水灯/* 名称:从左到右的流水灯说明:接在P0口的8个LED从左到右循环依次点亮,产生走马灯效果*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){P0=0xfe;while(1){P0=_crol_(P0,1); //P0的值向左循环移动DelayMS(150);}}03 8只LED左右来回点亮/* 名称:8只LED左右来回点亮说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){uchar i;P2=0x01;while(1){for(i=0;i<7;i++){《单片机C 语言程序设计实训100例---基于8051和PROTEUS仿真》案例P2=_crol_(P2,1); //P2的值向左循环移动DelayMS(150);}for(i=0;i<7;i++){P2=_cror_(P2,1); //P2的值向右循环移动DelayMS(150);}}}04 花样流水灯/* 名称:花样流水灯说明:16只LED分两组按预设的多种花样变换显示*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code Pattern_P0[]={0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff,0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff};uchar code Pattern_P2[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff,0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff3 上海师范大学信息与机电工程学院—倪继锋};//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){uchar i;while(1){ //从数组中读取数据送至P0和P2口显示for(i=0;i<136;i++){P0=Pattern_P0[i];P2=Pattern_P2[i];DelayMS(100);}}}05 LED模拟交通灯/* 名称:LED模拟交通灯说明:东西向绿灯亮若干秒,黄灯闪烁5次后红灯亮,红灯亮后,南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁5此后变红灯,东西向变绿灯,如此重复。

单片机c语言程序设计实例100例--基于805i+proteus仿真

单片机c语言程序设计实例100例--基于805i+proteus仿真

以下是一个基于8051单片机和Proteus仿真环境的C语言程序设计实例:实例1:点亮LED灯
在这个例子中,我们将使用C语言编写一个简单的程序来控制8051单片机的一个I/O引脚,使其驱动一个LED灯。

c代码:
要使用Proteus进行仿真,你需要按照以下步骤操作:
1. 打开Proteus软件,创建一个新的设计工程。

2. 在元件库中搜索并添加相应的8051单片机型号(如AT89C51)和LED 元件到工作区。

3. 根据实际硬件连接,正确配置单片机的引脚和LED的连接。

4. 右键单击单片机元件,选择“Edit Component”打开编辑窗口。

5. 在“Program File(s)”区域,点击右侧的浏览按钮,选择你的C语言源文件(如上述的main.c)。

6. 点击“OK”关闭编辑窗口,然后点击工具栏上的“Play”按钮开始仿真。

在仿真过程中,你应该能看到LED灯被点亮,这表明你的C语言程序已经在Proteus环境中成功运行。

以上只是一个基础的例子,实际的"单片机C语言程序设计实例100例--基于8051+Proteus仿真"会包含更复杂和多样化的应用场景,包括定时器/计数器
应用、中断处理、串口通信、ADC/DAC转换、液晶显示等等。

每个实例都会详细介绍程序设计思路、代码实现以及如何在Proteus中进行仿真调试。

通过这些实例的学习和实践,你可以逐步掌握8051单片机的C语言编程技巧和Proteus仿真环境的使用方法。

51单片机C语言编程100例-单片机c语言编程

51单片机C语言编程100例-单片机c语言编程

51单片机C语言编程100例-单片机c语言编程51单片机C语言编程100例在嵌入式系统领域,单片机是常用的硬件平台之一。

而C语言作为一种高级编程语言,能够为单片机编程提供更高的效率和便利性。

本文将介绍51单片机C语言编程的100个实例,帮助读者了解并掌握单片机的基本编程技巧和应用方法。

一、LED灯控制1. 实例介绍:通过控制51单片机的IO口输出,实现对LED灯的亮灭控制。

2. 实例代码:```#include <reg51.h>sbit LED = P1^0; // 定义P1口的第0位为LEDvoid main(){while(1){LED = 0; // LED灯亮delay(1000); //延时1秒LED = 1; // LED灯灭delay(1000); //延时1秒}}```二、数码管显示1. 实例介绍:使用数码管显示数字0-9,并实现数码管的动态显示效果。

2. 实例代码:```#include <reg51.h>unsigned char code DispTab[] ={0xC0,0XF9,0XA4,0XB0,0X99,0X92,0X82};sbit WeiDu = P1^2;sbit DUAN = P1^0;void delay(unsigned int t){unsigned int i;while(t--)for(i=0;i<125;i++);}void main(){unsigned int i;while(1){P0 = DispTab[i]; // 显示数字iDUAN = 1; //点亮段码DUAN = 0; //关闭段码P0 = ~(0x01 << i); // 选择数码管的位 WeiDu = 0; // 打开选通位WeiDu = 1; // 关闭选通位delay(100); // 延时100msi++;if(i > 9) i = 0;}}```三、外部中断1. 实例介绍:使用外部中断,当外部输入信号发生变化时,触发中断程序。

51单片机汇编语言及C语言经典实例

51单片机汇编语言及C语言经典实例

51单片机汇编语言及C语言经典实例汇编语言是一种用来编写计算机指令的低级语言,它与机器语言十分接近,可以直接控制计算机硬件。

而C语言是一种高级程序设计语言,它具有结构化编程和模块化设计的特点。

本文将介绍51单片机汇编语言和C语言的经典实例,并进行详细解析。

一、LED指示灯的闪烁我们首先来看一个经典的51单片机汇编语言的实例——LED指示灯的闪烁。

我们可以通过控制单片机的IO口来实现LED的闪烁效果。

以下是汇编语言的代码:```assemblyORG 0 ; 程序起始地址MOV P1, #0; 将 P1 置为0,熄灭LEDLJMP $ ; 无限循环```以上代码使用了51单片机的MOV指令和LJMP指令。

MOV指令用来将一个立即数(这里是0)存储到寄存器P1中,控制对应的I/O口输出低电平,从而熄灭LED。

而LJMP指令则是无条件跳转指令,将程序跳转到当前地址处,实现了无限循环的效果。

对应的C语言代码如下:```c#include <reg51.h>void main() {P1 = 0; // 将 P1 置为0,熄灭LEDwhile(1); // 无限循环}```以上代码使用了reg51.h头文件,该头文件提供了对51单片机内部寄存器和外设的访问。

通过将P1赋值为0,控制IO口输出低电平,实现了熄灭LED的效果。

while(1)是一个无限循环,使得程序一直停留在这个循环中。

二、数码管的动态显示接下来我们介绍51单片机汇编语言和C语言实现数码管动态显示的经典实例。

数码管动态显示是通过控制多个IO口的高低电平来控制数码管显示不同的数字。

以下是汇编语言的代码:```assemblyORG 0 ; 程序起始地址MOV A, #0FH ; 设置数码管全亮,A存储数码管控制位MOV P2, A ; 将 A 的值存储到 P2,控制数码管的数码控制位DELAY: ; 延时循环MOV R7, #0FFH ; 设置延时计数值LOOP1: ; 内层循环MOV R6, #0FFH ; 设置延时计数值LOOP2: ; 内部延时循环DJNZ R6, LOOP2 ; 延时计数减1并判断是否为0,不为0则继续循环DJNZ R7, LOOP1 ; 延时计数减1并判断是否为0,不为0则继续循环DJNZ A, DELAY ; A减1并判断是否为0,不为0则继续循环JMP DELAY ; 无限循环,实现动态显示```以上代码中,我们通过MOV指令来将一个立即数(0x0F)存储到寄存器A中,控制数码管显示0-9的数字。

51单片机C语言编程100例

51单片机C语言编程100例

51单片机C语言编程100例1. 引言51单片机是一款常用于嵌入式系统的微控制器,其强大的功能和广泛的应用使得掌握51单片机C语言编程成为许多电子工程师和学习者的首选。

本文将介绍并讲解51单片机C语言编程的100个例子,帮助读者逐步掌握编程技巧和开发经验。

2. 闪烁LED灯第一个例子是闪烁LED灯。

我们将通过C语言编写程序,控制51单片机上的一个LED灯以固定的频率闪烁,展示基本的输入输出操作。

通过学习这个例子,读者可以了解到C语言与单片机的交互方式。

3. 数码管计数器第二个例子是数码管计数器。

我们将使用C语言编写程序,通过按键操作控制数码管上的数字进行计数。

这个例子展示了如何使用中断和定时器来实现交互功能和多任务处理。

4. PWM波控制第三个例子是PWM波控制。

我们将使用C语言编程,通过调整占空比来控制51单片机上的PWM波输出。

这个例子展示了如何利用51单片机的定时器和中断模式来生成模拟信号。

5. 温度采集与显示第四个例子是温度采集与显示。

我们将利用51单片机内置的ADC模块,通过连接温度传感器来实现温度采集,并将采集到的数据在液晶屏上显示。

这个例子展示了如何使用模拟到数字转换和外部模块的接口技术。

6. 蓝牙通信控制第五个例子是蓝牙通信控制。

我们将利用51单片机的串口功能和蓝牙模块,实现与蓝牙设备之间的通信和控制。

通过学习这个例子,读者可以熟悉串口通信和外部设备的接口编程。

7. 距离测量与报警第六个例子是距离测量与报警。

我们将使用超声波传感器和蜂鸣器,通过C语言编程实现距离的测量和报警功能。

这个例子展示了如何使用外部传感器和控制器进行物理量的检测和反馈。

8. 数字音乐播放器第七个例子是数字音乐播放器。

我们将使用51单片机的PWM功能和SD卡模块,通过C语言编程实现音乐的播放和控制。

这个例子展示了如何使用定时器和外部存储设备进行数据的读取和解码。

9. 图形液晶显示第八个例子是图形液晶显示。

我们将利用51单片机的并行接口和图形液晶屏,通过C语言编程实现图形和字符的显示功能。

51单片机C语言编程100例

51单片机C语言编程100例

51单片机C语言编程100例目录实例3:用单片机控制第一个灯亮 ...................................... 3 实例4:用单片机控制一个灯闪烁:认识单片机的工作频率 ................ 3 实例5:将P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功能...... 4 实例6:使用P3口流水点亮8位LED.................................... 4 实例7:通过对P3口地址的操作流水点亮8位LED........................ 5 实例8:用不同数据类型控制灯闪烁时间 ................................ 6 实例9:用P0口、P1 口分别显示加法和减法运算结果 .. (8)实例10:用P0、P1口显示乘法运算结果 ................................ 8 实例11:用P1、P0口显示除法运算结果 ................................ 9 实例12:用自增运算控制P0口8位LED流水花样 ........................ 9 实例13:用P0口显示逻辑\与\运算结果 (10)实例14:用P0口显示条件运算结果 ................................... 10 实例15:用P0口显示按位\异或\运算结果 ............................. 10 实例16:用P0显示左移运算结果 ..................................... 10 实例17:\万能逻辑电路\实验 ........................................ 11 实例18:用右移运算流水点亮P1口8位LED............................ 11 实例19:用if语句控制P0口8位LED的流水方向 ...................... 12 实例20:用swtich语句的控制P0口8位LED的点亮状态 ................ 12 实例21:用for语句控制蜂鸣器鸣笛次数 .............................. 14 实例22:用while语句控制LED.......................................15 实例23:用do-while语句控制P0口8位LED流水点亮 .................. 16 实例24:用字符型数组控制P0口8位LED流水点亮 ..................... 16 实例25:用P0口显示字符串常量 .................................... 17 实例26:用P0 口显示指针运算结果................................... 18 实例27:用指针数组控制P0口8位LED流水点亮 ....................... 18 实例28:用数组的指针控制P0 口8 位LED流水点亮 .................... 19 实例29:用P0 、P1口显示整型函数返回值 ............................ 20 实例30:用有参函数控制P0口8位LED流水速度 ....................... 21 实例31:用数组作函数参数控制流水花样 .............................. 22 实例32:用指针作函数参数控制P0口8位LED流水点亮 ................. 23 实例33:用函数型指针控制P1口灯花样 ............................... 24 实例34:用指针数组作为函数的参数显示多个字符串 .................... 25 实例35:字符函数ctype.h应用举例 .................................. 26 实例36:内部函数intrins.h应用举例 ................................ 27 实例37:标准函数stdlib.h应用举例 (27)实例38:字符串函数string.h应用举例 ............................... 28 实例39:宏定义应用举例2........................................... 28 实例40:宏定义应用举例 2........................................... 29 实例41:宏定义应用举例3. (29)实例42:用定时器T0查询方式P2口8位控制LED闪烁 .................. 30 实例43:用定时器T1查询方式控制单片机发出1KHz音频 ................ 31 实例44:将计数器T0计数的结果送P1口8位LED显示 (31)实例45:用定时器T0的中断控制1位LED闪烁.........................32实例46:用定时器T0的中断实现长时间定时...........................33实例47:用定时器T1中断控制两个LED以不同周期闪烁.................34实例48:用计数器T1的中断控制蜂鸣器发出1KHz音频..................35实例49:用定时器T0的中断实现\渴望\主题曲的播放...................35实例50-1:输出50个矩形脉冲.......................................38实例50-2:计数器T0统计外部脉冲数 (39)实例51-2:定时器T0的模式2测量正脉冲宽度.........................40实例52:用定时器T0控制输出高低宽度不同的矩形波...................40实例53:用外中断0的中断方式进行数据采集..........................41实例54-1:输出负脉宽为200微秒的方波..............................42实例54-2:测量负脉冲宽度..........................................43实例55:方式0控制流水灯循环点亮..................................44实例56-1:数据发送程序 (45)实例56-2:数据接收程序............................................46实例57-1:数据发送程序............................................47实例57-2:数据接收程序............................................48实例58:单片机向PC发送数据 (49)实例59:单片机接收PC发出的数据...................................50实例60:用LED数码显示数字5.......................................51实例61:用LED数码显示器循环显示数字0~9...........................51实例62:用数码管慢速动态扫描显示数字\........................52实例63:用LED数码显示器伪静态显示数字1234........................53实例64:用数码管显示动态检测结果. (54)实例65:数码秒表设计..............................................56实例66:数码时钟设计..............................................57实例67:用LED数码管显示计数器T0的计数值.........................61实例68:静态显示数字“59”........................................62实例69:无软件消抖的独立式键盘输入实验............................63实例70:软件消抖的独立式键盘输入实验..............................63实例71:CPU控制的独立式键盘扫描实验...............................64实例72:定时器中断控制的独立式键盘扫描实验........................67实例73:独立式键盘控制的4级变速流水灯............................70实例74:独立式键盘的按键功能扩展:\以一当四\......................72实例75:独立式键盘调时的数码时钟实验..............................74实例76:独立式键盘控制步进电机实验.. (78)实例77:矩阵式键盘按键值的数码管显示实验..........................81实例78:矩阵式键盘按键音..........................................84实例79:简易电子琴................................................85实例80:矩阵式键盘实现的电子密码锁................................91实例81:用LCD显示字符'A'.. (95)实例82:用LCD循环右移显示\......................98实例83:用LCD显示适时检测结果...................................102实例84:液晶时钟设计 (106)实例85:将数据\写入AT24C02再读出送P1口显示................112实例86:将按键次数写入AT24C02,再读出并用1602LCD显示............116实例87:对I2C总线上挂接多个AT24C02的读写操作...................124实例88:基于AT24C02的多机通信读取程序.........................129实例88:基于AT24C02的多机通信写入程序..........................133实例90:DS18B20温度检测及其液晶显示..............................144实例91:将数据\写入X5045再读出送P1口显示..................153实例92:将流水灯控制码写入X5045并读出送P1口显示................157实例93:对SPI总线上挂接多个X5045的读写操作.....................161实例94:基于ADC0832的数字电压表.................................165实例95:用DAC0832产生锯齿波电压.................................171实例96:用P1口显示红外遥控器的按键值............................172实例97:用红外遥控器控制继电器...................................174实例98:基于DS1302的日历时钟....................................177实例99:单片机数据发送程序.......................................186实例100:电机转速表设计..........................................187模拟霍尔脉冲......................................................192/某函数的使用和熟悉某///实例3:用单片机控制第一个灯亮#include //包含51单片机寄存器定义的头文件 void main(void) while(1) //无限循环P1=0某fe; //P1=1111 1110B,即P1.0输出低电平 }//实例4:用单片机控制一个灯闪烁:认识单片机的工作频率#include //包含单片机寄存器的头文件 /某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某函数功能:延时一段时间某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某/void delay(void) //两个void意思分别为无需返回值,没有参数传递unsigned int i; //定义无符号整数,最大取值范围65535for(i=0;i<20000;i++) //做20000次空循环;//什么也不做,等待一个机器周期}/某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某函数功能:主函数(C语言规定必须有也只能有1个主函数)某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某/ voidmain(void)while(1) //无限循环P1=0某fe; //P1=1111 1110B, P1.0输出低电平 delay(; //延时一段时间P1=0某ff; //P1=1111 1111B, P1.0输出高电平 delay(; //延时一段时间 } }//实例5:将P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功能#include //包含单片机寄存器的头文件/某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某函数功能:主函数(C语言规定必须有也只能有1个主函数)某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某/void main(void)while(1) //无限循环P1=0某ff; // P1=1111 1111, 熄灭LED P0=P1; // 将 P1口状态送入P0口 P2=P1; // 将 P1口状态送入P2口 P3=P1; // 将 P1口状态送入P3口 } }//实例6:使用P3口流水点亮8位LED#include //包含单片机寄存器的头文件 /某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某函数功能:延时一段时间某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某/void delay(void)unsigned char i,j; for(i=0;i<250;i++)for(j=0;j<250;j++) ; }/某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某函数功能:主函数某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某/ voidmain(void)while(1)P3=0某fe; //第一个灯亮 delay(; //调用延时函数 P3=0某fd; //第二个灯亮 delay(; //调用延时函数 P3=0某fb; //第三个灯亮 delay(; //调用延时函数 P3=0某f7; //第四个灯亮 delay(; //调用延时函数P3=0某ef; //第五个灯亮 delay(; //调用延时函数 P3=0某df; //第六个灯亮 delay(; //调用延时函数 P3=0某bf; //第七个灯亮 delay(; //调用延时函数 P3=0某7f; //第八个灯亮delay(; //调用延时函数 } }//实例7:通过对P3口地址的操作流水点亮8位LED#include //包含单片机寄存器的头文件sfr 某=0某b0; //P3口在存储器中的地址是b0H,通过sfr可定义8051内核单片机//的所有内部8位特殊功能寄存器,对地址某的操作也就是对P1口的操作/某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某某。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机C语言编程实例前言INTEL公司的MCS-51单片机是目前在我国应用得最广泛的单片机之一.随着单片机应用技术的不断发展,许多公司纷纷以51单片机为内核,开发出与其兼容的多种芯片,从而扩充和扩展了其品种和应用领域。

C语言已成为当前举世公认的高效简洁而又贴近硬件的编程语言之—。

将C语言向单片机上的移植,始于20世纪80年代的中后期。

经过十几年的努力,C语言终于成为专业化单片机上的实用高级语言。

用C语言编写的8051单片机的软件,可以大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完善的系统。

因此,不管是对于新进入这一领域的开发者来说,还是对于有多年单片机开发经验的人来说,学习单片机的C语言编程技术都是十分必要的。

.C语言是具有结构化.模块化编译的通用计算机语言,是国际上应用最广.最多的计算语言之一。

C51是在通用C语言的基础上开发出的专门用于51系列单片机编程的C语言.与汇编语言相比,C51在功能上.结构上以及可读性.可移植性.可维护性等方面都有非常明显的优势。

目前最先进、功能最强大、国内用户最多的C51编译器是Keil Soft ware公司推出的KeilC51。

第一章单片机C语言入门1.1建立您的第一个C项目使用C语言肯定要使用到C编译器,以便把写好的C程序编译为机器码,这样单片机才能执行编写好的程序。

KEIL uVISION2是众多单片机应用开发软件中优秀的软件之一,它支持众多不同公司的MCS51架构的芯片,它集编辑,编译,仿真等于一体,同时还支持PLM、汇编和C语言的程序设计,它的界面和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。

因此很多开发51应用的工程师或普通的单片机爱好者,都对它十分喜欢。

以上简单介绍了KEIL51软件,要使用KEIL51软件,必需先要安装它。

KEIL51是一个商业的软件,对于我们这些普通爱好者可以到KEIL中国代理周立功公司的网站上下载一份能编译2K的DEMO版软件,基本可以满足一般的个人学习和小型应用的开发。

安装好后,你是不是迫不及待的想建立自己的第一个C程序项目?下面就让我们一起来建立一个小程序项目。

或许你手中还没有一块实验板,甚至没有一块单片机,不过没有关系我们可以通过KEIL软件仿真看到程序运行的结果。

首先当然是运行KEIL51软件。

点击桌面图标,运行几秒后,出现如图1-1的屏幕。

图1-1启动时的屏幕接着按下面的步骤建立您的第一个项目:(1)点击Project菜单,选择弹出的下拉式菜单中的New Project,如图1-2。

接着弹出一个标准Windows文件对话窗口,如图1-3。

在"文件名"中输入您的第一个C程序项目名称,这里我们用"test",这是笔者惯用的名称,大家不必照搬就是了,只要符合Windows文件规则的文件名都行。

"保存"后的文件扩展名为uv2,这是KEIL uVision2项目文件扩展名,以后我们可以直接点击此文件以打开先前做的项目。

图1-2New Project菜单图1-3文件窗口(2)选择所要的单片机,这里我们选择常用的Atmel公司的AT89C51。

此时屏幕如图1-4所示。

AT89C51有什么功能、特点呢?不用急,看图中右边有简单的介绍。

完成上面步骤后,我们就可以进行程序的编写了[1]。

(3)首先我们要在项目中创建新的程序文件或加入旧程序文件。

如果你没有现成的程序,那么就要新建一个程序文件。

在KEIL中有一些程序的Demo,在这里我们还是以一个C程序为例介绍如何新建一个C程序和如何加到您的第一个项目中。

点击图1-5中1的新建文件的快捷按钮,在2中出现一个新的文字编辑窗口,这个操作也可以通过菜单或快捷键Ctrl+N来实现。

现在可以编写程序了,光标已出现在文本编辑窗口中,等待我们的输入了。

下面是经典的一段程序,如果你看过别的程序书也许也有类似的程序:#include <REGX51.H>void main(void){SCON = 0x50; //串口方式1,允许接收TMOD = 0x20; //定时器1定时方式2TCON = 0x40; //设定时器1开始计数TH1 = 0xE8; //11.0592MHz 1200波特率TL1 = 0xE8;TI = 1;TR1 = 1; //启动定时器while(1){printf ("Hello World!\n"); //显示Hello World}}图1-4选取芯片图1-5新建程序文件这段程序的功能是不断从串口输出"Hello World!"字符,我们先不管程序的语法和意思,先看看如何把它加入到项目中和如何编译试运行。

(4)点击图1-5中的3保存新建的程序,也可以用菜单或快捷键Ctrl+S进行保存。

因是新文件所以保存时会弹出类似图1-3的文件操作窗口,我们把第一个程序命名为test1.c,保存在项目所在的目录中,这时你会发现程序单词有了不同的颜色,说明KEIL的C语法检查生效了。

如图1-6鼠标在屏幕左边的Source Group1文件夹图标上右击弹出菜单,在这里可以做在项目中增加减少文件等操作。

我们点击Add Group 'Source Group 1'"弹出文件窗口,选择刚刚保存的文件,按ADD 按钮,关闭文件窗,程序文件已加到项目中了。

这时在Source Group1文件夹图标左边出现了一个小+号说明,文件组中有了文件,点击它可以展开查看。

图1-6把文件加入到项目文件组中(5)C程序文件已被我们加到了项目中了,下面就剩下编译运行了。

这个项目我们只是用做学习新建程序项目和编译运行仿真的基本方法,所以使用软件默认的编译设置,它不会生成用于芯片烧写的HEX文件,如何设置生成HEX文件就请看下面的章节。

我们先来看图1-7,图中1、2、3都是编译按钮,不同是1是用于编译单个文件。

2是编译当前项目,如果先前编译过一次之后文件没有做动编辑改动,这时再点击是不会再次重新编译的。

3是重新编译,每点击一次均会再次编译链接一次,不管程序是否有改动。

在3右边的是停止编译按钮,只有点击了前三个中的任一个,停止按钮才会生效。

5是菜单中的它们,在4中可以看到编译的错误信息和使用的系统资源情况等,以后我们要查错就靠它了。

6是有一个小放大镜的按钮,这就是开启\关闭调试模式的按钮,它也存在于菜单Debug -Start\Stop Debug Session,快捷键为Ctrl+F5。

图1-7编译程序(6)进入调试模式,软件窗口样式大致如图1-8所示。

图中1为运行,当程序处于停止状态时才有效,2为停止,程序处于运行状态时才有效。

3是复位,模拟芯片的复位,程序回到最开头处执行。

按4我们可以打开5中的串行调试窗口,这个窗口我们可以看到从51芯片的串行口输入输出的字符,这里的第一个项目也正是在这里看运行结果。

这些在菜单中也有,这里不再一一介绍,大家不妨找找看,其它的功能也会在后面的章节中慢慢介绍。

首先按4打开串行调试窗口,再按运行键,这时就可以看到串行调试窗口中不断的打“Hello World!“。

这样就完成了您的第一个C项目。

最后我们要停止程序运行回到文件编辑模式中,就要先按停止按钮再按开启\关闭调试模式按钮。

然后我们就可以进行关闭KEIL等相关操作了[1]。

到此为止,初步学习了一些KEIL uVision2的项目文件创建、编译、运行和软件仿真的基本操作方法。

其中一直有提到一些功能的快捷键的使用,的确在实际的开发应用中快捷键的运用可以大大提高工作的效率,还有就是对这里所讲的操作方法举一反三用于类似的操作中。

图1-8调试运行程序1.2 生成HEX文件和最小化系统在开始C语言的主要内容时,我们先来看看如何用KEIL uVISION2来编译生成用于烧写芯片的HEX文件。

HEX文件格式是Intel公司提出的按地址排列的数据信息,数据宽度为字节,所有数据使用16进制数字表示, 常用来保存单片机或其他处理器的目标程序代码。

它保存物理程序存储区中的目标代码映像。

一般的编程器都支持这种格式。

我们先来打开第一节做的第一项目,打开它的所在目录,找到test.Uv2的文件就可以打开先前的项目了。

然后右击图1-9中的1项目文件夹,弹出项目功能菜单,选Options for Target'Target1',弹出项目选项设置窗口,同样先选中项目文件夹图标,这时在Project菜单中也有一样的菜单可选。

打开项目选项窗口,转到Output选项页图1-10所示,图中1是选择编译输出的路径,2是设置编译输出生成的文件名,3则是决定是否要创建HEX文件,选中它就可以输出HEX 文件到指定的路径中。

我们再将它重新编译一次,很快在编译信息窗口中就显示HEX文件创建到指定的路径中了,如图1-11。

这样我们就可用自己的编程器所附带的软件去读取并烧到芯片了,再用实验板看结果。

Keil、Proteus VSM软件使用2.1. Keil C51Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM 语言和 C 语言的程序设计,界面友好,易学易用。

下面介绍Keil C51软件的使用方法进入Keil C51 后,屏幕如下图所示。

几秒钟后出现编辑界面。

图2-1 启动Keil C51时的屏幕图2-2进入Keil C51后的编辑界面简单程序的调试学习程序设计语言、学习某种程序软件,最好的方法是直接操作实践。

下面通过简单的编程、调试,引导大家学习Keil C51软件的基本使用方法和基本的调试技巧。

1)建立一个新工程,单击Project菜单,在弹出的下拉菜单中选中New Project选项图2-3 建立新工程2)然后选择你要保存的路径,输入工程文件的名字,比如保存到C51目录里,工程文件的名字为C51如下图所示,然后点击保存.图2-4 选择保存路径3)这时会弹出一个对话框,要求你选择单片机的型号,你可以根据你使用的单片机来选择,Keil c51几乎支持所有的51核的单片机,我这里还是以大家用的比较多的Atmel 的89C51来说明,如下图所示,选择89C51之后,右边栏是对这个单片机的基本的说明,然后点击确定:图2-5 选择单片机型号4)完成上一步骤后,屏幕如下图所示:图2-6 项目主界面到现在为止,我们还没有编写一句程序,下面开始编写我们的第一个程序。

5)在下图中,单击“File”菜单,再在下拉菜单中单击“New”选项图2-7 新建文件新建文件后屏幕如下图所示:图2-8 新建文件后屏幕此时光标在编辑窗口里闪烁,这时可以键入用户的应用程序了,但笔者建议首先保存该空白的文件,单击菜单上的“File”,在下拉菜单中选中“Save As”选项单击,屏幕如下图所示,在“文件名”栏右侧的编辑框中,键入欲使用的文件名,同时,必须键入正确的扩展名。

相关文档
最新文档