在下载程序前先确认下开发板上的 USB 转 TTL 串口模块上的 J39 和 J44 端子短接片是否短接好(即 P31T 与 URXD 连接,P30R 与 UTXD 连接)
STC89Cxx 芯片介绍我国芯片技术的快速发展,宏晶公司推出的增强型 51 单片机STC89Cxx/STC90Cxx 等系列更受大众喜爱,除内部资源及功能大大增强外,还有一个非常重要的是它支持 ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器或专用仿真器。宏晶公司推出的 51 芯片种类非常多,我们只需选择一款经典的学习即可
单片机是一种数字集成芯片,数字电路中只有两种电平:高电平和低电平
我们暂时定义单片机输出与输入为 TTL 电平,其中高电平为+5V,低电平为 0V。计算机的串口为 RS232 电平,其中高电平为-12V,低电平为+12V。这里强调的是,RS232C 电平为负逻辑电平,大家不要认为上面是我写错了。因此当计算机与单片机之间要通信时, 需要依靠电平转换芯片,比如 MAX232 电平转换芯片。
TTL 电路和 CMOS 电路的逻辑电平关系如下:
①VOH:逻辑电平 1 的输出电压。
②VOL:逻辑电平 0 的输出电压。
③VIH:逻辑电平 1 的输入电压。
④VIL:逻辑电平 0 的输入电压。
TTL 电平临界值:
①VOHmin=2.4V,VOLmax=0.4V。
②VIHmin=2.0V,VILmax=0.8V。
CMOS 电平临界值(假设电源电压为+5V):
①VOHmin=4.99V,VOLmax=0.01V。
②VIHmin=3.5V,VILmax=1.5V。
TTL 和 CMOS 的逻辑电平转换:CMOS 电平能驱动 TTL 电平,但 TTL 电平不能驱动 CMOS 电平,需加上拉电阻。
与”运算是实现“必须都有,否则就没有”这种逻辑关系的一种运算。C 语言中运算符为“&”,其运算规则如下:0&0=0,0&1=0(1&0=0),1&1=1。
C 语言中“&&”表示“按位与”运算,意思是变量之间按二进制位数对应关系一一进行“与”运算。如(0101 0101)&&(1010 1010)=0000 0000,而上面讲到的“&”运算只是对单一位进行运算
或”运算是实现“只要其中之一有就有”这种逻辑关系的一种运算。C 语言中运算符为“|”,其运算规则如下:0|0=0,0|1=1(1|0=1),1|1=1。
C 语言中“||”表示“按位或”运算,意思是变量之间按二进制位数对应关系一一进行“或”运算。如(0101 0101)||(1010 1010)=1111 1111,而上面讲到的“|”运算只是对单一位进行运算
非”运算是实现“求反”这种逻辑关系的一种运算。C 语言中运算符为“!”,其运算规则如下:!0=1,!1=0
C 语言中“”表示“按位取反”运算。如~0101 0101=1010 1010,而上面讲到的“!”运算只是对单一位进行运算。
C 语言数据类型:
单片机的 C 语言中常用的基本数据类型如下
大家在 C 语言的书籍上还能看到有 short int,long int,signed short int 等数据类型,在单片机的 C 语言中我们默认的规则如下:short int 即为 int, long int 即为 long,前面若无 unsigned 符号则一律认为是 signed 型。
C51 扩充数据类型
在 C51 中,为了增加程序的可读性,允许用户为系统固有的数据类型说明符用 typedef 起别名,格式如下
typedef c51 固有数据类型说明符 别名
GPIO概念
GPIO(general purpose intput output)是通用输入输出端口的简称,可以通过软件来控制其输入和输出。51 单片机芯片的 GPIO 引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。不过 GPIO 最简单的应用还属点亮 LED 灯了,只需通过软件控制 GPIO 输出高低电平即可。当然 GPIO 还可以作为输入控制,比如在引脚上接入一个按键,通过电平的高低判断按键是否按下。
Led简介
LED 即发光二极管。它具有单向导电性,通过 5mA 左右电流即可发光,电流越大,其亮度越强,但若电流过大,会烧毁二极管,一般我们控制在 3 mA-20mA 之间,通常我们会在 LED 管脚上串联一个电阻,目的就是为了限制通过发光二极管的电流不要太大,因此这些电阻又可以称为“限流电阻”。当发光二极管发光时,测量它两端电压约为 1.7V,这个电压又叫做发光二极管的“导通压降发光二极管正极又称阳极,负极又称阴极,电流只能从阳极流向阴极。直插式发光二极管长脚为阳极,短脚为阴极。仔细观察贴片式发光二极管正面的一端有彩色标记,通常有标记的一端为阴极。
查看开发板上的电路设计
分析
中 LED 采用共阳接法,即所有 LED 阳极管脚接电源 VCC,阴极管脚通过一个 470 欧的限流电阻接到J19以及J18端子上,要让 LED 发光即对应的阴极管脚应该为低电平,若为高电平则熄灭。
代码
#include "reg52.h"
sbit LED1 = P2^0;
void main(){
LED1 = 0;
}
接线
说明:
我们在代码中使用的是p20针脚,说以我们只能接p20针脚,然后我们的LED灯可以接J19j18任意的针脚,接哪哪亮,因为led都是共阳极嘛!
代码解析
简单不解析了
如果要实现 LED 闪烁,只需循环让 D1 指示灯先亮一会后熄灭。
#include "reg52.h"
// 对系统默认数据类型进行重命名
typedef unsigned int u16;
sbit LED1 = P2^0;
void delay(u16 ten){
while(ten--);
}
void main(){
while(1){
LED1 = 0;
delay(5000);
LED1 = 1;
delay(5000);
}
}
接线和上一个一实验室一样的不需要变化,将程序烧录进去我们直接看效果:
代码解析
与上个实验相比,我们增加了一个延时函数,我们就说一下这个延时函数,这个函数无非就是进入了一个while循环,来占用cpu,就是让cpu一直在个while循环内一直循环ten次,这样就起到了延时的作用,还有一个问题就是我们看到这个ten是一个u16类型,u16是个什么类型呢?其实这个u16不是 C 语言数据类型关键字,这是我们重定义的数据类型使用关键字 typedef 对系统默认数据类型 unsigned int 和 unsigned char 重新命名,主要是方便我们代码的书写和变量类型的查看。u16 即代表该变量是16 位的无符号整型数据,u8 代表该变量是 8 位的无符号字符型数据。