精华内容
下载资源
问答
  • 单片机项目实例 - 嵌入式开发 - 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;
    
    
    更多相关内容
  • 嵌入式开发实例

    2018-04-20 11:26:03
    嵌入式linux应用程序开发标准教程(第二版) 课堂实例
  • ARM嵌入式开发实例1-2.pptx
  • arm嵌入式开发实例

    2014-03-30 13:34:05
    多种嵌入式案例:家居控制器,控制器项目,生物识别项目等
  • 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的应用胥静是一个很好的嵌入式教程啊
  • 嵌入式开发详解

    2018-06-10 12:36:13
    计算机专业人员书库《嵌入式开发详解》高清版。 前两三页存在一些文字错乱,但目录和正文部分均正常,
  • 嵌入式开发实例PPT

    2014-08-28 10:51:45
    嵌入式开发实例,学习嵌入式必备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播放器、摇控器等,都是嵌入式范畴。

    5a58bf7c05aa

    图1:嵌入式应用领域

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

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

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

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

    5a58bf7c05aa

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

    5a58bf7c05aa

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

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

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

    5a58bf7c05aa

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

    5a58bf7c05aa

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

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

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

    5a58bf7c05aa

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

    5a58bf7c05aa

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

    4.嵌入式系统-路由器

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

    5a58bf7c05aa

    图8: 路由器

    5a58bf7c05aa

    图9: 路由器电路板正面

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

    展开全文
  • 嵌入式开发的几个实用的实例及相关论文,对于了解开发流程和考试举例很有用
  • ARM嵌入式开发实例

    2009-07-25 13:50:24
    搭配easyarm2200的光盘内容,还有很多啊。这里这是部分内容,。仅仅是软件开发部分,也就是书中的实验例子的程序。光盘上其它的东西都是垃圾的。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 57,066
精华内容 22,826
关键字:

嵌入式开发实例