51单片机学习随笔(2)

来源:互联网 发布:饮食通软件 编辑:程序博客网 时间:2024/05/17 02:21

3.单片机最小系统组成

单片机+电源+晶振+复位电路

4.机器周期(运行速度)

时钟周期,一般也称振荡周期(如果晶振的输出没有经过分频就直接作为cpu的工作时钟,则时钟周期就等于振荡周期),即CPU的晶振的工作频率的倒数,是计算机中最基本的、最小的时间单位。对于单片机来说,时钟周期是单片机的基本时间单位。

机器周期是指CPU完成一个独立操作所需要的时间,12个时钟周期是一个机器周期。

对于11.0592M的晶振来说,一个机器周期为:1/11.0592*12≈1.085um。

5.点亮led流水灯

点亮led流水灯是学习使用51单片机的第一步,也是大多数人学习51单片机收获的第一份成就感吧。

LED灯实际上就是发光二极管的简称,普通发光二极管的工作电压一般是1.6v~2.1v,阻值为150Ω~3000Ω。

这是我的学习板上led灯模块的原理图:


这8个LED灯对应主控芯片上P10~P17这8个引脚,是共阳极接法,低电平点亮,点亮方法常用有两种:

①用特殊功能位声明,例如声明led1:sbit led1 = P0^1,则led1 = 0便是亮,led1 = 1便是灭;

②用寄存器P0直接控制8个led流水灯,P0由两个十六进制数表示对应8个二进制数这八个二进制数由高到低对应led8~led1,所以可以通过给P0赋值来控制led灯

如 P0 = 0xff就是全灭,P0 = 0x00就是全亮

可以通过for函数一类控制依次亮灭设计成成跑马灯,例如:

#include <reg52.h>#include <intrins.h>unsigned int a;unsigned int b;unsigned int c;void main(){     c = 0xfe; P1 = c; a=10000; while(a--);    while(1){              for(b=0;b<8;b++)        {    c = _crol_(c,1);if(c!=0xfe){ P1 = c; a=10000; while(a--); }   }    for(b=0;b<8;b++)        {    c = _cror_(c,1); P1 = c; a=10000; while(a--);  } }}

6.使用led数码管显示

单片机系统中常用的显示器有:
        发光二极管LED(Light Emitting Diode)显示器、液晶LCD(Liquid Crystal Display)显示器、CRT显示器等。LED、LCD显示器有两种显示结构:段显示(7段、米字型等)和点阵显示(5×8、8×8点阵等)。

LED显示器工作方式有两种:

①静态显示方式和动态显示方式。静态显示的特点是每个数码管必须接一个8位锁存器用来锁存待显示的字形码。送入一次字形码显示字形一直保持,直到送入新字形码为止。这种方法的优点是占用CPU时间少,显示便于监测和控制。缺点是硬件电路比较复杂,成本较高。

②动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。这样一来,就没有必要每一位数码管配一个锁存器,从而大大地简化了硬件电路。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。 

我的学习板上的led数码管模块原理图为:

这是四位共阳极数码管四个位选端对应P20~P23,每位数码管由a、b、c、d、e、f、g、h8个led灯组成通过P0^0~P0^7等8个引脚控制

控制方法为先选位选端,然后通过P0控制显示的数字,例如让第一位显示6:

#include<reg52.h>sbit we1 = P2^0;void main(){   while(1){   we1 = 0;   P0 = 0x82;   while(100--);   we1 = 1;}}



原创粉丝点击