单片机控制LED灯点亮(C语言)

合集下载

51单片机二极管发光程序

51单片机二极管发光程序

51单片机二极管发光程序
51单片机(STC89C52)可以通过控制IO口来驱动二极管发光。

下面我将为你提供一个简单的例子,演示如何在51单片机上使用C
语言编写程序来控制二极管发光。

首先,我们需要连接一个二极管到单片机的IO口上。

假设我们
将二极管连接到P1口的第0个引脚上。

然后,我们可以使用C语言编写如下的程序来让这个二极管发光:
c.
#include <reg52.h> // 包含51单片机的寄存器定义文件。

void main() {。

P1 = 0xFE; // 将P1口的第0个引脚拉低,使二极管发光。

while(1) {。

// 这里可以添加你需要的其他操作。

}。

}。

在这个简单的例子中,我们使用了reg52.h头文件来包含51单
片机的寄存器定义。

然后在main函数中,我们将P1口的第0个引
脚拉低,使二极管发光。

接着使用一个无限循环来让程序持续执行。

需要注意的是,具体的连接方式和引脚的控制可能会根据具体
的硬件电路设计而有所不同。

在实际的项目中,你可能需要根据具
体的硬件连接情况和需求来编写相应的程序。

另外,如果你需要实现更复杂的功能,比如控制二极管的闪烁、呼吸灯效果等,你可能需要使用定时器中断、PWM控制等技术来实现。

这需要更深入的学习和了解51单片机的相关知识。

希望这个简
单的例子能够帮助你入门。

单片机c语言按下按钮灯亮,松开后还会亮一会在熄灭

单片机c语言按下按钮灯亮,松开后还会亮一会在熄灭

单片机c语言按下按钮灯亮,松开后还会亮一会在熄灭要实现这个功能,你需要使用一个单片机(例如Arduino或51单片机)以及一些基本的电子元件,如按钮和LED。

下面是一个简单的Arduino代码示例,实现了你所描述的功能:```cconst int buttonPin = 2; // 按钮连接到数字2const int ledPin = 13; // LED连接到数字13int buttonState = 0; // 初始按钮状态为0int lastButtonState = 0; // 上次按钮状态unsigned long buttonDebounce = 0; // 消抖延时unsigned long buttonHoldDebounce = 0; // 保持延时void setup() {pinMode(buttonPin, INPUT);pinMode(ledPin, OUTPUT);(9600);}void loop() {buttonState = digitalRead(buttonPin); // 读取按钮状态if (millis() - buttonDebounce > 200) { // 如果消抖时间超过200ms if (buttonState != lastButtonState) { // 如果按钮状态改变lastButtonState = buttonState; // 更新上次按钮状态if (buttonState == HIGH) { // 如果按钮被按下if (millis() - buttonHoldDebounce > 1000) { // 如果保持时间超过1sdigitalWrite(ledPin, HIGH); // 点亮LED} else {buttonDebounce = millis(); // 重置消抖时间}} else { // 如果按钮被松开buttonDebounce = millis(); // 重置消抖时间if (millis() - buttonHoldDebounce > 500) { // 如果保持时间超过500msdigitalWrite(ledPin, LOW); // 熄灭LED} else {buttonHoldDebounce = millis(); // 重置保持时间}}}}}```这个代码使用了消抖和保持两个延时来处理按钮的按下和松开事件。

单片机C语言LED灯点亮程序完全版

单片机C语言LED灯点亮程序完全版

1 例子 1 第二个灯亮#include<>void main(){P1=0xfd;}#include<>Sbit D1=P1^0;Void main(){D1=0}注意:略微改程序时需从头例子 2 第一个灯亮hex 化#include<> include<>// 52 单片机头文件sbit led1=P1^0;// 单片机管脚位申明void main()// 主函数{unsigned int i; //定义一个int型变量while(1){i=50000; led1=0;// 变量赋初值为// 点亮灯50000while(i--);// 延时i=50000;led1=1;// 熄灭灯while(i--);}}3 例子 1 3 5 7 灯同时亮#include<> //52 单片机头文件sbit led1=P1^0;// 单片机管脚位申明sbit led3=P1^2;// 单片机管脚位申明sbit led5=P1^4;// 单片机管脚位申明sbit led7=P1^6;// 单片机管脚位申明void main()// 主函数{led1=0; led3=0; led5=0; led7=0;// 将单片机口清零// 将单片机口清零// 将单片机口清零// 将单片机口清零while(1);// 程序停止在这里,在后边会讲到为何这样写。

}例子 2 1 3 5 7 同时亮#include<> //52 单片机头文件void main()// 主函数{P1=0xaa; while(1);// 将单片机P1 口的 8 个口由高到低分别赋值为// 程序停止在这里,在后边会讲到为何这样写。

}例子 3 流水灯一个一个接着亮不循环#include<> //52 单片机头文件void main(){// 主函数unsigned int i; //定义一个int型变量while(1){i=50000; P1=0xfe; while(i--); i=50000; P1=0xfd; while(i--); i=50000; P1=0xfb; while(i--); i=50000; P1=0xf7; while(i--); i=50000; P1=0xef; while(i--); i=50000; P1=0xdf; while(i--); i=50000; P1=0xbf; while(i--); i=50000; P1=0x7f; while(i--);// 变量赋初值为// 点亮第一个灯// 延时// 变量赋初值为// 点亮第二个灯// 延时// 变量赋初值为// 点亮第三个灯// 延时// 变量赋初值为// 点亮第四个灯// 延时// 变量赋初值为// 点亮第五个灯// 延时// 变量赋初值为// 点亮第六个灯// 延时// 变量赋初值为// 点亮第七个灯// 延时// 变量赋初值为// 点亮第八个灯// 延时5000050000500005000050000500005000050000}}例子 4#include<>#include <>#define uint unsigned int#define uchar unsigned charuchar temp,num,num1;sbit beep=P2^3;void delay(uint);void main(){temp=0xfe;while(1){for(num1=0;num1<3;num1++){for(num=0;num<8;num++){P1=temp;beep=0;delay(100);temp=_crol_(temp,1);P1=0xff;beep=1;delay(100);}}for(num1=0;num1<3;num1++){for(num=0;num<8;num++){P1=temp;beep=0;delay(100);temp=_cror_(temp,1);P1=0xff;beep=1;delay(100);}}while(1);}}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}4延时子程序void delay(){uint x;for(x=100;x>0;x--){} ;}For 的嵌套void delay(){uint x,y;%局部变量for(x=100;x>0;x--)%小括号后不加分号for(y=600;y>0;y--);%小括号后的分号表示该语句是上一条语句的,分号将该句与下句分开 (或许 {for(y=600;y>0;y--);})#include<>例子 1#include<>#define uint unsigned int#define uchar unsigned charsbit D1=P1^0;void delay();%注意分号不可以少void main(){while(1){D1=0;delay();D1=1;delay();}}void delay(){uint x,y;for(x=100;x>0;x--)for(y=600;y>0;y--);}带参数的比不带参数的要方便例子 2 无参和有参的对照#include<>#define uint unsigned int#define uchar unsigned charsbit D1=P1^0;//void delay();void delay(uint);% 带一个参数的,参数种类一定要写,参数可不写。

单片机控制LED灯点亮(C语言)PPT课件

单片机控制LED灯点亮(C语言)PPT课件

实验结果与数据分析
实验结果
实验结果包括LED灯的状态和控制程序的执行情况。如果程序运行正常,LED灯应该能够按照预期点 亮和熄灭。
数据分析
数据分析包括对实验结果的分析和对控制程序的优化。通过对实验结果的分析,我们可以了解程序的 正确性和性能,并根据需要进行优化。
THANKS
感谢观看
根据需要改变LED灯的状态; 通过循环实现LED灯的闪烁效果。
06
程序调试与实验结果
调试工具与调试方法
调试工具
常用的调试工具包括串口调试助手、 示波器、逻辑分析仪等。这些工具可 以帮助我们实时监控程序运行状态, 检查程序中的错误和异常。
调试方法
常用的调试方法包括单步调试、断点 调试和内存检查等。这些方法可以帮 助我们逐步跟踪程序的执行过程,定 位和修复程序中的问题。
片机速度快,但功耗较大。
单片机的应用
• 总结词:单片机广泛应用于各种领域,如智能仪表、工业控制、家用电器、通讯设备等。单片机可以实现各种 控制功能,如温度控制、湿度控制、压力控制等,同时也可以用于数据采集和处理。
• 详细描述:单片机作为一种微型化的计算机系统,具有广泛的应用领域。在智能仪表领域,单片机可以实现各种测量和控制功能,如温度、湿度、压力等参数的测量和控制。在工业控 制领域,单片机可以用于自动化生产线、机器人等设备的控制和监测。在家用电器领域,单片机可以用于电视、空调、洗衣机等设备的控制和智能化管理。在通讯设备领域,单片机可 以用于调制解调器、路由器等设备的控制和数据处理。此外,单片机还可以用于数据采集和处理,如声音、图像等数据的采集和处理。
ห้องสมุดไป่ตู้
实验环境与实验步骤
实验环境
实验环境需要包括单片机开发板、LED灯、电源等硬件设备和相应的软件环境。软件环境需要包括单片机开发工 具和C语言编译器等。

