查看: 1434|回复: 0
打印 上一主题 下一主题

单片机入门从这开始

[复制链接]
跳转到指定楼层
沙发
发表于 2014-12-1 13:18:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
            单片机入门从这开始
   初学者对于单片机怎么样快速入门呢?其实我也是过来人,很理解初学者学习单片机的难处,接下来我从以下几个方面彻底让你明白啥是单片机怎么样才能编好最基本的流水灯,再次提出一点,学习单片机不能死记硬背,要深入了解弄明白每一个知识点掌握它这样才行,还有就是单片机是硬件和软件结合的东西,光说不练也是不行的,最好就是有一台电脑再弄一块板子,自己编一个程序输入到单片机里查看一下它的状态,程序错误是很正常的,我想大师在做一个程序的时候也不可能一遍就成功的,也需要多次的修改和测试,才能弄出一个好的程序,所以不要看低自己。
  废话不多说了,咱们直接步入主题吧!你们知道吗为啥单片机要加头文件吗?就是#include <reg52.h>当然你如果不加也可以,不加的话就需要定义一次用一次,以下的这些程序就是单片机头文件里包含的一些文件,看不懂没关系,你们看到了吧头文件里包含了这么多程序,你如果不使用头文件的话你就要写很多的程序去定义那些端口所以很费劲的,这就是单片机为啥加头文件的原因
#ifndef __REG51_H__
#define __REG51_H__
/*  BYTE Register  */
sfr P0   = 0x80;
sfr P1   = 0x90;
sfr P2   = 0xA0;
sfr P3   = 0xB0;
sfr PSW  = 0xD0;
sfr ACC  = 0xE0;
sfr B    = 0xF0;
sfr SP   = 0x81;
sfr DPL  = 0x82;
sfr DPH  = 0x83;
sfr PCON = 0x87;
sfr TCON = 0x88;
sfr TMOD = 0x89;
sfr TL0  = 0x8A;
sfr TL1  = 0x8B;
sfr TH0  = 0x8C;
sfr TH1  = 0x8D;
sfr IE   = 0xA8;
sfr IP   = 0xB8;
sfr SCON = 0x98;
sfr SBUF = 0x99;
/*  BIT Register  */
/*  PSW   */
sbit CY   = 0xD7;
sbit AC   = 0xD6;
sbit F0   = 0xD5;
sbit RS1  = 0xD4;
sbit RS0  = 0xD3;
sbit OV   = 0xD2;
sbit P    = 0xD0;
/*  TCON  */
sbit TF1  = 0x8F;
sbit TR1  = 0x8E;
sbit TF0  = 0x8D;
sbit TR0  = 0x8C;
sbit IE1  = 0x8B;
sbit IT1  = 0x8A;
sbit IE0  = 0x89;
sbit IT0  = 0x88;
/*  IE   */
sbit EA   = 0xAF;
sbit ES   = 0xAC;
sbit ET1  = 0xAB;
sbit EX1  = 0xAA;
sbit ET0  = 0xA9;
sbit EX0  = 0xA8;
/*  IP   */
sbit PS   = 0xBC;
sbit PT1  = 0xBB;
sbit PX1  = 0xBA;
sbit PT0  = 0xB9;
sbit PX0  = 0xB8;
/*  P3  */
sbit RD   = 0xB7;
sbit WR   = 0xB6;
sbit T1   = 0xB5;
sbit T0   = 0xB4;
sbit INT1 = 0xB3;
sbit INT0 = 0xB2;
sbit TXD  = 0xB1;
sbit RXD  = 0xB0;
/*  SCON  */
sbit SM0  = 0x9F;
sbit SM1  = 0x9E;
sbit SM2  = 0x9D;
sbit REN  = 0x9C;
sbit TB8  = 0x9B;
sbit RB8  = 0x9A;
sbit TI   = 0x99;
sbit RI   = 0x98;
  单片机89C5152535455各代表什么含义你们知道吗?51就是把1拿出来乘以4=4k代表的是内部存储量空间为4k52就是把2拿出来乘以4=8k等。。。。。。可以看出来数字越大占得空间就越大就越贵。
   接下来咱们就来一次实战编程吧!从最简单的开始,首先我要有一个想法也就是思路这样才能开始,我想让P0口的第一个灯亮怎么办呢?首先咱们要了解单片机上电以后默认都是高电平,你想让某一个灯亮就要定义某一个端口为低点平就是0,所以这一点你一定要明白。
程序一:
#include <reg52.h>         //定义头文件
void main()                    //主函数开始处
{
        P0=0xfe;           //定义P0口的最低位亮
}
这就是点亮一个灯的程序,就这么简单所以程序要从最简单的开始,逐渐树立自己的自信心。还有一点就是千万不要抄袭别人的程序,要自己动脑子想如果光靠别人的程序的话就会产生依赖感,以后遇到不会的问题就不会解决了。
程序二:
/* 于豪20141123号流水灯闪烁程序*/
#include <reg51.h>                                // 定义头文件
unsigned char a = 0xfe ;           //定义字母a为无符号整形并且赋值
void delay()                                  //延时程序 ,延时程序基本的格式背过就行
{
        unsigned int i, j ;
        for (i=0; i<400; i++)
        for (j=0; j<400; j++)
        ;
                                
}
void main (void)                           //主函数开始处
{
        unsigned char i;
        while(1)                                  //大循环
        {
                  
                for(i=0;i<8;i++)           //要亮八个灯所以要小于8
                {       
                        P3=a;                          //赋值,把前面a=0xfe赋值给P3口,这个P3代表所有的口
                    a=a<<1;
                    delay();                  //延时一段时间
                    }
                a=0xfe;                                 //初始化
        }
}
为啥要初始化呢?在这里初始化很重要,因为你的程序是要逐个累加点亮,程序默认一直左移移出着八位以后它还要继续往左移,无限往左,不初始化导致这些灯一直亮了,初始化就能重新从右边又开始往左循环了。
  不愿意写了太费劲比讲东西难多了,希望大家都能学好单片机。                                                                                       谢谢2014121

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

快速回复 返回顶部 返回列表