• 单片机项目实例 - 嵌入式开发 - C语言版 - 基础篇
千次阅读
2021-04-21 21:22:36

注意：此实例单片机版本为STC 89C52

#### 1. 流水灯 效果，六个LED内嵌灯不停切换（位输出）

//流水灯
#include<reg52.h>

#define uint unsigned int
#define no 0
#define off 1

sbit led1 = P1^0;
sbit led2 = P1^1;
sbit led3 = P1^2;
sbit led4 = P1^3;
sbit led5 = P1^4;
sbit led6 = P1^5;
sbit led7 = P1^6;
sbit led8 = P1^7;

void delay(uint xms){	//延时xms
uint i,j;
for(i = xms;i>0;i--){
for(j = 112;j>0;j--);
}
}
int main(){
while(1)
{
led1 = no; //
delay(200);//延迟200ms
led1 = off;

led2 = no; //
delay(200);//延迟200ms
led2 = off;

led3 = no; //
delay(200);//延迟200ms
led3 = off;

led4 = no; //
delay(200);//延迟200ms
led4 = off;

led5 = no; //
delay(200);//延迟200ms
led5 = off;

led6 = no; //
delay(200);//延迟200ms
led6 = off;

led7 = no; //
delay(200);//延迟200ms
led7 = off;

led8 = no; //
delay(200);//延迟200ms
led8 = off;
}
return 0;
}



#### 2. 流水灯 效果，六个LED内嵌灯不停切换（循环移位）

#include <reg52.h>
#include <intrins.h>

#define uint unsigned int
#define uchar unsigned char

uchar aa;

void delayms(uint);

int main() {
aa = 0xfe;

while(1){
P1 = aa;
delayms(500);
aa = _cr ol_(aa,1);
}
return 0;
}

void delayms(uint xms){
uint i,j;
for(i = xms;i > 0;i--){
for(j = 110;j > 0;j--);
}
}


#### 3. 数码管显示内容

#include <reg52.h>

sbit dula = P2^6;	//申明U1锁存器的锁存端
sbit wela = P2^7;	//申明U2锁存器的锁存端

int main(){
wela = 1;		 //打开U2锁存端
P0 = 0xFE;	   	 //打开入位选信号
wela = 0;		 //关闭U2锁存端

dula = 1;
P0 = 0x7F;
dula = 0;
while(1);

return 0;
}


#### 4. 数码管显示内容 （略有闪烁）

#include <reg52.h>

#define uchar unsigned char
#define uint unsigned int

sbit dula = P2^6;
sbit wela = P2^7;

uchar num;
uchar code table[] = {
0x3f, 0x06, 0x5b, 0x4f,
0x66, 0x6f, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c,
0x39, 0x5e, 0x79, 0x71
};

void delayms(uint);

int main(){
wela = 1;
P0 = 0xc0;
wela = 0;
while(1){
for(num = 0; num < 16; num++){
dula = 1;
P0 = table[num];
dula = 0;
delayms(500);
}
}

return 0;
}

void delayms(int xms){
uint i,j;
for(i = xms; i > 0; i--){
for(j = 110; j < 0; j--);
}
}


#### 5. 数码管显示内容 （显示1 2 3 4）（略有问题，欢迎提出Bug）

#include <reg52.h>

#define uchar unsigned char
#define uint unsigned int

sbit dula = P2^6;
sbit wela = P2^7;

uchar code table[] = {
0x3f, 0x06, 0x5b, 0x4f,
0x66, 0x6f, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c,
0x39, 0x5e, 0x79, 0x71
};

void delayms(uint);

void main(){

while(1){
dula = 1;
P0 = table[1];  //送段选数据
dula = 0;
P0 = 0xff;	    //送位选数据前关闭所有显示，防止打开位选锁存时
wela = 1;		//原来段选数据通过位选锁存器造成的混乱
P0 = 0xfe;		//送位选数据
wela = 0;
delayms(10);

dula = 1;
P0 = table[2];
dula = 0;
P0 = 0xff;
wela = 1;
P0 = 0xfd;
wela = 0;
delayms(10);

dula = 1;
P0 = table[3];
dula = 0;
P0 = 0xff;
wela = 1;
P0 = 0xfb;
wela = 0;
delayms(10);

dula = 1;
P0 = table[4];
dula = 0;
P0 = 0xff;
wela = 1;
P0 = 0xf7;
wela = 0;
delayms(10);

}

}

