粤嵌学习笔记(二)

回顾昨天教的内容:
    完成了keil5软件安装、破解,
    
    学习如何创建一个新的工程、烧录,
    
    学习单片机的基本原理,如何去使用我们的单片机外设
    
    完成了流水灯程序
    

1、规范使用我们的单片机开发板
    
    (1)、给单片机通电之后,
                不要用手触摸引脚
        
    (2)、芯片不能装反
    
    (3)、先关闭单片机电源,再撤掉数据线
    

2、LED流水灯


/*------------------按键 ---------------------*/

我们51单片机。一共是配置有4个独立的按键

    
        key1  ===》 P3^3
        key2  ===》 P3^4
        key3  ===》 P3^6
        key4  ===》 P3^7
        
        sbit key1 = P3^3;
        if(key1 == 0)
        {
            执行语句1;
        }
        else
        {
            ````````;
        }
    
    练习:
        编写一个按键控制LED灯的函数;
            测试没有小抖动的程序与消除抖动之间的区别。

/*-------------------模块化编程----------------*/

1、对工程进行模块化划分
    一个模块一个.c
        一个.c 对应一个 .h
    
    在.c 文件中 , 一个功能一个函数
    
    在*.c文件中,如果需要需要用到其他模块的函数
        怎么办?
            #include "****.h"
            去包含
    
    在.c文件中 , 每一个函数, 我们需要对它进行功能注释, 方便以后进行复习回顾
    
    
    

    练习:
        把我们的工程进行模块化
        
        
    全局变量 、 局部变量
    
    int a ;
    
    void sum()
    {
        int b = 1 , c = 2;
        a = b + c;
    }
    
    void chu()
    {
        int b = 2 , c = 1;
        a = b / c;
    }

    main()
    {
        sum();
        chu();
    }

/---------* 蜂鸣器 * ------- /
蜂鸣器:
    蜂鸣器电路:
        使用的PNP型三极管 驱动蜂鸣器 , 当P0^7为低电平时,PN结
        正向偏置,三极管导通,蜂鸣器发出声音:
        
        sbit beep = P0^7;

        练习:
            通过按键,操作我们的蜂鸣器


========================================================
/---------------------中断------------------------/

1、问题的引入
        while(1)
        {
            if( 0 == key1 )
                ;
            
            if( 0 == key2 )
                ;
        }
        
        上面这种检测按键是否按下的方式:
            称之为    “轮询”
            
    
2、轮询
    轮流的询问 , (相当于 CPU 一直询问按键 1 与 按键 2 , 是否按下)
    显然 , 轮询去判断按键 ,有什么缺点?
        
        (1)、 占用CPU
        (2)、 轮询存在时间差

    
    我们这里用的方式是一直在等待 , 那么有没有一种方法 , 不用去登 , 
    而是当有按键按下或者弹起的时候 , 来通知 “我”
    
    
==》》 中断系统
    

1、什么是中断?
        
        我们一般把打断CPU执行顺序的事件 , 称之为中断 ,
        
        C51中断原理
            当特定的中断产生时 , CPU会立即切换到中断模式
            打断我们main函数的执行 , 到指定的地址去执行中断处理函数。
            
        
        例子:
            看综艺
            玩游戏、打电话
        


    中断源:
        产生中断事件的设备
        
        C51中 支持 5 个中断
            
            外部中断0         P3^2
            定时器0中断
            外部中断1        P3^3
            定时器1中断
            串口中断
            
    那么当中断产生之后 , 我们如何知道是哪一个中断呢?我们该去哪里找

    CPU如何知道是哪一个中断:
        
        中断向量表
            
            不同的中断 , 对应的不同的入口地址
         

编号中断源:入口地址
0外部中断00003H
1定时器0中断 000BH
2外部中断10013H
3定时器1中断 001BH
4串口中断 0023H


            

 

 

 

 


            
        编号才编程当中最需要用到的
        所以请多看、多记编号
        
        

C51中断的配置
            外部中断0 、 1:
                
                触发方式:
                    低电平触发:        IT0 = 0      IT1 = 0
                    下降沿触发:        IT0 = 1         IT1 = 1
                    
                
                中断开关:
                    EX0  ->  外部中断 0
                    EX1  ->  外部中断 1
                            使能外部中断  EX0  EX1  , 置 1
                
                中断总开关
                
                    EA = 1
                
        
        C语言如何去编写我们的中断系统函数
        
        
        1、中断初始化
        
        2、编写中断服务函数
        
        
        
        
        练习:    
            通过外部按键中断 ,去打断我们main执行的流水灯 ,
                中断服务函数(另一种花样的流水灯程序)
                
        
        伪代码:
        
    
                /*-----------中断初始化函数---------------*/
            
            void  interrupt_init()
            {
                //配置外部中断1 , 低电平触发:
                //使能外部中断1
                //开启中断总允许
            }


            /*------------中断服务函数---------------*/
            void  interrupt(void)  interrupt  编号
            {
                //用户自由编写
            }

 

