郭天祥的10天学会51单片机_第一节

在这里,把学习视频时的笔记进行记录,在学习视频的过程中,遇到了一些视频中没有讲解到的问题,对于这些问题的解决过程在这里进行记录和总结。

CSDN的对齐格式有点诡异,在编辑器中注释都是对齐的,在CSDN的文章中显示的有一些不能对齐,为了让大家复制粘贴代码的时候能够获得对齐的注释,在这里就对文章中没有对齐的格式不予处理了。

实践第一。

补充必要的理论知识,即缺什么补什么。

做工程项目积累经验。(可在网络上搜集题目,也可自己有什么想法大胆的去试验)

数字电路中只有两种电平:高和低

定义单片机为TTL电平:

                    高 +5V      低 0V

RS232电平:计算机的串口

                               高 -12V (RS232电平高电平为负)    低+12V

所以计算机与单片机之间通讯时需要加电平转换芯片max232(实验板上左下角)。

单片机命名:STC(STC公司)89(系列)C(COMS)52(内部存储空间大小:4K*2=8K)RC

40(所支持的晶振频率是40MHZ)C(商业级,如I是工业级,区别是温度适用范围,还有军品级)-PDIP(封装格式,这里是双列直插式,还有BGA等封装) 

07(07年)21(21周)CV4336

总线(BUS)是计算机各部件之间传送信息的公共通道。微机中有内部总线和外部总线两类。内部总线是CPU内部之间的连线。外部总线是指CPU与其它部件之间的连线。 外部总线有三种: 数据总线DBData  Bus, 地址总线 ABAddress  Bus)和控制总线 CBControl   Bus)。

sfr:特殊功能寄存器声明

sfr16:sfr16位数据声明

sbit:特殊功能位声明

bit:位变量声明

例:sfr SCON = 0X98;

    sfr16 T2 = 0xCC;

sbit OV = PSW^2; PSW^2表示PSW的第二位

C-51的包含的头文件

通常有:reg51.h reg52.h math.h   ctype.h   stdio.h  stdlib.h  absacc.h

常用有:reg51.h reg52.h

      (定义特殊功能寄存器和位寄存器);

       math.h  (定义常用数学运算);

单片机主要掌握以下几点

最小系统能够运行起来的必要条件。

   1.电源 2.晶振3.复位电路

对单片机任意IO口的随意操作

   1.输出控制电平高低2.输入检测电平高低。

定时器:重点掌握最常用的方式2

中断:外部中断、定时器中断、串口中断

串口通信:单片机之间、单片机与计算机间

方法:运用单片机就是控制单片机的IO

TX-1C型单片机实验板原理图中发光二极管是P2,图中由单片机的P1口控制

原理图中标号相同表示物理连接

发光二极管是由排阻组成,八个排阻,左边是高电平,让发光二极管亮阴极(右边)要给低电平,因为排阻上有关单向导通的发光二极管;发光二极管点亮是3mA,左边VCC5伏,右边是低电平是0伏,点亮发光二极管的电压是1.7伏,所以电阻上的压降是5-1.7=3.3伏,

所以电阻的阻值是3.3V/3mA=1.1K

电阻分为上拉电阻、下拉电阻和限流电阻

去耦电容的一个作用是稳压,减缓电压的波动

74HC573是锁存器,锁存器的DIOLA管脚接单片机的26管脚;在TX-1C型单片机实验板原理图中一个锁存器控制发光二极管,另两个控制数码管

在课件74hc573中,见P1的真值表,OEOut Enable输出使能,上面有横线的变量表示低电平有效,D表示输入端,Q表示输出端,当OE低电平时74hc573工作,真值表中L表示低,H表示高,X表示任意(或者高电平或者低电平),Z是数字电路中的高阻态(高阻态是介于高电平和低电平之间的状态,既不是高电平也不是低电平,和其它元器件连接,其它元器件输出高电平时高阻态跟着该元器件变成高电平,反之变成低电平),所以这里让锁存器74hc573工作,给锁存器U3OE低电平,锁存器U3的输入端接单片机的P1口,由单片机的P1口来控制,10管脚是接地,20管脚接电源;LE表示锁存器的锁存端,见真值表,LE为高电平,输入端D是高电平输出是高电平,输入端D是低电平输出是低电平,LE为低电平,D无论什么值,输出         Q都是Q0Q0是上一次输出端Q的值,这里给LEDIOLA高电平;加锁存器是因为锁存器的输入端连接单片机的P1口,而P1口又连接AD0804(模数转换器)的输入端,如果不加锁存器控制发光二极管,当控制AD转换器时会导致发光二极管也亮