void delayms(uint xms){
uint i,j;
for(i = xms; i > 0; i--){
for(j = 110; j < 0; j--);
}
}


#### 6. 蜂鸣器间断报警

 #include <reg52.h>

#define on 0
#define off 1

sbit fm = P2^3;

void delay(unsigned int xms){
unsigned int i,j;
for(i = xms; i > 0; i--){
for(j = 112;j > 0; j--);
}

}

int main(){

while(1){
fm = on;
delay(100);
fm = off;
delay(100);

}
return 0;
}


#### 7. 蜂鸣器报警，流水灯切换

 #include <reg52.h>
#include <intrins.h>

#define on 0
#define off 1

sbit fm = P2^3;

void delay(unsigned int xms){
unsigned int i,j;
for(i = xms; i > 0; i--){
for(j = 112;j > 0; j--);
}

}

int main(){
P1 = 0xfe;
while(1){
delay(100);
P1 = _crol_(P1,1);
fm = on;
delay(100);
fm = off;
}

return 0;
}


#### 8. 显示器显示 “b”

#include <reg52.h>

#define duan P0
#define duan_one P1

sbit wei1 = P2^4; //定义第一个显示屏
sbit wei2 = P2^5;
sbit wei3 = P2^6;
sbit wei4 = P2^7;

int main(){

wei1 = 1;
wei2 = 1;
wei3 = 0;
wei4 = 0;
duan = 0x7c;//0111 1100 "b"
duan_one = 0x7c;//0111 1100 "b"
while(1);

return 0;
}


#### 9. 显示屏流动切换1 2 3 4，彩灯流动 ，蜂鸣器间断

#include <reg52.h>
#include <intrins.h>

#define duan P0
#define uchar unsigned char
#define on 0
#define off 1

sbit wei1 = P2^4; //定义第一个显示屏
sbit wei2 = P2^5;
sbit wei3 = P2^6;
sbit wei4 = P2^7;
sbit fm = P2^3;
uchar code se[17] = {
0x3f, 0x06, 0x5b, 0x4f,
0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c,
0x39, 0x5e, 0x79, 0x71,
0x00
};

void delay(unsigned int xms){
unsigned int i,j;
for(i = xms; i > 0; i--){
for(j = 112;j > 0; j--);
}

}

void main(){
P1 = 0xfe;
while(1){
duan = se[4];
wei1 = 0;
wei2 = 0;
wei3 = 0;
wei4 = 1;
P1 = _crol_(P1,1);
fm = on;
delay(200);
fm = off;
delay(800);

duan = se[3];
wei1 = 0;
wei2 = 0;
wei3 = 1;
wei4 = 0;
P1 = _crol_(P1,1);
fm = on;
delay(200);
fm = off;
delay(800);

duan = se[2];
wei1 = 0;
wei2 = 1;
wei3 = 0;
wei4 = 0;
P1 = _crol_(P1,1);
fm = on;
delay(200);
fm = off;
delay(800);

duan = se[1];
wei1 = 1;
wei2 = 0;
wei3 = 0;
wei4 = 0;
P1 = _crol_(P1,1);
fm = on;
delay(200);
fm = off;
delay(800);
}
}


#### 10. 多功能控制实验程序

#include <reg52.h>

sbit led1 = P1^0;//RED
sbit led2 = P1^1;//RED
sbit led3 = P1^2;//GREEN
sbit led4 = P1^3;//GREEN
sbit led5 = P1^4;//YELLOW
sbit led6 = P1^5;//YELLOW
sbit led7 = P1^6;//BLUE
sbit led8 = P1^7;//BLUE

sbit k1 = P3^4;
sbit k2 = P3^5;
sbit k3 = P3^6;
sbit k4 = P3^7;

void main(){
P1 = 0xfe;

while(1){
led1 = k1;
led2 = k1;

if(k1 == 0){
led1 = 0;
led2 = 0;
}
else{
led1 = 1;
led2 = 1;
}
led3 = k2;
led4 = k2;
led5 = k3;
led6 = k3;
led7 = k4;
led8 = k4;
}
}


