电子技术部第七次培训总结

☺主要知识点:

    1.Led灯循环亮灭

    2.Led灯亮度调节

    3.数码管显示


1.LED灯循环亮灭


  ①添加头文件<intrins.h>

  ②左移函数:

    

     函数原型:

     _crol_(a,b);

          

       运算规则

        将二进制位的操作数按指定移动的位数向左移动,高位移出(舍弃),低位的空位补零。   

       

        语法格式:

        需要移位的数字 <<移位的次数

        a <<b;

  ③右移函数:

        ⑴

        函数原型:

        _cror_(a,b);

        ⑵

        运算规则:

        将二进制位的操作数按指定位数向右移动,移出位被丢弃,左边移出的空位或者一律补0,或者补符号位(无符号型补0

        ⑶

        语法格式:

        需要移位的数字>>移位的次数

        a>>b;

  ④程序实现:
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int 
#define uchar unsigned char

void delay10ms(uint d)   //延迟函数  延迟时间为 d*10ms
{
    uchar i=0,a,b,c;
     for(;i<d;i++)
	for(c=1;c>0;c--)
           for(b=38;b>0;b--)
              for(a=130;a>0;a--);
}

void led()
{	
        uint a=0;
	a=0x00;  
	P0=a;  //令共阴极发光二极管初始化全灭
	a=0x01;//点亮一盏发光二极管
	while(1)
	{
 	a=_crol_(a,1); //每次左移一位
	P0=a;	
	delay10ms(100); //持续亮1s
	}	
}

void main()
{	
 	led();
}
2.调节亮度:

  1.通过调节供电时间,来改变平均电压的大小,从而改变led小灯亮度或者蜂鸣器音量。

   本节课使用单片机小精灵来控制delay时间.

  2.程序实现:

#include<reg51.h>
#include<intrins.h>
#define uint unsigned int 
#define uchar unsigned char

void delay10ms(uint d)   //延迟函数  延迟时间为 d*10ms
{
    uchar i=0,a,b,c;
     for(;i<d;i++)
	for(c=1;c>0;c--)
           for(b=38;b>0;b--)
              for(a=130;a>0;a--);
}

void delay10us(uint d)   //延迟函数  延迟时间为 d*10us
{
    unsigned char i =0,a,b;
	for(;i<d;i++)
	{
    for(b=1;b>0;b--)
        for(a=2;a>0;a--);
	}
}

void led_2()
{	
        uint time;
 	P0=0x00;  //发光二极管初始化全灭
	while(1)
	{
	LED_2=1;  //点亮LED_2小灯
	LED_1=1;  //点亮LED_1小灯
	delay10us(10);
	LED_1=0;  //100us之后熄灭LED_1

	delay10us(time);
	time++;
	if(time>200)
		time=0;
	}	
}
void main()
{	
 	led_2();
}
3.数码管的使用:

    ① .LED数码管(LED Segment Displays)是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。LED数码管常用段数一般为7段有的另加一个小数点。位数有半位,1,2,3,4,5,6,8,10位等等....,LED数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。

    ②.  通过对数码管上八个发光二极管的搭配点亮,来实现对所需数字的显示,是数码管的直接使用方法。

    ③锁存器(Latch)是一种对脉冲电平敏感的存储单元电路,它们可以在特定输入脉冲电平作用下改变状态。锁存,就是把信号暂存以维持某种电平状态。锁存器的最主要作用是缓存,其次完成高速的控制器与慢速的外设的不同步问题,再其次是解决驱动的问题,最后是解决一个I/O口既能输出也能输入的问题。锁存器是利用电平控制数据的输入,它包括不带使能控制的锁存器和带使能控制的锁存器。所谓锁存器,就是输出端的状态不会随输入端的状态变化而变化,仅在有锁存信号时输入的状态被保存到输出,直到下一个锁存信号到来时才改变。

   ④138译码器,通过对三位输入端的电平不同搭配,来实现138译码器不同输出电平效果,从而实现对单片机上某一个数码管的使用的选择,例如138译码器三位输入端为'0 0 0',则对应的输出端为'11111110',从而导通第一个数码管的电路。

   ⑤动态显示原理:通过分时轮流控制各个数码管的的COM,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为12ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低


  ⑥程序实现:

#include<reg51.h>
#include<intrins.h>
#define uint unsigned int 
#define uchar unsigned char
sbit C138=P2^4;
sbit B138=P2^3;
sbit A138=P2^2;
uchar code table[]={0x3f,0x06,0x5b,
0x4f,0x66,0x6D,0x7D,0x07,0x7f,0x6f};

void delay1ms(void)   //延迟函数  延迟时间为 1ms
{
    unsigned char a,b,c;
    for(c=1;c>0;c--)
        for(b=142;b>0;b--)
            for(a=2;a>0;a--);
}

void delay10ms(uint d)   //延迟函数  延迟时间为 d*10ms
{
    uchar i=0,a,b,c;
     for(;i<d;i++)
	for(c=1;c>0;c--)
           for(b=38;b>0;b--)
              for(a=130;a>0;a--);
}

void delay10us(uint d)   //延迟函数  延迟时间为 d*10us
{
    unsigned char i =0,a,b;
	for(;i<d;i++)
	{
    for(b=1;b>0;b--)
        for(a=2;a>0;a--);
	}
}

void number_led()
{
 //先选择138译码器输出电平搭配
       C138=0;  
	B138=0;
	A138=0;
  //再选择数码管所需显示的字符     
       P0=table[0];
  //间隔1ms,小于人眼暂留时间
       delay1ms();

	C138=0;
	B138=0;
	A138=1;
	P0=table[1];
	delay1ms();

	C138=0;
	B138=1;
	A138=0;
	P0=table[2];
	delay1ms();

	C138=0;
	B138=1;
	A138=1;
	P0=table[3];
	delay1ms();
}

void main()
{	 while(1)
	{
 	number_led();
	}
}

FROM ESTA





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值