C语言使用定时器的方法控制LED灯以1S的速度闪亮

C语言使用定时器的方法控制LED灯以1S的速度闪亮

C语言使用定时器的方法控制LED灯以1S的速度闪亮最近因为赶不上提高班的进度,老师给的教程总是断断续续的,所以我打算跟11月1号通过考试的网友们一起学习,呵呵,这也是我一教训来着,在三维里学习要坚持一步一个脚印,坚持必有奇迹,但也要跟得上大家,以后再忙也要努力实现计划了,不能再像这次一样,因为所谓的考试落下了好几堂课,不过也没有关系,能够吸取点教训总是好的。

我可以先给自己点时间多学些其它的基础知识。

今天开始学单片机的计数器了,呵呵,可能是一直因为用C语言编程序我定时老是定不准的原因,当得知学会定时/计数器后可以让单片机C语言定时准确后,我感觉学它真的很有动力,虽然编一个简单的程序也花了我好长时间,但编出来的感觉却是那么的爽快,我觉得要学会定时/计数器,关键是要学会编程控制 TCOM,TMOD,及TH和TL吧。

主要是TH和TL的准确运算。

还有就是完时以后怎么样让其跟循环语句配合使用。

今天所编的程序是利用单片机定时器控制LED灯以1S 的速度闪烁,我的晶振是12MHZ的,首先是让计时器0.02S进行一次溢出,使TF1=1,其次是利用I++循环50次,加起来为1S。

程序如下: #include;sbit LED = P1^2;void main(){unsigned char i;TMOD |= 0x10;TMOD &= 0xdf;TH1 = 0xb1;TL1 = 0xdf;TCON |= 0x40;while(1){if(TF1==1){TF1 = 0;TH1 = 0xb1;TL1 = 0xdf;i++;if(i==50){i=0;LED=~LED;}}}}。

单片机控制LED灯点亮(C语言)

单片机控制LED灯点亮(C语言)
程序流程设计
根据实际需求,设计合理的程序流程,例如通过循环或条件判断等方式实现LED灯的闪烁、呼吸灯等 效果。
延时函数实现及时间控制
延时函数实现
编写延时函数,用于控制LED灯的亮灭时 间间隔,实现不同的闪烁频率和占空比 。
VS
时间控制
根据延时函数的实现和实际需求,精确控 制LED灯的亮灭时间,以达到预期的效果 。同时,需要注意单片机的时钟频率和延 时函数的精度对时间控制的影响。
LED音乐频谱
结合音频处理技术,将音频信号转换为LED灯的亮度或颜色变化,实现音乐频谱的可视化 效果。可以应用于音乐播放器、舞台灯光等场景。
THANKS
感谢观看
02
节能环保
LED灯作为一种节能环保的照明设备,在各个领域得到了广泛应用。通
过单片机控制,可以实现LED灯的精确调光和节能控制。
03
学习与实践
对于电子爱好者和学生来说,通过单片机控制LED灯的点亮是学习嵌入
式系统和C语言编程的一个很好的实践项目。
单片机和LED灯简介
单片机
单片机是一种集成电路芯片,它将微处理器、存储器、输入输出接口等集成在一 个芯片上,具有体积小、功耗低、可靠性高等优点。常见的单片机有51系列、 STM32系列等。
for语句
用于循环执行一段代码块。例如,`for (int i = 0; i < 10; i) { led = i; }`表示将led的值从0循环设置 为9。
while语句
用于在满足条件时循环执行一段代码块。例如, `while (led < 10) { led; }`表示当led小于10时, 不断将led的值加1。
时等。
06
拓展应用与案例分析

实验2 流水灯控制的C语言实现

实验2 流水灯控制的C语言实现

实验2 流水灯控制的C语言实现一、实验目的1、应用PROTEUS仿真工具软件绘制硬件连接图2、使用Keil C 完成程序的编写和调试3、初步了解C51程序的编写与调试二、实验内容本任务就是在单片机电路板上安装电路,以P1作为输出口,控制8个LED灯(可发红、绿或黄光),模拟流水灯控制。

三、实验电路原理图图4-1 流水灯控制电路原理图四、实验步骤1、在PROTEUS中画好电路原理图。

2、在KEIL中编写流水灯控制的程序。

编好后调试产生HEX文件。

编程要求如下:状态1:8个LED,从左到右逐个点亮,状态2:8个LED,从右到左逐个点亮,状态3:8个LED,从左到右依次点亮,状态4:8个LED,从右到左依次熄灭。

转至状态1循环该程序对应的流程图如图4-2所示。

3、将HEX文件写入电路图中的单片机,仿真出流水灯控制的现象。

五、实验源代码1、汇编程序:ORG 0000HLJMP MAINORG 0040HMAIN: MOV SP,#60HLOOP1:MOV R0,#8MOV A,#0FEHLP1: MOV P1,AMOV R3,#5LCALL DELAYRL ADJNZ R0,LP1LOOP2:MOV R0,#8MOV A,#7FHLP2: MOV P1,ALOOP3:MOV R0,#8MOV A,#0FEHLP3: MOV P1,AMOV R3,#5LOOP4:MOV R0,#8MOV A,#80HLP4: MOV P1,AMOV R3,#5LCALL DELAYSETB CRRC ADJNZ R0,LP4LJMP LOOP1DELAY: MOV R2,#0FFH ; 延时子程序DELAY1: MOV R1,#0C3HRETEND2、C51程序:#include<reg51.h>#define uint unsigned int#define uchar unsigned charvoid delay(uint n) /*1ms延时函数*/ { uint k,j;for(k=0;k<n;k++)for(j=0;j<121;j++);}main(){ uchar i;uint aa;while(1){ aa=0xfe;for(i=0;i<8;i++){P1=aa;delay(500);aa=(aa<<1)|0x01;}aa=0x7f;for(i=0;i<8;i++){P1=aa;delay(500);aa=(aa>>1)|0x80;}aa=0xfe;for(i=0;i<8;i++){P1=aa;delay(500);aa=aa<<1;}aa=0x80;for(i=0;i<8;i++){P1=aa;delay(500);aa=(aa>>1)|0x80;}}}图4-2 程序流程图。

单片机程序大全

单片机程序大全

单片机程序大全(以下是一个以“单片机程序大全”为题目的文章范例,依据题目性质并非一个合同或作文的格式。

请注意,这个范例只是为了明示写作格式的变化,并非提供一个实际的单片机程序大全。

)单片机程序大全本文将为大家提供一个全面的单片机程序大全,涵盖了各种常见的单片机应用。

希望本文能够对单片机程序的学习和实践有所帮助。

一、LED灯程序LED灯是一个常见的单片机实验项目。

以下是一个基本的LED灯闪烁程序的代码,使用C语言编写:```c#include <reg51.h>#define LED P0void delay(int time) {int i, j;for (i = 0; i < time; i++) {for (j = 0; j < 10000; j++) {; // 空循环,用于延时}}}void main() {while (1) {LED = 0xFF; // 所有LED灯亮delay(1000); // 延时1秒LED = 0x00; // 所有LED灯灭delay(1000); // 延时1秒}}```二、温度监测程序单片机可以用于温度监测,以下是一个简单的温度监测程序的代码示例,使用C语言编写:```c#include <reg51.h>#define TEMP P1void delay(int time) {int i, j;for (i = 0; i < time; i++) {for (j = 0; j < 10000; j++) {; // 空循环,用于延时}}}void main() {while (1) {if (TEMP > 30) {P0 = 0x01; // 温度过高,亮起警示灯 } else {P0 = 0x00; // 温度正常,灭掉警示灯 }delay(100); // 延时0.1秒}}```三、电机控制程序单片机常用于电机控制,以下是一个电机正反转控制程序的代码示例,使用C语言编写:```c#include <reg51.h>#define MOTOR P2void delay(int time) {int i, j;for (i = 0; i < time; i++) {for (j = 0; j < 10000; j++) {; // 空循环,用于延时}}}void main() {while (1) {MOTOR = 0x01; // 电机正转delay(1000); // 延时1秒MOTOR = 0x02; // 电机反转delay(1000); // 延时1秒}}```以上仅是三个简单的单片机程序示例,单片机的应用非常广泛,包括但不限于LED灯闪烁、温度监测、电机控制等。