#### 11. 单按键控制实验，点击关闭熄灭灯或点亮，长按无操作

#include  <reg52.h>

sbit led1 = P1^0l;
sbit k1 = P3^4;

void delay(unsigned int xms){
unsigned int i,j;
for(i = xms; i > 0; i--){
for(j = 112;j > 0; j--);
}
}

void main()	{
P1 = 0xfe;//熄灭所有led

while(1) {
if(k1 == 0){
delay(10);//消抖
if(k1 == 0){
//再次判断是否按下
while(k1 == 0);//直到按钮判断松开
led1 =~led1;	//翻转
}
}
}
}


### 下面位断点 需要连接第三方硬件

#### 12. 中断 - 外部中断实验 注：此实验需要杜邦线将单片机P3.2引脚与最下角端口链接

#include <reg52.h>

void delay(unsigned int xms){
unsigned int i,j;
for(i = xms; i > 0; i--){
for(j = 112;j > 0; j--);
}
}

void main(){
P1 = 0x0f;//0000 1111 下面四个灯亮，上面灭
EX0 = 1; //INT0中断允许
EA  = 1;//全局中断打开
IT0	= 0;//触发模式为低电平触发
while(1);
}

void low()interrupt 0{
P1 =~ P1;
delay(200);
}


#### 12. 外部中断下沿触发实验 注： 此实验需要杜邦线将单片机P3.3与P3.6引脚端口链接

#include <reg52.h>

void main(){
P1 = 0x0f;//0000 1111 下面四个灯亮，上面灭
EX0 = 1; //INT0中断允许
EA  = 1;//全局中断打开
IT0	= 1;//触发模式为下电平触发
while(1);
}

