单片机笔记汇总
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章
1.1数制定义
十进制:0,1,2,3,4,5,6,7,8, 9 D 逢十进一
二进制:0,1 B 逢二进一
八进制:0,1,2,3,4,5,6,7 O逢八进一
十六进制:0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f H 逢十六进一1.2数制转换
十进制->二进制
56=2^5+2^4+2^3=0011 1000=38H
48=2^5+2^4=0011 0000=30H
1.3有符号数
最高位正0 负1
正数原码=正数反码=正数补码
负数原码-111
原码1110 1111
负数反码1001 0000
负数补码1001 0001 (最后一位+1)
1.2.3(书本P6)
位bit 二进制中的一位
字节B byte 1B=8bit
字word 1w=2B
双字字长为16
1.2.4 BCD(以二进制表示十进制)
56D->0101 0110BCD
79D->0111 1001BCD
1.2.5 ASCII
a=61H A=41H k=6BH
第二章
用proteus画图的步骤
1.启动ISI模块
2.选取原件
3.摆放原件
4.编辑原件属性
5.编辑原件文本属性
6.原理图布线
计算机系统=硬件系统+软件系统
冯氏结构硬件系统
CPU=AU(运算器)+CU(控制器)
I->M->O
2.1.1单片机硬件结构
MCS-51单片机内部基本结构
1KB=2^10B
1MB=2^20B
1GB=2^30B
1TB=2^40B
2.2.2 程序存储器
80C51型单片机且程序长度不超过4KB,则无须扩展片外ROM
2.2.3 数据存储器
数据存储器在物理上和逻辑上都占有两个地址空间:
一个是片内256B的RAM,另一个是片外最大可扩充64KB的RAM
2.3单片机的复位、时钟与时序
复位SP stack pointer 0000 0111 07H
程序计数器PC 0000H
P0~P3 1111 1111 FFH 高阻
2.3.2 时钟电路
单片机执行指令的过程可分为取指令、分析指令和执行指令三个步骤
2.3.3 单片机时序
(1)时钟周期
晶振或外加振荡源的振荡周期称为时钟周期
(2)状态周期
1个状态周期等于2个时钟周期
(3)机器周期
1个机器周期等于6个状态周期
(4)指令周期
执行一条指令所需要的时间称为指令周期
小结:P0~P3都可作为准双向通用I/O口,其中只有P0口需要外接上拉电阻(加电阻降压,增加驱动);在需要扩展片外设备时,P2口可作为其地址线接口,P0口可作为其地址线/数据线复用接口,此时它是真正的双向口。
P2口(高8位)与P0口(低8位)共同组成16位地址
/*功能:流水灯(4个灯流)*/
#include
#define uint unsigned int //宏定义无符号整型
//定义全局变量
//定义子函数(延时函数)
void delay(uint time)
{ uint i;
for(;time>0;time--)
for(i=0;i<125;i++);
}
void main()
{
P0=0xff;//1111 1111设备初始化
delay(10);
P0=0xf0;//1111 0000低位灯亮4位
delay(500);
while(1)
{ uint i;
for(i=1;i<=1;i++)
{
P0<<=4;
P0|=0x0f;
delay(100);
}
for(i=1;i<=1;i++)
{
P0>>=4;
P0|=0xf0;
delay(100);
}
}
}
1.keil C设计软件程序的步骤
(1)安装
(2)project->选(80C51BH)->File-save(以.c为扩展名)->Add group-泡泡生成.hex 2.Hex->硬件仿真图->电路板
系统工程
建立模型
1.硬件设计-最小系统
2.软件设计-逻辑算法
3硬软联掉
流水灯设计过程
流水灯LED
1.LED工作原理正向导通
2.编程方法:初始化->开始工作(启动)->有条件工作(算法,逻辑)->最后停止(定
时)
3.实验箱:下载程序ROM烧录(1)选芯片
(2)端口
(3)文件程序
(4)下载
数码管(输出设备)
1.功能:显示数字、字符
2.原理:七段LED或八段(加上小数点)
3.分类:共阳:串联+5V电压
共阴:串联地
共阳极(共阴极加~就可以了)
#include
#define uint unsigned int
sbit a=P2^2;//38译码器的输入端之一A
sbit b=P2^3;//38译码器的输入端之一B
sbit c=P2^4;//38译码器的输入端之一C
char duanma1[]={~0x3f,~0x06,~0x5b,~0x4f,~0x66,~0x6d,~0x7d,~0x07,~0x7f,~0x6f}; //共阳数码管段码值0-9
char duanma2[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//共阴极段码值
char duanma3[]={0x06,0,0x38,0x5c,0x1c,0x79,0, 0x3e};
//显示I LovE U 共阴极段码值
void delay(uint time)//延时子函数
{ char i;//局部变量定义
for (;time>0;time--)
for(i=0;i<125;i++);//内循环延时大概1ms
}
void smg1()//共阳数码管显示0-9 子函数
{ char i;
P1=0xff; //初始1111 1111,全灭
delay(1000);//灭的时间是1s
for(i=0;i<=9;i++)
{
P1=duanma1[i];//显示共阳极段码值
delay(1000);//延时1s
}
}
void smg2()
{ char i;
P0=0;//0000 0000 段码值为0,共阴数码管灭
delay(10);
for(i=0;i<=7;i++)
{
switch(i)
{
case 0:c=0;b=0;a=0;break;//000,选通Y0,1号管
case 1:c=0;b=0;a=1;break;//001,选通Y1,2号管
case 2:c=0;b=1;a=0;break;//010,选通Y2,3号管
case 3:c=0;b=1;a=1;break;//011,选通Y3,4号管
case 4:c=1;b=0;a=0;break;//100,选通Y4,5号管
case 5:c=1;b=0;a=1;break;//001,选通Y5,6号管