电子技术部第七次培训总结
来源:互联网 发布:报表数据的重要性 编辑:程序博客网 时间:2024/06/04 23:12
☺主要知识点:
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 charvoid 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 charvoid 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_1delay10us(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 charsbit 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