预备知识:
1.电平特性
2.二进制B十六进制H
3.单片机名称含义
例子: STC89C52RC (STC:生产厂家 ,89:单片机系列, C:单片机内部为Cmos器件, 52:2代表ROM大小52ROM为2X4K)
40I-PDIP40 (40:此单片机最大晶振频率为40MHZ,I:工业级单片机(C:商业级单片机)两者区别在于温度不同,PDIP:封装形式为双列直插式。)
2051H21R86.X90C (2051:20年第51周生产 H21.....:含义不明不重要)
4.80C51的引脚封装
5.80C51内部结构
6.C-51知识
1.数据类型扩充定义
sfr SCON = OX98;//声明一个特殊功能寄存器SCON其地址为OX95.
sbit OV = PSW^2;//声明一个位操作OV其为寄存器PSW的第二位.
2.C-51运算符
7.天翔电子实验板模块注释图![](https://i-blog.csdnimg.cn/blog_migrate/59524b1f1653effbea4979c4acedda20.png)
8.74HC573锁存器芯片
接口信息:
E:启动端
L:锁存端
真值表:
Q0:Q端值不受D端变化为变化,Q端输出值一直保持为L端为1时所输出的值。
Z:高阻态(介于0与1间的电压值)。
9.REG52.h头文件
该头文件将单片机与编译器连接!(自己可以在在该头文件中进行定义)
LED0,LED1都亮
10.80C51中断系统
终端序号:
外部中断0:0
定时/计数器0:1
外部中断1:2
定时/计数器1:3
串行口:4
实现一个简单的中断:
代码:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
void delay(uint z);
sbit wela=P2^7;
sbit dula=P2^6;
sbit d1=P1^1;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};//CODE将数组数据放入ROM中
void main()
{
uint j;
EA=1;//开启中断
EX0=1;//开启外部中断0
IT0=0;//设置外部中断0触发方式为低电平触发
wela=1;
P0=0xea;
wela=0;//锁存段选择
dula=1;
while(1)
{
for(j=0;j<16;j++)
{
P0=table[j];
delay(1000);
}
}
}
void zd0() interrupt 0//中断程序,外部中断序号为0
{
P0=0x3f;
d1=0;
}
void delay(int z)//延时程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=z;y>0;y--);
}
11.80C51定时器
设置计数初值的方法:
X为计数初值,N为计数值,采用方式1十六位计数器则
TH0=(65536-X)/256;
TL0=(65536-X)%256;
定时器案例:在P1.0端口输出一个周期为4s的方波
代码:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uint j;//定义全局变量
sbit D1=P1^0;
void main()
{
j=0;
D1=0;
TMOD=0x10;//设置定时器选项,GATE0=0
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;//设置初值
EA=1;//中断允许位
ET1=1;//定时器1中断允许位
TR1=1;//开始计数
while(1)
{
if (j==40)
{
j=0;
D1=!D1;
}
}
}
void zd0() interrupt 3//定时器1序号为3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
j++;
}
点亮发光管
1)点亮一个发光管
注意:51单片机上电后所以端口都为1!
位操作点灯程序:
#include<reg52.h>//52包含的头文件
sbit D1=P1^0;//位操作
void main()
{
D1=0;
}
总线操作点灯程序:
#include<reg52.h>
void main()
{
P1=0Xfe;
}
2)循环点亮发光二极管
需要包含头文件intrins.h
代码:
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uint temp;
void delay(uint z);
void main()
{
temp=0xfe;
P1=temp;
while(1)
{
delay(1000);
temp=_crol_ (temp,1);
P1=temp;
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
2.点亮LED灯
1)静态LED点灯
需要用到的端口:
P0口
DULA:选位允许端口
WELA:选段允许端口
代码:
#include<reg52.h>
sbit WELA=P2^7;
sbit DULA=P2^6;
void main()
{
WELA=1;
P0=0xf0;
WELA=0;
DULA=1;
P0=0x06;
}
2)动态LED显示