单片机C语言代码手册_含100多个经典C程序

单片机C语言代码手册_含100多个经典C程序
void delay(unsigned int i)
{
unsigned int j;
for(i;i>0;i--)
for(j=110;j>0;j--);
}
void main()
{
LED=0;
delay(60);
LED=1;
delay(10);
}
2.数码管
0-9显示
#include<reg51.h>
void delay2ms(unsigned int delaytime)
{
unsigned int cnt;
for(cnt=0;cnt<delaytime*50;cnt++);
}
unsigned char num[10]=
delay2ms(2500);
}
}
95显示
#include<reg51.h>
void delay2ms(unsigned int delaytime)
{
unsigned int cnt;
for(cnt=0;cnt<delaytime*50;cnt++);
while(i--)
{
for(j=0;j<120;j++);
}
}
void main()
{
unsigned char LED;
LED = 0xfe; //0xfe = 1111 1110
while(1)
{
LED = 0xfe; // 0xfe = 1111 1110

单片机C语言程序-依次点亮八个LED灯

单片机C语言程序-依次点亮八个LED灯
{
unsigned char a,b,c;
for(c=19;c>0;c--)
for(b=20;b>0;b--)
for(a=230;a>0;a--);
}
下面是c语言程序源码
#include <reg51.h>
void delay100ms(); //如果函数是在主函数后面定义,那么一定要在主函数前面声明

i=0xfe;
while(1)
{P1=i;
i--;
delay100ms();
if(i==0)
i=0xfe;
}
}
void delay100ms(void)//
运行后看到的效果是从第一个灯开始随着时间变化二进制数的递减所有的灯都会依次的点亮当全部的灯都被点亮后再重新开始这个过程一直循环下去单片机是不是很有趣
单片机C语言程序-依次点亮八个LED灯
电路很简单八个led灯接在p1口.运行后看到的效果是 从第一个灯开始 随着时间变化 二进制数的递减 所有的灯都会依次的点亮,当全部的灯都被点亮后再重新开始这个过程 一直循环下去 单片机是不是很有趣?

单片机控制LED灯点亮(C语言)

单片机控制LED灯点亮(C语言)

将0xfe赋给P1口,然后使用移位函数来改变P1口的值,达到流水灯的效果 移位函数: _crol_,_cror_:将char型变量循环向左(右)移动指定位数后返回 。 _crol_,_cror_: c51中的intrins.h库函数
程序如下:
随后会弹出一个对话框,要求选择单片机的型号。在该对话框中显示了Vision2的器件数据库,从中可以根据使用的单片机来选择。
PART ONE
AT89S52
8051 based Full Static CMOS controller with Three-Level Program Memory Lock, 32 I/O lines, 3 Timers/Counters, 8 Interrupts Sources, Watchdog Timer, 2 DPTRs(DATA POINTER REGISTERS ), 8K Flash Memory, 256 Bytes On-chip RAM 基于8051全静态CMOS控制器、 三级加密程序存储器 、 32个I/O口 、三个定时器/计数器 、八个中断源 、看门狗定时器、2 个数据指针 寄存器、8k字节Flash,256字节片内RAM
十六进制整常数
十六进制整常数的前缀为0X或0x。其数码取值为0~9,A~F或a~f。 以下各数是合法的十六进制整常数: 0X2A(十进制为42) 0XA0 (十进制为160) 0XFFFF (十进制为65535) 以下各数不是合法的十六进制整常数: 5A (无前缀0X) 0X3H (含有非十六进制数码)
各种进位制的对应关系
十进制
二进制
十六进制
十进制
二进制
十六进制
0
0
0
9
1001

红色led灯c语言程序

红色led灯c语言程序

红色led灯c语言程序近年来,LED灯越来越普及,同时也出现了各种各样的LED灯,如红色LED 灯、绿色LED灯、蓝色LED灯等等。

相信不少人看到这些LED灯时,会想着自己能不能动手去做一个属于自己的LED灯呢?本文就将详细介绍如何做一个红色LED灯,并编写一个C语言程序来控制它。

所需材料- 红色LED灯一个- 杜邦线若干- 单片机(此处使用AT89C52)- 电路板一块- 100欧姆的电阻一个- 9V电池一个- 电池座一个以上材料可以在淘宝等网站上购买。

电路图接下来,看一下红色LED灯的电路图。

如图所示,将红色LED灯连接在单片机的P1.0口,通过100欧姆的电阻限流,接在9V电池负极上。

在单片机P1.0口输出低电平时,会使得LED灯变亮;输出高电平时,LED灯则熄灭。

C语言程序接下来,为了让大家更好地控制红色LED灯,需要编写一个C语言程序来控制它。

程序:#include <reg52.h>sbit LED = P1^0; // 定义LED所在的IO口void Delay(unsigned int i) // 定义延时函数{unsigned int j, k;for(j = i; j > 0; j--){for(k = 110; k > 0; k--);}}void main(){while(1){LED = 1; // 输出高电平,LED灯熄灭Delay(500); // 延时500msLED = 0; // 输出低电平,LED灯亮起Delay(500); // 延时500ms}}程序分析上述程序总体简单,主要流程包括:定义LED所在的IO口;定义延时函数;实现LED灯的闪烁。

下面就详细分析一下程序。

- 定义LED所在的IO口sbit LED = P1^0;在单片机上进行控制程序时,每个IO口需要先设置其为输入还是输出模式,以及每个IO口对应的寄存器。

以上代码共定义了一个LED变量(变量名随意),其所在的IO口为P1^0即P1的第0个位。

单片机控制LED灯点亮(C语言)

单片机控制LED灯点亮(C语言)

单片机控制LED灯点亮在嵌入式系统开发中,单片机控制LED灯是入门阶段必不可少的实验。

本文将介绍如何在单片机中使用C语言编程控制LED灯点亮。

硬件准备本实验所需硬件材料如下:•单片机主板•LED灯•杜邦线根据图示,将单片机主板上的引脚和LED灯连接起来。

单片机引脚 LED灯P0.0 +端GND -端软件准备我们选择Keil uVision作为编程环境来编写代码。

在开始编写代码之前,需要下载并安装Keil uVision软件。

新建工程在Keil uVision软件中,通过菜单Project -> New µVision Project新建一个工程。

新建工程新建工程在弹出的对话框中,选择保存工程的路径,命名工程名字,选择MCU型号并确定。

选择MCU型号选择MCU型号添加源文件在Keil uVision软件中,将编写的源代码文件添加到工程中。

选择菜单Project -> Add New Item,在弹出的对话框中选择新建一个源文件。

添加源文件添加源文件编写代码以下是控制LED灯点亮的C语言代码#include <STC89C5xRC.H>int main(void){while(1) {P0 = 0x01; // P0.0 点亮LED灯}}程序的执行流程如下:1.定义一个无限循环,反复执行控制LED灯点亮的操作。

2.将P0.0 IO口设为高电平,点亮LED灯。

编译和烧录完成编写代码之后,可进行编译和烧录。

选择菜单Project -> Build Target进行编译,将生成的hex文件烧录到单片机上即可。

本文介绍了如何在单片机中使用C语言编程控制LED灯点亮的操作。

通过对硬件和软件的介绍,读者可以学习到单片机的基础知识与相关编程知识,对深入学习嵌入式系统和单片机开发有很大的帮助。

单片机 c语言例题

单片机 c语言例题

单片机 c语言例题单片机 C 语言例题在单片机教学中,C 语言的例题是帮助学生理解和掌握单片机编程的重要工具。

通过例题的学习,学生可以更好地理解C语言语法和单片机的工作原理。

本文将介绍几个单片机 C 语言例题,帮助读者更好地了解单片机的应用。

例题一:LED 灯的闪烁以下是一个简单的单片机 C 语言例题,通过控制单片机上的LED 灯,实现灯的闪烁效果。

```c#include <reg51.h> // 单片机头文件// 主函数void main() {while(1) { // 循环执行P1 = 0x00; // 将 P1 置为低电平(LED 灯熄灭)Delay(); // 延时P1 = 0xFF; // 将 P1 置为高电平(LED 灯亮)Delay(); // 延时}}// 延时函数void Delay() {int i, j;for(i = 0; i < 800; i++) { // 大约延时 1 秒for(j = 0; j < 1000; j++) {}}}```在上述例题中,我们使用了一个延时函数 `Delay()`,通过循环控制LED 灯的亮灭状态,实现了灯的闪烁效果。

通过修改延时循环,可以改变灯闪烁的频率。

例题二:数码管显示数字以下是另一个单片机 C 语言例题,通过控制单片机上的数码管,实现数字的显示效果。

```c#include <reg51.h> // 单片机头文件sbit LED = P2^0; // 数码管的引脚定义// 数码管显示数字函数void Display(int num) {switch (num) {case 0: LED = 0xFC; break; // 数字0显示case 1: LED = 0x60; break; // 数字1显示case 2: LED = 0xDA; break; // 数字2显示case 3: LED = 0xF2; break; // 数字3显示case 4: LED = 0x66; break; // 数字4显示case 5: LED = 0xB6; break; // 数字5显示case 6: LED = 0xBE; break; // 数字6显示case 7: LED = 0xE0; break; // 数字7显示case 8: LED = 0xFE; break; // 数字8显示case 9: LED = 0xF6; break; // 数字9显示default: LED = 0xFF; break; // 其他情况,不显示数字 }}// 主函数void main() {int num = 0; // 待显示的数字while(1) { // 循环执行Display(num); // 数码管显示数字num++; // 数字自增if (num > 9) { // 数字大于9后重置为0 num = 0;}Delay(); // 延时}}// 延时函数void Delay() {int i, j;for(i = 0; i < 800; i++) { // 大约延时 1 秒 for(j = 0; j < 1000; j++) {}}}```在上述例题中,我们通过控制数码管的引脚,并编写了一个显示数字的函数 `Display()`,通过循环控制数码管显示不同的数字,实现了数字的切换和显示效果。

基于51单片机的C语言程序设计

基于51单片机的C语言程序设计

基于51单片机的C语言程序设计实训100例第 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 intvoid 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){{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 unsignedchar#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,0xff//延时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此后变红灯,东西向变绿灯,如此重复。

51单片机控制P2口8位LED灯左移C语言程序

51单片机控制P2口8位LED灯左移C语言程序

51单片机控制P2口8位LED灯左移C语
言程序
此程序控制P2.0~P2.7口8个LED(P2.0~P2.7)灯逐个依次点这,又从(P2.7~P2.0)这样的顺序一直到全部被点亮。

#include ;//头文件
void delay(unsigned int x)//延时函数
{
while(x--);
}
void main(void)
{
unsigned char i;//定义一个无符号字型局部变量i 取值范围0~255
delay(50000);
P2=0xfe;
for(i=0;i<8;i++)//加入for循环,表明for循环大括号中程序循环执行8次
{
delay(50000);//调用延时函数,更改延时的x变量的值可以更改延时长短,用于改变闪烁频率
P2<<=1;
}
}
知识要点:
1、<<符号。

这个是左移符号,P2<<=1;等效于
P2=P2<<1;
例如:temp=15;
temp<<=1;
15二进制为00001111,左移1位后,右端自动补0,变
成00011110,此时temp=30;数值左移一位相当于乘以2,反之右移一位相当于除以2.。

单片机C语言编程精选例

单片机C语言编程精选例

目录实例3:用单片机控制第一个灯亮 ................................. 实例4:用单片机控制一个灯闪烁:认识单片机的工作频率........... 实例5:将 P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功能.实例6:使用P3口流水点亮8位LED ............................... 实例7:通过对P3口地址的操作流水点亮8位LED ................... 实例8:用不同数据类型控制灯闪烁时间........................... 实例9:用P0口、P1 口分别显示加法和减法运算结果............... 实例10:用P0、P1口显示乘法运算结果........................... 实例11:用P1、P0口显示除法运算结果........................... 实例12:用自增运算控制P0口8位LED流水花样................... 实例13:用P0口显示逻辑"与"运算结果........................... 实例14:用P0口显示条件运算结果 ............................... 实例15:用P0口显示按位"异或"运算结果......................... 实例16:用P0显示左移运算结果 ................................. 实例17:"万能逻辑电路"实验 .................................... 实例18:用右移运算流水点亮P1口8位LED ........................ 实例19:用if语句控制P0口8位LED的流水方向.................. 实例20:用swtich语句的控制P0口8位LED的点亮状态............ 实例21:用for语句控制蜂鸣器鸣笛次数.......................... 实例22:用while语句控制LED ................................... 实例23:用do-while语句控制P0口8位LED流水点亮..............实例24:用字符型数组控制P0口8位LED流水点亮................. 实例25:用P0口显示字符串常量 ................................ 实例26:用P0 口显示指针运算结果............................... 实例27:用指针数组控制P0口8位LED流水点亮................... 实例28:用数组的指针控制P0 口8 位LED流水点亮................ 实例29:用P0 、P1口显示整型函数返回值 ........................ 实例30:用有参函数控制P0口8位LED流水速度................... 实例31:用数组作函数参数控制流水花样.......................... 实例32:用指针作函数参数控制P0口8位LED流水点亮............. 实例33:用函数型指针控制P1口灯花样........................... 实例34:用指针数组作为函数的参数显示多个字符串................ 实例35:字符函数ctype.h应用举例 .............................. 实例36:内部函数intrins.h应用举例............................ 实例37:标准函数stdlib.h应用举例............................. 实例38:字符串函数string.h应用举例........................... 实例39:宏定义应用举例2 ....................................... 实例40:宏定义应用举例2 ....................................... 实例41:宏定义应用举例3 ....................................... 实例42:用定时器T0查询方式P2口8位控制LED闪烁.............. 实例43:用定时器T1查询方式控制单片机发出1KHz音频............ 实例44:将计数器T0计数的结果送P1口8位LED显示.............. 实例45:用定时器T0的中断控制1位LED闪烁..................... 实例46:用定时器T0的中断实现长时间定时.......................实例47:用定时器T1中断控制两个LED以不同周期闪烁............. 实例48:用计数器T1的中断控制蜂鸣器发出1KHz音频.............. 实例49:用定时器T0的中断实现"渴望"主题曲的播放............... 实例50-1:输出50个矩形脉冲 ................................... 实例50-2:计数器T0统计外部脉冲数............................. 实例51-2:定时器T0的模式2测量正脉冲宽度..................... 实例52:用定时器T0控制输出高低宽度不同的矩形波............... 实例53:用外中断0的中断方式进行数据采集...................... 实例54-1:输出负脉宽为200微秒的方波.......................... 实例54-2:测量负脉冲宽度 ...................................... 实例55:方式0控制流水灯循环点亮 .............................. 实例56-1:数据发送程序 ........................................ 实例56-2:数据接收程序 ........................................ 实例57-1:数据发送程序 ........................................ 实例57-2:数据接收程序 ........................................ 实例58:单片机向PC发送数据 ................................... 实例59:单片机接收PC发出的数据............................... 实例60:用LED数码显示数字5 ................................... 实例61:用LED数码显示器循环显示数字0~9 ....................... 实例62:用数码管慢速动态扫描显示数字"1234" .................... 实例63:用LED数码显示器伪静态显示数字1234 .................... 实例64:用数码管显示动态检测结果 .............................. 实例65:数码秒表设计 ..........................................实例66:数码时钟设计 .......................................... 实例67:用LED数码管显示计数器T0的计数值..................... 实例68:静态显示数字“59” .................................... 实例69:无软件消抖的独立式键盘输入实验 ........................ 实例70:软件消抖的独立式键盘输入实验.......................... 实例71:CPU控制的独立式键盘扫描实验........................... 实例72:定时器中断控制的独立式键盘扫描实验.................... 实例73:独立式键盘控制的4级变速流水灯 ........................ 实例74:独立式键盘的按键功能扩展:"以一当四" .................. 实例75:独立式键盘调时的数码时钟实验.......................... 实例76:独立式键盘控制步进电机实验............................ 实例77:矩阵式键盘按键值的数码管显示实验...................... 实例78:矩阵式键盘按键音 ...................................... 实例79:简易电子琴 ............................................ 实例80:矩阵式键盘实现的电子密码锁............................ 实例81:用LCD显示字符'A' ..................................... 实例82:用LCD循环右移显示"Welcome to China" .................. 实例83:用LCD显示适时检测结果 ................................ 实例84:液晶时钟设计 .......................................... 实例85:将数据"0x0f"写入AT24C02再读出送P1口显示............. 实例86:将按键次数写入AT24C02,再读出并用1602LCD显示......... 实例87:对I2C总线上挂接多个AT24C02的读写操作................ 实例88:基于AT24C02的多机通信读取程序......................实例88:基于AT24C02的多机通信写入程序....................... 实例90:DS18B20温度检测及其液晶显示........................... 实例91:将数据"0xaa"写入X5045再读出送P1口显示............... 实例92:将流水灯控制码写入X5045并读出送P1口显示............. 实例93:对SPI总线上挂接多个X5045的读写操作.................. 实例94:基于ADC0832的数字电压表 .............................. 实例95:用DAC0832产生锯齿波电压 .............................. 实例96:用P1口显示红外遥控器的按键值......................... 实例97:用红外遥控器控制继电器 ................................ 实例98:基于DS1302的日历时钟 ................................. 实例99:单片机数据发送程序 .................................... 实例100:电机转速表设计 ....................................... 模拟霍尔脉冲................................................... /*函数的使用和熟悉*///实例3:用单片机控制第一个灯亮#include<reg51.h> //包含51单片机寄存器定义的头文件void main(void){while(1) //无限循环P1=0xfe; //P1=1111 1110B,即P1.0输出低电平}//实例4:用单片机控制一个灯闪烁:认识单片机的工作频率#include<reg51.h> //包含单片机寄存器的头文件/****************************************函数功能:延时一段时间*****************************************/void delay(void) //两个void意思分别为无需返回值,没有参数传递{unsigned int i; //定义无符号整数,最大取值范围65535for(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(); //延时一段时间}}//实例5:将 P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功能#include<reg51.h> //包含单片机寄存器的头文件/******************************************************* 函数功能:主函数(C语言规定必须有也只能有1个主函数)********************************************************/ void main(void){while(1) //无限循环{P1=0xff; // P1=1111 1111, 熄灭LEDP0=P1; // 将 P1口状态送入P0口P2=P1; // 将 P1口状态送入P2口P3=P1; // 将 P1口状态送入P3口}}//实例6:使用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(); //调用延时函数}}//实例7:通过对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(); //调用延时函数}}//实例8:用不同数据类型控制灯闪烁时间#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++); //空操作}/******************************************************函数功能:主函数******************************************************/{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(); //延时一段较长的时间P1=0xff; //熄灭char_delay(); //延时一段较长的时间}}}//实例9:用P0口、P1口分别显示加法和减法运算结果#include<reg51.h>{unsigned char m,n;m=43; //即十进制数2x16+11=43n=60; //即十进制数3x16+12=60P1=m+n; //P1=103=0110 0111,结果P1.3、P1.4、P1.7 口的灯被点亮P0=n-m; //P0=17=0001 0001,结果P0.0、P0.4的灯被熄灭}//实例10:用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口灭,其余亮}//实例11:用P1、P0口显示除法运算结果#include<reg51.h> //包含单片机寄存器的头文件void main(void){P1=36/5; //求整数P0=((36%5)*10)/5; //求小数while(1); //无限循环防止程序“跑飞”}//实例12:用自增运算控制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(); //调用延时函数}}//实例13:用P0口显示逻辑"与"运算结果#include<reg51.h> //包含单片机寄存器的头文件void main(void){P0=(4>0)&&(9>0xab);//将逻辑运算结果送P0口while(1); //设置无限循环,防止程序“跑飞”}//实例14:用P0口显示条件运算结果#include<reg51.h> //包含单片机寄存器的头文件void main(void){P0=(8>4)?8:4;//将条件运算结果送P0口,P0=8=0000 1000B while(1); //设置无限循环,防止程序“跑飞”}//实例15:用P0口显示按位"异或"运算结果#include<reg51.h> //包含单片机寄存器的头文件void main(void){P0=0xa2^0x3c;//将条件运算结果送P0口,P0=8=0000 1000B while(1); //设置无限循环,防止程序“跑飞”}//实例16:用P0显示左移运算结果#include<reg51.h> //包含单片机寄存器的头文件void main(void){P0=0x3b<<2; //将左移运算结果送P0口,P0=1110 1100B=0xec while(1); //无限循环,防止程序“跑飞”}//实例17:"万能逻辑电路"实验#include<reg51.h> //包含单片机寄存器的头文件sbit F=P1^4; //将F位定义为 P1.4sbit X=P1^5; //将X位定义为 P1.5sbit Y=P1^6; //将Y位定义为 P1.6sbit Z=P1^7; //将Z位定义为 P1.7void main(void){while(1){F=((~X)&Y)|Z; //将逻辑运算结果赋给F ;}}//实例18:用右移运算流水点亮P1口8位LED#include<reg51.h> //包含单片机寄存器的头文件/*****************************函数功能:延时一段时间*****************************/void delay(void){unsigned int n;for(n=0;n<30000;n++);}/*****************************函数功能:主函数*****************************/void main(void){unsigned char i;while(1){P1=0xff;delay();for(i=0;i<8;i++)//设置循环次数为8{P1=P1>>1; //每次循环P1的各二进位右移1位,高位补0 delay(); //调用延时函数}}}//实例19:用if语句控制P0口8位LED的流水方向#include<reg51.h> //包含单片机寄存器的头文件sbit S1=P1^4; //将S1位定义为P1.4sbit S2=P1^5; //将S2位定义为P1.5/*****************************函数功能:主函数*****************************/void main(void){while(1){if(S1==0) //如果按键S1按下P0=0x0f; //P0口高四位LED点亮if(S2==0) //如果按键S2按下P0=0xf0; //P0口低四位LED点亮}}//实例20:用swtich语句的控制P0口8位LED的点亮状态#include<reg51.h> //包含单片机寄存器的头文件sbit S1=P1^4; //将S1位定义为P1.4/*****************************函数功能:延时一段时间*****************************/void delay(void){unsigned int n;for(n=0;n<10000;n++);}/*****************************函数功能:主函数*****************************/void main(void){unsigned char i;i=0; //将i初始化为0while(1){if(S1==0) //如果S1键按下{delay(); //延时一段时间if(S1==0) //如果再次检测到S1键按下i++; //i自增1if(i==9) //如果i=9,重新将其置为1i=1;}switch(i) //使用多分支选择语句{case 1: P0=0xfe; //第一个LED亮break;case 2: P0=0xfd; //第二个LED亮break;case 3:P0=0xfb; //第三个LED亮break;case 4:P0=0xf7; //第四个LED亮break;case 5:P0=0xef; //第五个LED亮break;case 6:P0=0xdf; //第六个LED亮break;case 7:P0=0xbf; //第七个LED亮break;case 8:P0=0x7f; //第八个LED亮break;default: //缺省值,关闭所有LEDP0=0xff;}}}//实例21:用for语句控制蜂鸣器鸣笛次数sbit sound=P3^7; //将sound位定义为P3.7 /**************************************** 函数功能:延时形成1600Hz音频****************************************/ void delay1600(void){unsigned char n;for(n=0;n<100;n++);}/**************************************** 函数功能:延时形成800Hz音频****************************************/ void delay800(void){unsigned char n;for(n=0;n<200;n++);}/**************************************** 函数功能:主函数****************************************/{unsigned int i;while(1){for(i=0;i<830;i++){sound=0; //P3.7输出低电平delay1600();sound=1; //P3.7输出高电平delay1600();}for(i=0;i<200;i++){sound=0; //P3.7输出低电平delay800();sound=1; //P3.7输出高电平delay800();}}}//实例22:用while语句控制LED#include<reg51.h> //包含单片机寄存器的头文件函数功能:延时约60ms (3*100*200=60000μs)****************************************/void delay60ms(void){unsigned char m,n;for(m=0;m<100;m++)for(n=0;n<200;n++);}/****************************************函数功能:主函数****************************************/void main(void){unsigned char i;while(1) //无限循环{i=0; //将i初始化为0while(i<0xff) //当i小于0xff(255)时执行循环体{P0=i; //将i送P0口显示delay60ms(); //延时}}}//实例23:用do-while语句控制P0口8位LED流水点亮#include<reg51.h> //包含单片机寄存器的头文件/****************************************函数功能:延时约60ms (3*100*200=60000μs)****************************************/void delay60ms(void){unsigned char m,n;for(m=0;m<100;m++)for(n=0;n<200;n++);}/****************************************函数功能:主函数****************************************/void main(void){do{P0=0xfd; //第二个LED亮delay60ms();P0=0xfb; //第三个LED亮delay60ms();P0=0xf7; //第四个LED亮delay60ms();P0=0xef; //第五个LED亮delay60ms();P0=0xdf; //第六个LED亮delay60ms();delay60ms();P0=0xbf; //第七个LED亮delay60ms();P0=0x7f; //第八个LED亮delay60ms();}while(1); //无限循环,使8位LED循环流水点亮}//实例24:用字符型数组控制P0口8位LED流水点亮#include<reg51.h> //包含单片机寄存器的头文件/****************************************函数功能:延时约60ms (3*100*200=60000μs){unsigned char m,n;for(m=0;m<100;m++)for(n=0;n<200;n++);}/****************************************函数功能:主函数****************************************/void main(void){unsigned char i;unsigned char code Tab[ ]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //定义无符号字符型数组while(1){for(i=0;i<8;i++){P0=Tab[i];//依次引用数组元素,并将其送P0口显示delay60ms();//调用延时函数}}//实例25:用P0口显示字符串常量#include<reg51.h> //包含单片机寄存器的头文件/*************************************************函数功能:延时约150ms (3*200*250=150 000μs=150ms*************************************************/void delay150ms(void){unsigned char m,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}/*************************************************函数功能:主函数*************************************************/void main(void){unsigned char str[]={"Now,Temperature is :"}; //将字符串赋给字符型全部元素赋值unsigned char i;while(1)i=0; //将i初始化为0,从第一个元素开始显示while(str[i]!='\0') //只要没有显示到结束标志'\0'{P0=str[i]; //将第i个字符送到P0口显示delay150ms(); //调用150ms延时函数i++; //指向下一个待显字符}}}//实例26:用P0 口显示指针运算结果#include<reg51.h>void main(void){unsigned char *p1,*p2; //定义无符号字符型指针变量p1,p2unsigned char i,j; //定义无符号字符型数据i=25; //给i赋初值25j=15;p1=&i; //使指针变量指向i ,对指针初始化p2=&j; //使指针变量指向j ,对指针初始化P0=*p1+*p2; //*p1+*p2相当于i+j,所以P0=25+15=40=0x28//则P0=0010 1000B,结果P0.3、P0.5引脚LED熄灭,其余点亮 while(1)}//实例27:用指针数组控制P0口8位LED流水点亮#include<reg51.h>/*************************************************函数功能:延时约150ms (3*200*250=150 000μs=150ms*************************************************/void delay150ms(void){unsigned char m,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}/*************************************************函数功能:主函数*************************************************/void main(void){unsigned char code Tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned char *p[ ]={&Tab[0],&Tab[1],&Tab[2],&Tab[3],&Tab[4],&Tab[5], &Tab[6],&Tab[7]};unsigned char i; //定义无符号字符型数据{for(i=0;i<8;i++){P0=*p[i];delay150ms();}}}//实例28:用数组的指针控制P0 口8 位LED流水点亮#include<reg51.h>/************************************************* 函数功能:延时约150ms (3*200*250=150 000μs=150ms *************************************************/ void delay150ms(void){unsigned char m,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}/************************************************* 函数功能:主函数void main(void){unsigned char i;unsigned char Tab[ ]={0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFE,0xFC,0xFB,0xF0,0xE0,0xC0,0x80,0x00,0xE7,0xDB,0xBD,0x7E,0x3C,0x18,0x00,0x81,0xC3,0xE7,0x7E,0xBD,0xDB,0xE7,0xBD,0xDB};//流水灯控制码unsigned char *p; //定义无符号字符型指针p=Tab; //将数组首地址存入指针pwhile(1){for(i=0;i<32;i++) //共32个流水灯控制码{P0=*(p+i); //*(p+i)的值等于a[i]delay150ms(); //调用150ms延时函数}}}//实例29:用P0 、P1口显示整型函数返回值#include<reg51.h>函数功能:计算两个无符号整数的和*************************************************/ unsigned int sum(int a,int b){unsigned int s;s=a+b;return (s);}/************************************************* 函数功能:主函数*************************************************/ void main(void){unsigned z;z=sum(2008,2009);P1=z/256; //取得z的高8位P0=z%256; //取得z的低8位while(1);}//实例30:用有参函数控制P0口8位LED流水速度#include<reg51.h>函数功能:延时一段时间*************************************************/void delay(unsigned char x){unsigned char m,n;for(m=0;m<x;m++)for(n=0;n<200;n++);}/*************************************************函数功能:主函数*************************************************/void main(void){unsigned char i;unsigned char code Tab[ ]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};//流水灯控制码while(1){//快速流水点亮LEDfor(i=0;i<8;i++) //共8个流水灯控制码{delay(100); //延时约60ms, (3*100*200=60 000μs) }//慢速流水点亮LEDfor(i=0;i<8;i++) //共8个流水灯控制码{P0=Tab[i];delay(250); //延时约150ms, (3*250*200=150 000μs) }}}//实例31:用数组作函数参数控制流水花样#include<reg51.h>/*************************************************函数功能:延时约150ms*************************************************/void delay(void){unsigned char m,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}函数功能:流水点亮P0口8位LED*************************************************/void led_flow(unsigned char a[8]){unsigned char i;for(i=0;i<8;i++){P0=a[i];delay();}}/*************************************************函数功能:主函数*************************************************/void main(void){unsigned char code Tab[ ]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};//流水灯控制码led_flow(Tab);}//实例32:用指针作函数参数控制P0口8位LED流水点亮#include<reg51.h>函数功能:延时约150ms*************************************************/void delay(void){unsigned char m,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}/*************************************************函数功能:流水点亮P0口8位LED*************************************************/void led_flow(unsigned char *p) //形参为无符号字符型指针{unsigned char i;while(1){i=0; //将i置为0,指向数组第一个元素while(*(p+i)!='\0') //只要没有指向数组的结束标志{P0=*(p+i);// 取的指针所指变量(数组元素)的值,送P0口 delay(); //调用延时函数}}}/*************************************************函数功能:主函数*************************************************/void main(void){unsigned char code Tab[ ]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F, 0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF,0xFE,0xFC,0xFB,0xF0,0xE0,0xC0,0x80,0x00,0xE7,0xDB,0xBD,0x7E,0xFF,0xFF,0x3C,0x18,0x0,0x81,0xC3,0xE7,0xFF, 0xFF,0x7E};//流水灯控制码unsigned char *pointer;pointer=Tab;led_flow(pointer);}//实例33:用函数型指针控制P1口灯花样#include<reg51.h> //包含51单片机寄存器定义的头文件unsigned char code Tab[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};//流水灯控制码,该数组被定义为全局变量函数功能:延时约150ms**************************************************************/ void delay(void){unsigned char m,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}/************************************************************** 函数功能:流水灯左移**************************************************************/ void led_flow(void){unsigned char i;for(i=0;i<8;i++) //8位控制码{P0=Tab[i];delay();}}/****************************************************************************************************************************/void main(void){void (*p)(void); //定义函数型指针,所指函数无参数,无返回值p=led_flow; //将函数的入口地址赋给函数型指针pwhile(1)(*p)(); //通过函数的指针p调用函数led_flow()}//实例34:用指针数组作为函数的参数显示多个字符串#include<reg51.h> //包含51单片机寄存器定义的头文件unsigned char code str1[ ]="Temperature is tested by DS18B20";//C语言中,字符串是作为字符数组来处理的unsigned char code str2[ ]="Now temperature is:"; //所以,字符串的名字就是字符串的首地址unsigned char code str3[ ]="The Systerm is designed by Zhang San"; unsigned char code str4[ ]="The date is 2008-9-30";unsigned char *p[ ]={str1,str2,str3,str4}; //定义p[4]为指向4个字符串的字符型指针数组/**************************************************************函数功能:延时约150ms**************************************************************/void delay(void)unsigned char m,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}/**************************************************************函数功能:流水点亮P0口8位LED**************************************************************/void led_display(unsigned char *x[ ]) //形参必须为指针数组{unsigned char i,j;for(i=0;i<4;i++) //有4个字符串要显示{j=0; //指向待显字符串的第0号元素while(*(x[i]+j)!='\0') //只要第i个字符串的第j号元素不是结束标志 {P0=*(x[i]+j); //取得该元素值送到P0口显示delay(); //调用延时函数j++; //指向下一个元素}}}/**************************************************************函数功能:主函数**************************************************************/void main(void){unsigned char i;while(1){for(i=0;i<4;i++)led_display(p); //将指针数组名作实际参数传递}}//实例35:字符函数ctype.h应用举例#include<reg51.h> //包含51单片机寄存器定义的头文件#include<ctype.h>void main(void){while(1){P3=isalpha('_')?0xf0:0x0f;//条件运算,若'_'是英文字母,P3=0xf0 }}//实例36:内部函数intrins.h应用举例#include<reg51.h> //包含51单片机寄存器定义的头文件#include<intrins.h> //包含函数isalpha()声明的头文件/*************************************************函数功能:延时约150ms*************************************************/void delay(void){unsigned char m,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}/*************************************************函数功能:主函数*************************************************/void main(void){P3=0xfe; //P3=1111 1110Bwhile(1){P3=_crol_(P3,1);// 将P3的二进制位循环左移1位后再赋给P3 delay(); //调用延时函数}}//实例37:标准函数stdlib.h应用举例#include<reg51.h> //包含51单片机寄存器定义的头文件#include<stdlib.h> //包含函数isalpha()声明的头文件/*************************************************函数功能:延时约150ms*************************************************/ void delay(void){unsigned char m,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}/*************************************************函数功能:主函数*************************************************/ void main(void){unsigned char i;while(1){for(i=0;i<10;i++) //产生10个随机数{P3=rand()/160; //将产生的随机数缩小160倍后送P3显示delay();}}}//实例38:字符串函数string.h应用举例#include<reg51.h> //包含51单片机寄存器定义的头文件#include<string.h> //包含函数isalpha()声明的头文件void main(void){unsigned char str1[ ]="Now, The temperature is :";unsigned char str2[ ]="Now, The temperature is 36 Centgrade:"; unsigned char i;i=strcmp(str1,str2); //比较两个字符串,并将结果存入iif(i==0) //str1=str2P3=0x00;elseif(i<0) //str1<str2P3=0xf0;else //str1>str2P3=0x0f;while(1); //防止程序“跑飞”}//实例39:宏定义应用举例2#include<reg51.h> //包含51单片机寄存器定义的头文件# define F(a,b) (a)+(a)*(b)/256+(b) //带参数的宏定义,a和b为形参void main(void){unsigned char i,j,k;i=40;j=30;k=20;P3=F(i,j+k); //i和j+k分别为实参,宏展开时,实参将替代宏定义中的形参while(1);}//实例40:宏定义应用举例2#include<AT89X51.h>#include<ctype.h>void main(void){P3_0=0; //将P3.0引脚置低电平,LED点亮P3_1=0; //将P3.0引脚置低电平,LED点亮P3_2=0; //将P3.0引脚置低电平,LED点亮P3_3=0; //将P3.0引脚置低电平,LED点亮P3_4=1; //将P3.4引脚置高电平,LED熄灭P3_5=1; //将P3.5引脚置高电平,LED熄灭P3_6=1; //将P3.7引脚置高电平,LED熄灭P3_7=1; //将P3.7引脚置高电平,LED熄灭while(1);}//实例41:宏定义应用举例3#include<reg51.h> //包含51单片机寄存器定义的头文件#define MAX 100 //将MAX宏定义为字符串100void main(void){#if MAX>80 //如果字符串100大于80P3=0xf0; //P3口低四位LED点亮#elseP3=0x0f; //否则,P3口高四位LED点亮#endif //结束本次编译}/*中断、定时器*///实例42:用定时器T0查询方式P2口8位控制LED闪烁#include<reg51.h> // 包含51单片机寄存器定义的头文件/**************************************************************函数功能:主函数**************************************************************/ void main(void){// EA=1; //开总中断// ET0=1; //定时器T0中断允许TMOD=0x01; //使用定时器T0的模式1TH0=(65536-46083)/256; //定时器T0的高8位赋初值TL0=(65536-46083)%256; //定时器T0的高8位赋初值TR0=1; //启动定时器T0TF0=0;P2=0xff;while(1)//无限循环等待查询{while(TF0==0);TF0=0;P2=~P2;TH0=(65536-46083)/256; //定时器T0的高8位赋初值 TL0=(65536-46083)%256; //定时器T0的高8位赋初值}}//实例43:用定时器T1查询方式控制单片机发出1KHz音频#include<reg51.h> // 包含51单片机寄存器定义的头文件sbit sound=P3^7; //将sound位定义为P3.7引脚/************************************************************** 函数功能:主函数**************************************************************/ void main(void){// EA=1; //开总中断// ET0=1; //定时器T0中断允许TMOD=0x10; //使用定时器T1的模式1TH1=(65536-921)/256; //定时器T1的高8位赋初值TL1=(65536-921)%256; //定时器T1的高8位赋初值TR1=1; //启动定时器T1TF1=0;while(1)//无限循环等待查询{while(TF1==0);TF1=0;sound=~sound; //将P3.7引脚输出电平取反TH1=(65536-921)/256; //定时器T0的高8位赋初值 TL1=(65536-921)%256; //定时器T0的高8位赋初值}。

51单片机技术应用教程(C语言版)项目四 花样霓红灯的设计与制作

51单片机技术应用教程(C语言版)项目四 花样霓红灯的设计与制作

函数 atoi atol atof strtod strtol strtoul
rand srand calloc free init_mempool
malloc realloc
功能 将字符串sl转换成整型数值并返回这个值 将字符串sl转换成长整型数值并返回这个值 将字符串sl转换成浮点数值并返回这个值 将字符串s转换成浮点型数据并返回这个值 将字符串s转换成long型数值并返回这个值 将字符串s转换成unsigned long型数值并返回这个值
5.请写出二维数组的格式,并举例说明。
51单片机技术应用活页式教程(C语言版)
项目四 花样霓虹灯的设计与制作
4.1 C51库函数
知识 链接
4.2 用户自定义函数 4.3 C51数组
【知识点4.1】 C51库函数
• 函数有库函数和自定义函数两类。 • C51的库函数由C51的编译器提供,每个库函数的原型放
使单片机程序产生延时 对字节中的一位进行测试
【知识点4.2】用户自定义函数
• 1.用户自定义函数的形式
• (1)无参数函数。此种函数被调用时,既无参数输入,也不返回结果给调用函数,它 是为完成某种操作过程而编写的。
• (2)有参数函数。在定义此类函数时,必须定义与实际参数一一对应的形式参数,并 在函数结束时返回结果给调用该函数的程序使用,函数的返回值是通过函数中的return 语句获得的。调用时必须提供实际的输入参数。
如果P1口接了8个LED灯,该程序的功能是:
51单片机技术应用活页式教程(C语言版)
项目四 花样霓虹灯的设计与制作
【引导学习】
2. 请接合第1题程序,请写出有参与无参、形参与实参的含义。
3.请用字符型数组定义LED,存放流水灯8种显示状态,存放在程 序存储器中。 4.请用一维数组定义LED数码管的0-9的显示编码。

单片机c语言编程控制流水灯

单片机c语言编程控制流水灯

说了这么多了,相信你也看了很多资料了,手头应该也有必备的工具了吧!(不要忘了上面讲过几个条件的哦)。

那个单片机究竟有什么功能和作用呢?先不要着急!接下来让我们点亮一个LED(搞电子的应该知道LED是什么吧^_^)我们在单片机最小系统上接个LED,看我们能否点亮它!对了,上面也有好几次提到过单片机最小系统了,所谓单片机最小系统就是在单片机上接上最少的外围电路元件让单片机工作。

一般只须连接晶体、VCC、GND、RST即可,一般情况下,AT89C51的31脚须接高电平。

#include<reg51.h> //头文件定义。

或用#include<at89x51.h>其具体的区别在于:后者定义了更多的地址空间。

//在Keil安装文件夹中,找到相应的文件,比较一下便知!sbit P1_0 = P1 ^ 0; //定义管脚void main (void){while(1){P1_0 = 0;//低电平有效,如果把LED反过来接那么就是高电平有效}}就那么简单,我们就把接在单片机P1_0上的LED点亮了,当然LED是低电平,才能点亮。

因为我们把LED的正通过电阻接至VCC。

P1_0 = 0; 类似与C语言中的赋值语句,即把0 赋给单片机的P1_0引脚,让它输出相应的电平。

那么这样就能达到了我们预先的要求了。

while(1)语句只是让单片机工作在死循环状态,即一直输出低电平。

如果我们要试着点亮其他的LED,也类似上述语句。

这里就不再讲了。

点亮了几个LED后,是不是让我们联想到了繁华的街区上流动的彩灯。

我们是不是也可以让几个LED依次按顺序亮呢?答案是肯定的!其实显示的原理很简单,就是让一个LED灭后,另一个立即亮,依次轮流下去。

假设我们有8个LED分别接在P1口的8个引脚上。

硬件连接,在P1_1--P1_7上再接7个LED即可。

例程如下:#include<reg51.h>sbit P1_0 = P1 ^ 0;sbit P1_1 = P1 ^ 1;sbit P1_2 = P1 ^ 2;sbit P1_3 = P1 ^ 3;sbit P1_4 = P1 ^ 4;sbit P1_5 = P1 ^ 5;sbit P1_6 = P1 ^ 6;sbit P1_7 = P1 ^ 7;void Delay(unsigned char a){unsigned char i;while( --a != 0){for(i = 0; i < 125; i++); //一个; 表示空语句,CPU空转。

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

#include<reg52.h> #define uint unsigned int #define uchar unsigned char void delay(); void main() {
while(1)
{ P1=0xaa; delay(); P1=0x55; delay(); } } void delay() { uint x,y; for(x=100;x>0;x--) for(y=600;y>0;y--) ; }
二进制和十六进制的转换
如:0001B -> 1H B表示为二进制,H为十六进制 1001B -> 9H 1010B -> AH 0010 1100 -> 2CH 1111 1110 -> FEH 在C语言编程中是不能用H的.十六进制整常数 的前缀为0X或0x。
十六进制整常数
十六进制整常数的前缀为0X或0x。其数码取 值为0~9,A~F或a~f。 以下各数是合法的十六进制整常数: 0X2A( 十进制为42) 0XA0 (十进制为160) 0XFFFF ( 十进制为65535) 以下各数不是合法的十六进制整常数: 5A ( 无前缀0X) 0X3H (含有非十六进制数码)
1)宏定义
#define uint unsigned int #define uchar unsigned char #define 标识符 字符串
C语言中的例子: #define PI 3.1415926 2)函数声明 函数声明是指函数的定义在后面,而前面需要对 它进行调用,这样就需要预先作声明,一般来说函 数的声明只是函数首部加上分号即可。
5)for循环 for (表达式1;表达式2;表达式3) { 语句(内部可为空)} 执行过程: 1.求解一次表达式1. 2.求解表达式2,若其值为真(非0 即为真) ,则执行for中语句。然后执行第3步。否则结 束for 语句,直接跳出,不再执行第3步。 3.求解表达式3. 4.跳到第2步重复执行。
整 型
4)While (表达式) {语句(内部也可为空)} 特点:先判断表达式,后执行语句。 原则:若表达式不是0,即为真,那么执行语句。 否则跳出while 语句。 While(1) { } while(1)就是while(true),条件判断直接为true,循环 永远不会退出 。也称为死循环。
2)将0xfe赋给P1口,然后使用移位函数 来改变P1口的值,达到流水灯的效果 移位函数:
_crol_,_cror_:将char型变量循环向左(右) 移动指定位数后返回 。 _crol_,_cror_: c51中的intrins.h库函数
程序如下: 程序如下: #include<reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char uchar temp; void delay(uint);
点亮D0灯: D7 D6 D5 D4 D3 D2 D1 D0 1 1 1 1 1 1 1 0 从二进制转化为十六进制:0xfe
源程序 #include<reg52.h> void main() { P1=0xfd; }
Keil的使用 掌握Keil工程的建立和软件的开 发;
1.启动µVision µVision2是一个标准的Windows应用程 序,双击Keil µVision2图标即可启动,也可 以选择“开始”→“程序”Keil µVision2”命 令来启动运行。其主界面如图1-28所示。
单片机控制 led灯点亮
主要内容
一、点亮板子上的第一个灯D0 二、点亮板子上的D0、D2、D4、 D6灯,与D1、D3、D5、D7灯交替 闪烁 三、流水灯:从D0---D7依次点亮
一、点亮板子上的第一个灯D0
1)目标 了解单片机的基本设计思路和编 程方法,和单片机的最小系统。 2)分析 利用单片机的一个输入/输出口来 控制一盏发光二极管点亮。
C语言-51单片机的头文件
通常有:reg51.h reg52.h math.h 通常有 ctype.h stdio.h stdlib.h absacc.h 常用有:reg51.h reg52.h 常用有 (定义特殊功能寄存器和位寄存器 ); math.h (定义常用数学运算); 定义常用数学运算);
4.输入源程序:此时就可以输入源程序了。 5.设置目标硬件的工具选项 程序编写完成后,还要对项目进行进一 步的设置,以满足要求。
“Output”选项卡 如图所示,其中有多个选项,此处选择 “Create HEX File”复选框用于生成可执行代 码文件,该文件可以用编程器写入单片机芯 片,文件的扩展名为.HEX,默认情况下该项 未被选中,如果要写芯片做硬件实验,就必 须选中该项。其余选项均取默认值,不做任 何修改。
单击Target 1前面的+号,然后在Source Group 1上单击鼠标右键,弹出快捷菜单。 选择“Add Files to Group ’Source Group 1’” (添加文件到项目)命令,弹出如图1-34所 示的对话框。选中文件(注意选择文件类型 ),然后单击“Add”(添加)按钮,即可添 加选中文件到项目中。
各种进位制的对应关系
十进制 二进制 0 1 2 3 4 5 6 7 8 0 1 10 11 100 101 110 111 1000 十六进制 0 1 2 3 4 5 6 7 8 十进制 二进制 9 10 11 12 13 14 15 16 1001 1010 1011 1100 1101 1110 1111 10000 十六进制 9 A B C D E F 10
7.将生成的hex文件,通过ISP下载到板子中 。
请观察现象!
源程序 #include<reg52.h> void main() { P1=0xfd; }
C语言复习
Main 函数 格式:void main() 特点:无返回值,无参。 任何一个C程序有且仅有一个main函数,它是整个 程序开始执行的入口。 例:void main() { 总程序从这里开始执行; 其他语句; }
3.创建一个新的源程序文件,并把这个源文 件添加到项目中 单击工具栏中的新建文件图标(或选择 “File”(文件)→“New”(新建)命令), 文件操作窗口即可出现新建文件。保存该空 白文件,单击工具栏中的保存图标(或选择 “File”(文件)→“Save”(保存)命令), 弹出如图1-32所示的“Save as”(保存为) 对话框,在“文件名”文本框中输入欲保存 的文件名,保存时注意加上正确的后缀名。
6.编译项目并创建HEX文件 可以通过工具栏中的图标直接进行。从左到 右的图标分别是:编译、编译连接、全部重 建、停止编译和对工程进行设置。
对源程序编写之后编译,最终要得到结果, 提示0个错误,0个警告。同时还可看到,该 程序的内部RAM的使用量(data=8.0),外 部RAM的使用量(xdata=0),代码量( code=18)等一些信息。
5)delay()函数 是一个延时函数。 两个for语句,构成了循环嵌套。用数数的方式消耗 时间产生延迟效果 。具体延迟多久取决于若干因素 ,以后再讨论。 void delay() { uint x,y; for(x=100;x>0;x--) for(y=600;y>0;y--) ; } 注意:第二个for循环体是一条空语句。
三、流水灯:从D0---D7依次点亮
分析: D0亮 D1亮 D2亮 D3亮 D4亮 D5亮 D6亮 D7亮
0xfe 0xfd 0xfb 0xf7 0xef 0xdf 0xbf 0x7f
11111110 11111101 11111011 11110111 11101111 11011111 10111111 01111111
void main() { temp=0xfe; while(1) { for(num=0;num<8;num++) { P1=temp; delay(100); temp=_crol_(temp,1); P1=0xff; delay(100); } } }
AT89S52
8051 based Full Static CMOS controller with Three-Level Program Memory Lock, 32 I/O lines, 3 Timers/Counters, 8 Interrupts Sources, Watchdog Timer, 2 DPTRs(DATA POINTER REGISTERS ), 8K Flash Memory, 256 Bytes On-chip RAM 基于8051全静态CMOS控制器、 三级加密程 序存储器 、 32个I/O口 、三个定时器/计数器 、八个中断源 、看门狗定时器、2 个数据指 针 寄存器、8k字节Flash,256字节片内RAM
引脚:
1)4个I/O口占了32个引脚 2)电源和接地又占了2个引 脚 3)剩下的6个引脚是时钟引 脚和控制引脚
硬件说明
使用单片机的P1口来驱动8个LED,发光二 极管的阳极接高电平,故P1口为低电平时, 就可以驱动其点亮 D0与P1.0口是相连的,P1.0用来表示P1口的 最低位; 本任务中给单片机的P1.0口一个低电平信号 即可完成控制。所以,只需给P1.0低电平信 号,其他引脚均为高电平。
软件分析: 1)依次把这8个值赋给P1口,延时一段 程序
void main() { while(1) { P1=0xfe; delay(100); P1=0xfd; delay(100); P1=0xfb; delay(100); P1=0xf7; delay(100); P1=0xef; delay(100); P1=0xdf; delay(100); P1=0xbf; delay(100); P1=0x7f; delay(100); } } }
相关文档
最新文档