您的位置:首页 > 其它

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

2017-12-25 08:02 183 查看
☺主要知识点:

    1.Led灯循环亮灭

    2.Led灯亮度调节

    3.数码管显示

1.LED灯循环亮灭






  ①添加头文件<intrins.h>

  ②左移函数:

     ⑴

     函数原型:

   
4000
  _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,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  电子 技术