I'm not perfect, but I'm always myself.

0%

单片机学习笔记1.1

“点亮一颗LED”

新建项目(建立工程)

Step1: Project->New μVersion Project 选择芯片
Step2: ctrl + N -> ctrl + s 保存为.c
Step3: Click Source Group 1-> Add Existing files…..
Step4: Write the code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<reg52.h>

sbit LED = P0^0;
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;

void main()
{
unsigned int i = 0;

ENLED = 0;
ADDR3 = 1;
ADDR2 = 1;
ADDR1 = 1;
ADDR0 = 0;

while(1)
{
LED = 0;
for(i = 0; i<30000;i++);
LED = 1;
for(i = 0; i<30000;i++);
}
}

Step5: 先勾选 Create hex files
再 Rebuild

Step6: Downoad STC-ISP
http://www.stcmcu.com/index.htm

Step7: choose the chip
choose the file
download into the chip

几种不同的延时方法

首先说说单片机最小系统能运行起来的必要条件有三:

1.电源 2.晶振(心脏) 3.复位电路
其中晶振是类似于单片机心脏的一个东西,提供时钟脉冲信号的振荡源的周期,即时钟周期,我所用的stc89c52时钟周期是11.0592MHz,相当于数电中所说的CLK, 作为一个固定的基准,只有在每个上升沿才进行计算,所以利用简单的循环语句,就可以实现延时的功能

  • while语句:

    a=51000;
    p1_1=0;
    while(a--);
  • 借用软件 for语句嵌套,精确计算延时(↓这是800ms延时的子函数):

    void delay800ms(void)   
    {
      unsigned char a,b,c;
      for(c=95;c>0;c--)
          for(b=138;b>0;b--)
              for(a=29;a>0;a--);
      _nop_();  //if Keil,require use intrins.h
      _nop_();  //if Keil,require use intrins.h
    }
    
    

单片机工作的基本时序

机器周期 指令周期

  • 振荡周期: 时钟周期 11.0592MHz 提供时钟脉冲信号的振荡源的周期
  • 状态周期: 振荡周期二分频所得 为时钟周期的两倍
  • 机器周期: 一个机器周期=12个时钟周期
  • 指令周期:完成一条CPU指令所需的全部时间,由1~几个机器周期组成。 单周期指令 双周期指令 四周期指令

流水灯

在实现流水灯时用了一个非常神奇(快速)的方式,Led点阵正好有8个,二进制 1111 1110 对应的就是这八个针脚的电平高低,转化为16进制是0xfe(0x代表十六进制,fe代表1111 1110)。希望实现流水灯的效果,即将低电平位循环左移(led点阵一段共阳,所以低电平驱动)

#include<reg52.h>
#include<intrins.h>
#define uint unsigned int 
#define uchar unsigned char 

uchar temp;  //8bits
void delay(uint);
void main()
{
    temp=0xfe; //1111 1110 
    P2 = temp ;
    while(1)
    {
        temp=_crol_(temp,1);  // 移位
        delay(600);
        P2=temp;
    }
}

void delay(uint z)
{
    uint x,y;
    for(x=100;x>0;x--)
        for(y=z;y>0;y--);

}

其他尝试

这几天还尝试了动态静态数码管、蜂鸣器、超声波测距。。。等但模块,实现方式大同小异,注意点无非是看原理图注意针脚,驱动电平等等等,就不赘述,这些算是最最最基础的入门小问题了,接下来可能要根据你校课程大纲改改学习方向(逃

-------------The End Thanks♪(・ω・)ノ-------------