一.前序:
1.需要安装CH340驱动,没有驱动,单片机通过usb连接电脑就不会识别到;
2.安装KEILC51软件,我理解该软件:一针对个C51芯片的集成开发环境。写C代码,生成该芯片类型的可执行文件,当然也可以调试等。
3.安装程序烧入程序,将上一步生成的.hex软件,烧入单片机中。
4.打开单片机开关,通电,运行我们写的程序。
二.第一个灯代码:
#include "reg52.h"
sbit led=P2^0;
void main()
{
led=0;
while(1)
{
}
}
将这个程序编译(KEIL中叫做build)后生成后缀为.hex的文件,将该文件烧录到单片机中,就可以通电运行了。
分析代码:
//首先打开头文件:reg52.h 看里面写了什么
/*--------------------------------------------------------------------------
REG52.H
Header file for generic 80C52 and 80C32 microcontroller.
Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/
#ifndef __REG52_H__
#define __REG52_H__
/* BYTE Registers */
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;
/*此处省略后面内容,只看上面*/
#endif
C51语言中两个关键字:
sfr :用来访问特殊功能寄存器。什么是特殊功能寄存器:特殊功能寄存器在片内RAM中对应一个字节单元或者两个字节单元,通过访问该寄存器,可以控制单片机的定时器,计数器,串口,IO部件等等。
sbit:用来定义位变量. 写法: sbit 位变量名=位地址;
位地址有两种:直接位地址 / 特殊功能寄存器带位号 或 可位寻址变量带位号(定义时用 ^ 相隔开).
如上代码:sbit led=P2^0; //为变量名位led,地址位P2寄存器的第0位.
GPIO:通用输入输出端口。51单片机的CPIO引脚与外部设备连接起来就可以实现与外部通讯/控制等功能。
1.STC89C516芯片:
引脚:共40个,不同的引脚对应不同功能。其中Px.x就是GPIO引脚,一共4组,每一组8个.
三.跑马灯and闪烁灯
#include "reg52.h"
void delay()
{
int i=500;
for(i;i>0;i--)
{
int j=100;
for(j;j>0;j--);
}
}
/* 竟然不能重载....*/
/*
void delay(unsigned int i)
{
while(i--);
}
*/
sbit led0=P2^0;
sbit led1=P2^1;
sbit led2=P2^2;
sbit led3=P2^3;
sbit led4=P2^4;
sbit led5=P2^5;
sbit led6=P2^6;
sbit led7=P2^7;
void Watering() //跑马灯 依次亮 0~7
{
led0=0;delay();
led1=0;delay();
led2=0;delay();
led3=0;delay();
led4=0;delay();
led5=0;delay();
led6=0;delay();
led7=0;delay();
}
void UpAll() //亮所有灯
{
led0=0;
led1=0;
led2=0;
led3=0;
led4=0;
led5=0;
led6=0;
led7=0;
}
void ClearAll() //灭所有灯
{
led0 = 1;
led1 = 1;
led2 = 1;
led3 = 1;
led4 = 1;
led5 = 1;
led6 = 1;
led7 = 1;
}
void ReverseLed()
{
led0 = ~led0;
led1 = ~led1;
led2 = ~led2;
led3 = ~led3;
led4 = ~led4;
led5 = ~led5;
led6 = ~led6;
led7 = ~led7;
}
void main()
{ unsigned int times=5;
while(times--)
{
UpAll();
delay();
ClearAll();
delay();
}
times=5;
while(times--)
{
Watering();
delay();
ReverseLed();
}
while(1)
{
UpAll();
}
}
很low的一段代码.....