资源描述
(word完整版)51单片机50个实例代码
51单片机50个例程代码
程序里有中断,串口等驱动,直接复制即可使用
1—IO输出-点亮1个LED灯方法1
/*——-———--—-——-——-—---———-——---———--—----————--—-
名称:IO口高低电平控制
论坛:www.doflye。net
编写:shifang
日期:2009。5
修改:无
内容:点亮P1口的一个LED灯
该程序是单片机学习中最简单最基础的,
通过程序了解如何控制端口的高低电平
—---——--—--—--—-—————-—-—-———----—-——-----————--*/
#include<reg52.h〉 //包含头文件,一般情况不需要改动,
//头文件包含特殊功能寄存器的定义
sbit LED=P1^0;// 用sbit 关键字 定义 LED到P1。0端口,
//LED是自己任意定义且容易记忆的符号
/*——--——--—-——-—-—---—---—-————--—-—-——-—-—--——-—-
主函数
————-—-——--———--————--—--————-————-——————-----——*/
void main (void)
{
//此方法使用bit位对单个端口赋值
LED=1; //将P1.0口赋值 1,对外输出高电平
LED=0; //将P1。0口赋值 0,对外输出低电平
while (1) //主循环
{
//主循环中添加其他需要一直工作的程序
}
}
2—IO输出-点亮1个LED灯方法2
/*——--—---——-—-—-—-—-—-———---——-——-—--——--——----—
名称:IO口高低电平控制
论坛:
编写:shifang
日期:2009.5
修改:无
内容:点亮P1口的一个LED灯
该程序是单片机学习中最简单最基础的,
通过程序了解如何控制端口的高低电平
—-——--——--—--——--————————-——————---————————-----*/
#include〈reg52。h> //包含头文件,一般情况不需要改动,
//头文件包含特殊功能寄存器的定义
/*-------——------—-———-————-—---———————-—-—---—-—-
主函数
————-——---——-—--—-—————-———--—---—-——-—--—-——-—-*/
void main (void)
{
//此方法使用1个字节对单个端口赋值
P1 = 0xFF; //P1口全部为高电平,对应的LED灯全灭掉,
//ff换算成二进制是 1111 1111
P1 = 0xfe; //P1口的最低位点亮,可以更改数值是其他的灯点亮
//0xfe是16进制,0x开头表示16进制数,
//fe换算成二进制是 1111 1110
while (1) //主循环
{
//主循环中添加其他需要一直工作的程序
}
}
3-IO输出—点亮多个LED灯方法1
/*—————-——-—-———---———————---———---——-——————---—-
名称:IO口高低电平控制
论坛:www.doflye。net
编写:shifang
日期:2009.5
修改:无
内容:点亮P1口的多个LED灯
该程序是单片机学习中最简单最基础的,
通过程序了解如何控制端口的高低电平
-——--——-—--—-—-——-—-——————--—---—--———--—--———-—*/
#include<reg52.h> //包含头文件,一般情况不需要改动,
//头文件包含特殊功能寄存器的定义
sbit LED0=P1^0;// 用sbit 关键字 定义 LED到P1。0端口,
sbit LED1=P1^1;//LED是自己任意定义且容易记忆的符号
sbit LED2=P1^2;
sbit LED3=P1^3;
sbit LED4=P1^4;
sbit LED5=P1^5;
sbit LED6=P1^6;
sbit LED7=P1^7;
/*-———----—---------—-——---—————-———-—--———-————--
主函数
—--—-—---——--——---—-——--—-——-—-———---———--—-——--*/
void main (void)
{
//此方法使用bit位对单个端口赋值
LED0=0; //将P1.0口赋值 0,对外输出低电平
LED1=1;
LED2=0;
LED3=1;
LED4=0;
LED5=1;
LED6=0;
LED7=1;
while (1) //主循环
{
//主循环中添加其他需要一直工作的程序
}
}
4—IO输出-点亮多个LED灯方法2
/*---—--—---——-———-----——-----—-—-----—---—----—-
名称:IO口高低电平控制
论坛:
编写:shifang
日期:2009。5
修改:无
内容:点亮P1口的多个LED灯
该程序是单片机学习中最简单最基础的,
通过程序了解如何控制端口的高低电平
-——----——-—-——-—--—-—-—-——----——-——---————--—---*/
#include〈reg52.h> //包含头文件,一般情况不需要改动,
//头文件包含特殊功能寄存器的定义
/*—------—---————--———---—-————-——-—---———-—-————-
主函数
———-—--——--—--——-—--—————--——-----—--—————------*/
void main (void)
{
//此方法使用bit位对单个端口赋值
P1=0x55; //换成二进制是0101 0101
while (1) //主循环
{
//主循环中添加其他需要一直工作的程序
}
}
5—闪烁1个LED
/*--———--—--—---—-—-—-—------—--—-——-—----————-—-
名称:IO口高低电平控制
论坛:
编写:shifang
日期:2009.5
修改:无
内容:点亮P1口的1个LED灯闪烁
该程序是单片机学习中最简单最基础的,
通过程序了解如何控制端口的高低电平
——————--——-—--—--—---——--—-————---—-—-———---—-——*/
#include〈reg52.h> //包含头文件,一般情况不需要改动,
//头文件包含特殊功能寄存器的定义
sbit LED0=P1^0;// 用sbit 关键字 定义 LED到P1。0端口,
//LED是自己任意定义且容易记忆的符号
void Delay(unsigned int t); //函数声明
/*-————---——-———--—-————-————--—---—-——————-—-——-—
主函数
————-———-----———-—-—-----————-—-——--------—--——-*/
void main (void)
{
//此方法使用bit位对单个端口赋值
while (1) //主循环
{
LED0=0; //将P1.0口赋值 0,对外输出低电平
Delay(10000); //调用延时程序;更改延时数字可以更改延时长度;
//用于改变闪烁频率
LED0=1; //将P1。0口赋值 1,对外输出高电平
Delay(10000);
//主循环中添加其他需要一直工作的程序
}
}
/*—-——--—----——-----———-—-———-—-—----—-—---—--—---
延时函数,含有输入参数 unsigned int t,无返回值
unsigned int 是定义无符号整形变量,其值的范围是
0~65535
—---—-—-----—————————---———--———-----—-—-—-—-———*/
void Delay(unsigned int t)
{
while(--t);
}
6—不同频率闪烁1个LED灯
/*--———-—--—-———--—---—-————-——--—-—-—---——---———
名称:IO口高低电平控制
论坛:www.doflye。net
编写:shifang
日期:2009.5
修改:无
内容:点亮P1口的1个LED灯闪烁
该程序是单片机学习中最简单最基础的,
通过程序了解如何控制端口的高低电平
--—-—-——-————---——-————-—-—--—--——--—--——-——————*/
#include〈reg52.h〉 //包含头文件,一般情况不需要改动,
//头文件包含特殊功能寄存器的定义
sbit LED0=P1^0;// 用sbit 关键字 定义 LED到P1.0端口,
//LED是自己任意定义且容易记忆的符号
void Delay(unsigned int t); //函数声明
/*-———----—-————---———-——-—-——--—————-—-———---—-—-
主函数
—-———-—-—-—--——-——--——-———-———-——-——--—----———-—*/
void main (void)
{
//此方法使用bit位对单个端口赋值
unsigned char i; //定义一个无符号字符型局部变量 i 取值范围 0~255
while (1) //主循环
{
for(i=0;i〈10;i++) //加入 for循环,表明for循环大括号中的程序循环执行10次
{
LED0=0; //将P1。0口赋值 0,对外输出低电平
Delay(5000); //调用延时程序;更改延时数字可以更改延时长度;
//用于改变闪烁频率
LED0=1; //将P1.0口赋值 1,对外输出高电平
Delay(5000);
}
for(i=0;i<10;i++)
{
LED0=0; //将P1.0口赋值 0,对外输出低电平
Delay(60000); //调用延时程序;更改延时数字可以更改延时长度;
//用于改变闪烁频率
LED0=1; //将P1。0口赋值 1,对外输出高电平
Delay(60000);
}
//主循环中添加其他需要一直工作的程序
}
}
/*--———-—--—————--————-——--——--——----——————--—-——-
延时函数,含有输入参数 unsigned int t,无返回值
unsigned int 是定义无符号整形变量,其值的范围是
0~65535
————---—--——-——----————-—---—-——--——-—-————--—-—*/
void Delay(unsigned int t)
{
while(—-t);
}
7-不同频率闪烁多个LED灯
/*—----——--—---——-—-----—-——-——-——————--—-———--—-
名称:IO口高低电平控制
论坛:
编写:shifang
日期:2009.5
修改:无
内容:点亮P1口的多个LED灯闪烁
该程序是单片机学习中最简单最基础的,
通过程序了解如何控制端口的高低电平
-----——---—-—--—--——-—————-————————-—-—-—---———-*/
#include<reg52。h〉 //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
sbit LED0=P1^0;// 用sbit 关键字 定义 LED到P1。0端口,LED是自己任意定义且容易记忆的符号
sbit LED1=P1^1;
sbit LED2=P1^2;
sbit LED3=P1^3;
sbit LED4=P1^4;
sbit LED5=P1^5;
sbit LED6=P1^6;
sbit LED7=P1^7;
void Delay(unsigned int t); //函数声明
/*-——-——————-—-—-———-——--—————-—--——-———-—-————--—
主函数
————-——-—-—-———--—-----——----———-————-——--------*/
void main (void)
{
//此方法使用bit位对单个端口赋值
unsigned char i; //定义一个无符号字符型局部变量 i 取值范围 0~255
while (1) //主循环
{
for(i=0;i〈10;i++) //加入 for循环,表明for循环大括号中
//的程序循环执行10次
{
LED0=0; //将P1。0口赋值 0,对外输出低电平
LED2=1;
LED4=0;
Delay(5000); //调用延时程序;更改延时数字可以更改延时长度;
//用于改变闪烁频率
LED0=1; //将P1.0口赋值 1,对外输出高电平
LED2=0;
LED4=1;
Delay(5000);
}
for(i=0;i<10;i++)
{
LED0=0; //将P1.0口赋值 0,对外输出低电平
LED2=1;
LED4=0;
Delay(60000); //调用延时程序;更改延时数字可以更改延时长度;
//用于改变闪烁频率
LED0=1; //将P1.0口赋值 1,对外输出高电平
LED2=0;
LED4=1;
Delay(60000);
}
//主循环中添加其他需要一直工作的程序
}
}
/*-—--———-————-——---—--——-—-—---—-—---——-—-----———
延时函数,含有输入参数 unsigned int t,无返回值
unsigned int 是定义无符号整形变量,其值的范围是
0~65535
——---—---—---—-———--—-———-——-——————--—---—-—--—-*/
void Delay(unsigned int t)
{
while(-—t);
}
8-8位LED左移
/*--——-———-—-—————————--—-—-——-——-—-——-——---—————
名称:IO口高低电平控制
论坛:www。doflye。net
编写:shifang
日期:2009。5
修改:无
内容:左移,直至LED全部点亮,左移符号 <〈
-——--—-——-—-----—-———-——--—-—--—--———————-—-—-—-*/
#include〈reg52.h〉 //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
void Delay(unsigned int t); //函数声明
/*——-——---——-——-—--—-—--———---————-—-—--—-—---—-—-
主函数
—--——-—--—--——--—-—--------——-—--—----—---——-——-*/
void main (void)
{
unsigned char i; //定义一个无符号字符型局部变量 i 取值范围 0~255
Delay(50000);
P1=0xfe; //赋初始值
for(i=0;i〈8;i++) //加入 for循环,表明for循环大括号中的程序循环执行8次
{
Delay(50000);
P1<〈=1;
}
while (1) //主循环
{
//主循环中添加其他需要一直工作的程序
}
}
/*-—————-——-——--—----————-—--———---—---————-—————-
延时函数,含有输入参数 unsigned int t,无返回值
unsigned int 是定义无符号整形变量,其值的范围是
0~65535
-——-—-—-———-——-——---—---———--—-—--———--—-—----—-*/
void Delay(unsigned int t)
{
while(——t);
}
9-8位LED右移
/*————-—-————————--——-———-——--—-—---——-———-—-—-——
名称:IO口高低电平控制
论坛:
编写:shifang
日期:2009.5
修改:无
内容:右移,直至LED全部点亮,右移符号 〉〉
--—————--———-—------———————----—————-—-—--—--—--*/
#include〈reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
void Delay(unsigned int t); //函数声明
/*——-—-—-—-——---—————--————-—-—--——--—----—-----——
主函数
-——-———-————-——--—————--—-———-—--———-—--—-——----*/
void main (void)
{
unsigned char i; //定义一个无符号字符型局部变量 i 取值范围 0~255
Delay(50000);
P1=0x7f; //赋初始值
for(i=0;i<8;i++) //加入 for循环,表明for循环大括号中的程序循环执行8次
{
Delay(50000);
P1>>=1;
}
while (1) //主循环
{
//主循环中添加其他需要一直工作的程序
}
}
/*——-———-——----——-——---——----—---—-———--—-—-—--—--
延时函数,含有输入参数 unsigned int t,无返回值
unsigned int 是定义无符号整形变量,其值的范围是
0~65535
-—-—-—--—--———-—--—-——-——---—-——-————-——-—-—-—-—*/
void Delay(unsigned int t)
{
while(——t);
}
10—LED循环左移
/*—--——-—-—-——-—----—-—---—-——————--———--——————-—
名称:IO口高低电平控制
论坛:www。doflye。net
编写:shifang
日期:2009。5
修改:无
内容:循环左移,始终一个led点亮,并循环执行流水动作,左移符号 〈< 逻辑或符号 |
—-—---————-————-———-——--————----—-—-—-———--————-*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
void Delay(unsigned int t); //函数声明
/*———--——-———--—--------——-—--—-—-——------—-———---
主函数
—-—--—---——-—-———--—-—-—-————------——-———----—-—*/
void main (void)
{
unsigned char i; //定义一个无符号字符型局部变量 i 取值范围 0~255
Delay(50000);
P1=0xfe; //赋初始值
while (1) //主循环
{
for(i=0;i<8;i++) //加入 for循环,表明for循环大括号中的程序循环执行8次
{
Delay(50000);
P1<<=1;
P1=P1|0x01; //左移后,最右端自动赋值0,所以需要该语句赋值1
}
P1=0xfe; //重新赋初始值
//主循环中添加其他需要一直工作的程序
}
}
/*-————-—-——-——-—---———--—-——--—-————-----——————-—
延时函数,含有输入参数 unsigned int t,无返回值
unsigned int 是定义无符号整形变量,其值的范围是
0~65535
---—---——--—---——-—————-—---——--—-——-————--———-—*/
void Delay(unsigned int t)
{
while(——t);
}
11—LED循环右移
/*-—————-—-—--—--—--——-—-——---—-————---—-—-—--—--
名称:IO口高低电平控制
论坛:www.doflye。net
编写:shifang
日期:2009。5
修改:无
内容:循环右移,始终一个led点亮,并循环执行流水动作,右移符号 >> 逻辑或符号 |
-------————-——-——------——---——-—————-——————-——-—*/
#include<reg52。h〉 //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
void Delay(unsigned int t); //函数声明
/*—--—-——--—---—------——----——-—--—--———--———-——--
主函数
-----—----——-——-—---—--—----——————--—--————-——-—*/
void main (void)
{
unsigned char i; //定义一个无符号字符型局部变量 i 取值范围 0~255
Delay(50000);
P1=0x7f; //赋初始值
while (1) , //主循环
{
for(i=0;i<8;i++) //加入 for循环,表明for循环大括号中的程序循环执行8次
{
Delay(50000);
P1〉〉=1;
P1=P1|0x80; //右移后,最左端自动赋值0,所以需要该语句赋值1
}
P1=0x7f; //重新赋初始值
//主循环中添加其他需要一直工作的程序
}
}
/*—----———-——--—----------———-——---——----—---——-——
延时函数,含有输入参数 unsigned int t,无返回值
unsigned int 是定义无符号整形变量,其值的范围是
0~65535
—-—-——--———-—-———-—------————--—--————-——-———--—*/
void Delay(unsigned int t)
{
while(—-t);
}
12—查表显示LED灯
/*——--——-—--——-——-——----—-————---———-———--——-——-—
名称:IO口高低电平控制
论坛:www.doflye。net
编写:shifang
日期:2009。5
修改:无
内容:通过查表获得1个字节的值然后赋值给P1端口,ROM允许情况可以设置更多表格
—-—-—-—-—-——-—--—----—-—-—--———-——--——-—-—-—-———*/
#include<reg52。h〉 //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
/*—-—----————--———----———---———————--——--————-—-——
查表表格
--—-—-————-———---—--—-----——————---——-—-———---—-*/
unsigned char code table[]={0x7f,0xbf,0xdf,0xef,
0xf7,0xfb,0xfd,0xfe,
0xff,0xff,0x00,0x00,
0x55,0x55,0xaa,0xaa
};
//rom允许情况可以无限添加
/*—---—------——--—-——-—————-—-—-———-——-———-——-—---
函数声明
--—-—--——----————————————-—-—---——-—----—-—--—--*/
void Delay(unsigned int t); //函数声明
/*-—-----—--—-——--——----———--——-———-—--——-—---—--—
主函数
————-—---—--—----—--—-——---—————————-——-————-——-*/
void main (void)
{
unsigned char i; //定义一个无符号字符型局部变量 i 取值范围 0~255
while (1) //主循环
{
for(i=0;i<16;i++) //加入 for循环,表明for循环大括号中的程序循环
//执行16次,表明表格中有16个元素
{
P1=table[i];
Delay(30000);
}
//主循环中添加其他需要一直工作的程序
}
}
/*—-———-—----—---——-—-——--———-———----————----——-——
延时函数,含有输入参数 unsigned int t,无返回值
unsigned int 是定义无符号整形变量,其值的范围是
0~65535
——--—-——-—————-—————-————-—--—----—-———--———--——*/
void Delay(unsigned int t)
{
while(-—t);
}
13—双灯左移右移闪烁
/*—-——---—-—-—--—-———--—-—--——-—-—---——---—---——-
名称:IO口高低电平控制
论坛:www。doflye。net
编写:shifang
日期:2009。5
修改:无
内容:2个led灯先左移,然后右移,然后同时闪烁
——-—————----————--——-——---—-————--—-——---———-—--*/
#include<reg52。h〉 //包含头文件,一般情况不需要改动,
//头文件包含特殊功能寄存器的定义
void Delay(unsigned int t); //函数声明
/*--———--——---——--————---—----————-——————-----—-—-
主函数
——-——-—--—---——--————-----——-—-——-—---------——--*/
void main (void)
{
unsigned char i; //定义一个无符号字符型局部变量 i
//取值范围 0~255
unsigned char temp;//定义临时变量用于转换
while (1) //主循环
{
temp=0xfc;
P1=temp;
for(i=0;i<7;i++) //加入 for循环,表明for循环大括号
//中的程序循环执行7次
{
Delay(50000); //调用延时程序;更改延时数字可
//以更改延时长度;用于改变闪烁频率
temp〈〈=1;
temp=temp|0x01; //也可以直接把temp换成P1
P1=temp; //之所以加入temp做中间变量,转换
//完成后直接赋值到端口,防止直接
//操作端口造成的短暂闪烁
}
temp=0x3f;
P1=temp;
for(i=0;i〈7;i++) //加入 for循环,表明for循环大括号
//中的程序循环执行7次
{
Delay(50000); //调用延时程序;更改延时数字可以
//更改延时长度;用于改变闪烁频率
temp>〉=1;
temp|=0x80; //等效于 temp=temp|0x80
P1=temp;
}
for(i=0;i<3;i++) //加入 for循环,表明for循环大括号
//中的程序循环执行3次
{
P1=0xff;
Delay(50000);
P1=0x00;
Delay(50000);
} //主循环中添加其他需要一直工作的程序
}
}
/*—----——---—-——-—-————------—----—-—--————---——-—
延时函数,含有输入参数 unsigned int t,无返回值
unsigned int 是定义无符号整形变量,其值的范围是
0~65535
-—-—-—---————---————--—---———---—--—-————-—-—--—*/
void Delay(unsigned int t)
{
while(——t);
}
14-花样灯
/*-—--———-—--—--—--—-——---—-———-—-—-———--—-———--—
名称:IO口高低电平控制
论坛:
编写:shifang
日期:2009.5
修改:无
内容:花样灯一般有两种方法实现:
1、程序循环执行
2、查表法
这里我们两种都使用一下
-—-——-—--—------——---——————-——————-------——---——*/
#include<reg52。h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
/*-—-——————-—--—-——-—---—-——-—-—-——-———---———-———-
展开阅读全文