51单片机所有IO口上点后默认高电平

使用Keil软件:

打开Keil软件,点击菜单栏上面的Project下面的New Project建立工程,弹出对话框,先新建一个文件夹,再保存工程

然后点击菜单栏上面的File下面的New,新建一个文档,文档的后缀名是“.c”,再在左边面板的工程名下右键选择Add Files to Group Source Group 1’,将该文档加入该工程中即可

编译时点击编译所有文件按钮

生成Hex文件 点击全部编译按钮右边的Option for target按钮,Output栏下的Create HEX File选中打钩,再编译即可

Option for target按钮的Target下面可以调节晶振频率

STC_ISP软件的使用:先选中MCU Type,这里是STC89C52,再Open File打开Hex文件,再选择烧程序的Com口(计算机—>管理—>设备性能下面查询,还可以修改)(我的计算机上是右键我的电脑,选择属性,弹出系统属性对话框,选择硬件页,点击设备管理器,弹出设备管理器对话框,点击端口(COMLPT)的十字符号,可以看见当前使用的串口号,前提是学习板的线已经插到串口上或USB口上),选择Max Buad波特率,然后点击Download下载程序开始,再按单片机上的启动按钮,必须先点击软件的下载然后再打开单片机

位操作点亮发光二极管:
#include<reg52.h>
sbit D1=P1^0;
void main()
{
    D1=0;
}

总线操作点亮发光二极管:
#include<reg52.h>
void main()
{
    P1=0xfd;
}
reg52.h文件定义了很多位寄存器,需要时也可以自己定义头文件,并加进到源文件中


练习:
3.点亮最后一个发光管:
#include<reg52.h>
void main()
{
    P1=0x7f;                //将单片机P1口的8个口由高到低分别赋值为01111111
}

4.点亮1、3、5、7
即10101010,AA
#include<reg52.h>
void main()
{
    P1=0xaa;
}

5.点亮二、四、五、六
即10100011,c5
#include<reg52.h>
void main()
{
    P1=0xc5;
}

6.尝试让第一个发光管闪烁
利用延时程序
#include<reg52.h>
void delay()
{
    int i,j;
    for(i=0;i<100;i++)
        for(j=0;j<100;j++);
}
void main()
{
    while(1)
    {
        P1=0xfe;
        delay();
        P1=0xff;
        delay();
    }
}
方法2:
#include<reg52.h>                  //52单片机头文件
sbit led1=P1^0;                    //单片机管脚位声明
void main()                           //主函数
{
    unsigned int i;             //定义一个int型变量
    while(1)
    {
        i=50000;                   //变量赋初值为50000
        led1=0;                    //点亮灯
        while(i--);             //延时
        i=50000;
        led1=1;                 //熄灭灯
        while(i--);
    }

}

7.尝试设计出流水灯程序
#include<reg52.h>
void delay()
{
    int i,j;
    for(i=0;i<100;i++)
        for(j=0;j<200;j++);
}
void main()
{
    while(1)
    {
        P1=0xfe;
        delay();
        P1=0xfd;
        delay();
        P1=0xfb;
        delay();
        P1=0xf7;
        delay();
        P1=0xef;
        delay();
        P1=0xdf;
        delay();
        P1=0xbf;
        delay();
        P1=0x7f;
        delay();
    }
}
方法2:
#include<reg52.h>              //52单片机头文件

void main()                       //主函数
{
    unsigned int i;         //定义一个int型变量
    while(1)
    {
        i=50000;            //变量赋初值为50000
        P1=0xfe;            //点亮第一个灯
        while(i--);         //延时
        i=50000;            //变量赋初值为50000
        P1=0xfd;            //点亮第二个灯
        while(i--);         //延时
        i=50000;            //变量赋初值为50000
        P1=0xfb;            //点亮第三个灯
        while(i--);         //延时
        i=50000;            //变量赋初值为50000
        P1=0xf7;            //点亮第四个灯
        while(i--);         //延时
        i=50000;            //变量赋初值为50000
        P1=0xef;            //点亮第五个灯
        while(i--);         //延时
        i=50000;            //变量赋初值为50000
        P1=0xdf;            //点亮第六个灯
        while(i--);         //延时
        i=50000;            //变量赋初值为50000
        P1=0xbf;            //点亮第七个灯
        while(i--);         //延时
        i=50000;            //变量赋初值为50000
        P1=0x7f;            //点亮第八个灯
        while(i--);         //延时
    }
}

 

  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值