实例

#include"interrupt.h"
#include"led.h"
#include"key.h"
#include<reg52.h>



	/*-----------中断初始化函数---------------*/
			
			void  interrupt_init()
			{
				IT1 = 0;   //配置外部中断1,低电平触发
				EX1 = 1;   //使能外部中断1
				EA  = 1;   //开启中断总允许
			}


			/*------------中断服务函数---------------*/
			void  interrupt_IT1(void)  interrupt 2
			{
				led_huayang();
			}


        
/*-------------数码管-------------*/

数码管:
    准备来说,是LED数码管
        
        是由多个发光二极管封装在一起组成“8”字型的器件
        
        对应的LED引脚已经在内部连接成功,总共8个LED
        
        分别对应的字母为
        
            a , b , c ,d , e , f , g ,dp

        
        例如:
            显示数字 “2”
            
            a亮,b亮,c灭 , d亮 ,e亮 ,f灭 ,g亮 ,dp亮
            
            0010 0100        ==》    0x24
            我们16进制对应的二进制表达式:
                低字节是在右边
                    所以我们的寄存器P0组的P0^0对应的
                    是最右边的比特
                        
                        所以需要从右开始依次对P0组进行改写


                    
                    
                        0010 0100
                                    0x24
                        进行寄存器整体赋值
            
            P0 = 0x24;
            
            在点亮我们的数码管之前:
                要开启相应的位选 , 也就是开关
                
                是的我们的a~dp把条引线去作用于对应的数码管

位选代码

#include"shumaguan.h"
#include"delay.h"
#include<reg52.h>

sbit w1 = P1^0;
sbit w2 = P1^1;
sbit w3 = P1^2;
sbit w4 = P1^3;

void show_0718(){
	w4 = 0;
	P0 = 0xc0;
	delay_ms(1);
	w4 = 1;
	
	w3 = 0;
	P0 = 0xf8;
	delay_ms(1);
	w3 = 1;
	
	w2 = 0;
	P0 = 0xf9;
	delay_ms(1);
	w2 = 1;
	
	w1 = 0;
	P0 = 0x7f;
	delay_ms(1);
	w1 = 1;
}
	


    
    
总结今天讲的内容:
    
    蜂鸣器、按键 、模块化编程、数码管 、中断 
    
    1、外部按键中断实现所有的数码管依次从0显示到9
        
        中断用外部中断1 , 下降沿触发的方式
        
        (用到延时函数)

交.c文件
    
    
  
        
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

    
    

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
很高兴回答你关于野火嵌入式Linux学习的问题!以下是一些学习笔记的建议: 1. 了解嵌入式系统:首先,你需要了解嵌入式系统是什么以及它们与桌面操作系统的区别。嵌入式系统通常用于特定的应用领域,例如智能家居、汽车电子和工业控制等。 2. 学习Linux基础知识:野火嵌入式Linux是基于Linux内核的操作系统,所以你需要掌握Linux的基础知识,包括文件系统、进程管理、设备驱动程序等。 3. 硬件平台了解:野火嵌入式Linux有不同的硬件平台,例如野火开发板。你需要学习如何操作和配置这些硬件平台,并了解它们的特性和限制。 4. 交叉编译环境设置:为了在PC上开发嵌入式系统,你需要设置一个交叉编译环境,以便能够编译和调试嵌入式应用程序。这涉及到安装和配置交叉编译工具链。 5. 内核定制和驱动程序开发:学习如何定制Linux内核以满足特定需求,并开发设备驱动程序以支持外部硬件。 6. 应用程序开发:掌握嵌入式应用程序的开发技术,包括使用C/C++语言、Makefile和调试工具。 7. 调试和故障排除:学会使用调试工具和技术来定位和解决嵌入式系统中的问题。 8. 实际项目经验:通过参与实际的嵌入式项目或完成一些小型项目来应用你的知识和技能。 这些只是一些学习笔记的建议,野火嵌入式Linux学习需要不断的实践和探索。希望这些对你有帮助!如果你有任何进一步的问题,欢迎继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

香自寒来

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值