void low()interrupt 2{
P1 =~ P1;


更多相关内容
• 嵌入式linux应用程序开发标准教程（第二版） 课堂实例
• ARM嵌入式开发实例1-2.pptx
• 多种嵌入式案例：家居控制器，控制器项目，生物识别项目等
• ARM Cortex-M3嵌入式开发实例详解--基于NXP LPC1768 pdf电子书，有需要的童鞋不要错过，建议结合周立功的开发文档一起学习，进步迅速。
• ARM嵌入式开发实例12.pptx
• ARM嵌入式开发实例1-2.ppt
• ARM嵌入式开发实例PPT教学课件.pptx
• ARM嵌入式开发实例PPT学习教案.pptx
• ARM嵌入式开发实例解析PPT教学课件.pptx
• ARM嵌入式开发实例解析PPT学习教案.pptx
• ARM嵌入式开发实例PPT课件PPT学习教案.pptx
• ARM Cortex-M3嵌入式开发实例详解-基于NXPLPC1768.pdf 高清版本
• 嵌入式系统设计与开发实例详解-基于ARM的应用胥静是一个很好的嵌入式教程啊
• 计算机专业人员书库《嵌入式开发详解》高清版。 前两三页存在一些文字错乱，但目录和正文部分均正常，
• 嵌入式开发实例，学习嵌入式必备PPT，讲解详细，功能强大
• 无线通信系统ARM嵌入式开发实例精讲.pdf
• 很好的嵌入式开发实例，希望对大家有帮助！
• 非常好的东西，分享下。 对刚入门的 人来说是好东西。
• ARM嵌入式系统软件开发实例（一），详细地讲述了具体的ARM嵌入式开发实例，简单易懂。
• 《ARM Cortex-M3嵌入式开发实例详解基于NXP LPC1768》源程序
• ARM Cortex-M3嵌入式开发实例详解——基于NXP LPC17XX[张燕妮][程序源代码]
• ARM平台下的开发实例 有助于对arm系统的理解
• FPGA嵌入式系统开发实例（惠飞）工程包+源文件包
• ## 嵌入式的应用实例

千次阅读 2021-06-26 05:26:16
谈到嵌入式技术，可能除计算机方面相关专业人士外很少有人能够涉足了解。其实应用到嵌入式技术的产品已经渗透到我们生活的方方面面。从人们的生活到工业化生产，从银行、医疗到航空航天领域，嵌入式系统无处不在，图...

谈到嵌入式技术，可能除计算机方面相关专业人士外很少有人能够涉足了解。其实应用到嵌入式技术的产品已经渗透到我们生活的方方面面。从人们的生活到工业化生产，从银行、医疗到航空航天领域，嵌入式系统无处不在，图1为嵌入式应用领域。

嵌入，深深地固定，镶入的意思。而嵌入式系统，顾名思义就是一个嵌入在其他系统中的系统。IEEE(Institute of Electrical and Electronics Engineers，美国电气和电子工程师协会)对嵌入式系统的定义：“用于控制、监视或者辅助操作机器和设备的装置”。国内普遍认同的嵌入式系统定义为：以应用为中心，以计算机技术为基础，软硬件可裁剪，适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。

个人跟喜欢这样的定义，除了个人电脑(PC)、工作站、大型超大型计算机，其他都可以归为嵌入式，电视，手机，路由器，柜员机(ATM)，汽车导航，行车记录仪，打印机，MP3播放器、摇控器等，都是嵌入式范畴。

图1：嵌入式应用领域

交通管理方面的应用有汽车导航，智能路灯，高清摄像头等；能源方面的应用有智能能电表，远程抄表系统，高压线路监测的无人机等；物流方面的应用有送货的无人机，仓库的运输机器人等；医疗健康方面的应用有电子血压计，电子温度计，电子秤等；嵌入式系统在家居应用实例有冰箱、空调、洗衣机、台灯、计算器、路由器、智能家居系统等。

在网上有很多人提问“嵌入式和单片机(一种微型计算机)有什么区别”，有人说单片机与嵌入式不一样，不属于嵌入式，有人说单片机属于嵌入式。因为嵌入式系统一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统、特定的应用程序组成，而单片机系统没有操作系统只有应用程序，所以单片机不属于嵌入式。在这里不纠结这个问题，我们可以这样理解，嵌入式系统是一个大类，单片机是其中一个重要的子类。下面说简单的图文说明一下嵌入式系统在家居应用实例

1.单片机应用实例-感应灯

如图2所示，一个普通的感应灯，人来即亮，人走即灭。在我们嵌入式开发人员眼里，感应灯主要由“单片机+人体感应模块+LED灯”组成而已，如图3所示，加一个外壳，基本是一个感应灯的小demo。

图2：感应灯(图片来源于网络如有侵权请私信删除)

图3：单片机+人体感应模块+LED灯(图片来源于网络如有侵权请私信删除)

2.单片机应用实例-触控台灯

如图4所示，一个普通的触控台灯，通过触控键控制灯的亮与灭。在我们嵌入式开发人员眼里，触控台灯主要由“单片机+按键触控模块+LED灯”组成而已，如图5所示，加一个外壳，基本是一个触控台灯的小demo。

图4：触控台灯( 图片来源于网络如有侵权请私信删除 )

图5：单片机+按键触控模块+LED灯(图片来源于网络如有侵权请私信删除)

3.单片机应用实例-计算器

如图6所示，一个普通的计算器。在我们嵌入式开发人员眼里，计算器主要由“单片机+按键+LCD显示屏”组成而已，如图7所示，加一个外壳，基本是一个触控台灯的小demo。

图6：计算器( 图片来源于网络如有侵权请私信删除 )

图7：单片机+按键+LCD显示屏( 图片来源于网络如有侵权请私信删除 )

4.嵌入式系统-路由器

如图8所示，一个普通的路由器。与前面三个例子不一样，路由器上面是有操作系统的，操作系统上面运行着应用程序，也就是说，由嵌入式微处理器、外围硬件设备、嵌入式操作系统、特定的应用程序组成。路由器电路板正面，如图9所示。

图8： 路由器

图9： 路由器电路板正面

由于时间关系，列举了部分的嵌入式的应用实例，其实还有很多没有说明， 这篇文章会不断的修改与增加内容，希望对想了解或学习嵌入式的人有帮助。

展开全文
• 嵌入式开发的几个实用的实例及相关论文，对于了解开发流程和考试举例很有用
• 搭配easyarm2200的光盘内容，还有很多啊。这里这是部分内容，。仅仅是软件开发部分，也就是书中的实验例子的程序。光盘上其它的东西都是垃圾的。

...