单片机笔记汇总Word文档格式.docx
《单片机笔记汇总Word文档格式.docx》由会员分享,可在线阅读,更多相关《单片机笔记汇总Word文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
用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单片机的复位、时钟与时序
复位SPstackpointer0000011107H
程序计数器PC0000H
P0~P311111111FFH高阻
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<
reg51.h>
//调用库文件
#defineuintunsignedint//宏定义无符号整型
//定义全局变量
//定义子函数(延时函数)
voiddelay(uinttime)
{uinti;
for(;
time>
0;
time--)
for(i=0;
i<
125;
i++);
}
voidmain()
{
P0=0xff;
//11111111设备初始化
delay(10);
P0=0xf0;
//11110000低位灯亮4位
delay(500);
while
(1)
{uinti;
for(i=1;
=1;
i++)
{
P0<
<
=4;
P0|=0x0f;
delay(100);
}
P0>
>
P0|=0xf0;
}
1.keilC设计软件程序的步骤
(1)安装
(2)project->
选(80C51BH)->
File-save(以.c为扩展名)->
Addgroup-泡泡生成.hex
2.Hex->
硬件仿真图->
电路板
系统工程
建立模型
1.硬件设计-最小系统
2.软件设计-逻辑算法
3硬软联掉
流水灯设计过程
流水灯LED
1.LED工作原理正向导通
2.编程方法:
初始化->
开始工作(启动)->
有条件工作(算法,逻辑)->
最后停止(定时)
3.实验箱:
下载程序ROM烧录
(1)选芯片
(2)端口
(3)文件程序
(4)下载
数码管(输出设备)
1.功能:
显示数字、字符
2.原理:
七段LED或八段(加上小数点)
3.分类:
共阳:
串联+5V电压
共阴:
串联地
共阳极(共阴极加~就可以了)
dp
g
f
e
d
c
b
a
0xc0
0xf9
0xa4
3
0xb0
0x99
5
0x92
6
0x82
7
0xf8
0x80
9
0x90
A
0x88
0x93
C
0xc6
0xa1
E
0x96
F
0x9e
#defineuintunsignedint
sbita=P2^2;
//38译码器的输入端之一A
sbitb=P2^3;
//38译码器的输入端之一B
sbitc=P2^4;
//38译码器的输入端之一C
charduanma1[]={~0x3f,~0x06,~0x5b,~0x4f,~0x66,~0x6d,~0x7d,~0x07,~0x7f,~0x6f};
//共阳数码管段码值0-9
charduanma2[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//共阴极段码值
charduanma3[]={0x06,0,0x38,0x5c,0x1c,0x79,0,0x3e};
//显示ILovEU共阴极段码值
voiddelay(uinttime)//延时子函数
{chari;
//局部变量定义
for(;
//内循环延时大概1ms
voidsmg1()//共阳数码管显示0-9子函数
{chari;
P1=0xff;
//初始11111111,全灭
delay(1000);
//灭的时间是1s
=9;
{
P1=duanma1[i];
//显示共阳极段码值
delay(1000);
//延时1s
}
voidsmg2()
{chari;
P0=0;
//00000000段码值为0,共阴数码管灭
for(i=0;
=7;
{
switch(i)
case0:
c=0;
b=0;
a=0;
break;
//000,选通Y0,1号管
case1:
a=1;
//001,选通Y1,2号管
case2:
b=1;
//010,选通Y2,3号管
case3:
//011,选通Y3,4号管
case4:
c=1;
//100,选通Y4,5号管
case5:
//001,选通Y5,6号管
case6:
//110,选通Y6,7号管
case7:
//111,选通Y7,8号管
P0=duanma2[i+2];
//共阴极的段码值
delay(10);
//动态扫描,延时时间很短
voidsmg3()//显示ILovEU显示3遍
{chari,m,j;
P0=0;
for(j=1;
j<
=3;
j++)//闪烁3次
{for(m=1;
m<
=10;
m++)//扫描10组
{for(i=0;
i++)//8个管一组
switch(i)
//101,选通Y5,6号管
P0=duanma3[i];
}//i=8个
}//m=10次
//数码管全灭
delay(300);
}//j=3次闪烁
main()
smg3();
//只显示3次,不是一直显示
while
(1);
//smg1();
//调用共阳数码管
//smg2();
//调用8位1体共阴数码管
第5章
5.1中断
1.中断概念
2.中断术语
中断申请->
中断响应->
中断服务->
中断返回
5.2中断控制系统
1.中断申请的中断源(3种)
中断源名称
中断号
外部中断
定时器
T0
T1
通信
TX
RX
2.中断寄存器(4个)
(1)TCON
(2)SCON
(3)IE
(4)IP
中断编程
1.硬件电路
固定接法
按键
2.中断初始化
3.中断服务
sbitdeng=P2^0;
//变量灯与端口P2.0想通
voiddelay(uinttime)//延时子函数
chari;
//中断初始化子函数int0
voidint0()
IT0=1;
//中断触发方式为负跳动,外部中断0
EX0=1;
//允许外部中断0中断
EA=1;
//打开总中断
//中断服务函数外部中断0
int0_deng()interrupt0//外部中断0的中断号为0
{deng=!
deng;
//对后面的deng求反,再传送给deng,再送出给P2.0端口
delay(100);
//防止按键抖动
main()
//1.设备初始化
P2=0xff;
//11111111灯灭
P3=0xff;
//高电平,高阻抗
delay(100);
//2.中断初始化
int0();
//调用外部中断0初始化子函数
//如果有按键按下,产生一个外部中断,系统自动进入中断服务函数
//3.系统开始工作
//系统等待
sbitdeng=P0^4;
//变量灯与端口P0.4相通
charduanma2[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,0x77,0x7c,
0x58,0x5e,0x79,0x71};
//共阴极0-9加AbCdEF
uintjs=0;
//中断初始化子函数int01
voidint01()
//允许外部中断0中断
IT1=1;
//中断触发方式为负跳动,外部中断1
EX1=1;
//允许外部中断1中断
int0_deng()interrupt0//外部中断0的中断号为0
deng=!
//外部中断1的中断服务
int1_smg()interrupt2//外部中断1的中断号为2
{
js=js+1;
//累加计数的功能
if(js>
=16)js=0;
//如果大于等于16就为0
P2=duanma2[js];
//对应显示计数的段码值
//防止按键抖动,保护
//1.设备初始化
P2=0;
//00000000共阴极数码管灭
//按键,高电平,高阻抗
int01();
//调用外部中断0,外部中断1初始化子函数
1.中断系统工作流程
暂时中止当前工作->
转中断申请->
进入中断服务->
2.中断系统的硬件结构组成
8位(统一设置或每一位设置编程)
TCONIT0电平触发
IT1边沿触发
SCON
IEEX0、EX1允许中断
EA总中断允许
IP
3.中断系统软件编程方法
1.调用库文件
2.设备初始化(保护,全灭,高阻)
3.中断初始化(3种中断源5个),可自动调用中断服务
4.系统开始第一个工作
5.继续调用其他工作
charkey;
voiddeng_ld()
P2=0xfe;
7;
{P2<
P2|=1;
{P2>
P2|=0x80;
voiddeng_ss()
{P2=0xaa;
P2=0x55;
deng[]={0x3c,0x18,0x7e,0x24};
deng_hy()
{chari;
{P2=deng[i];
}
deng_0xff()
{P2=0xff;
{IT0=1;
voidint0_deng()interrupt0
{key=P0&
0x0f;
{switch(key)
{case0x0e:
deng_ld();
case0x0d:
deng_ss();
case0x0b:
deng_hy();
case0x07:
deng_off();
第6章定时
1.中断源类型
INT0
INT1
TX/TR
2.外部中断硬件连接
INT0P3.2
INT1P3.3
3.软件编程
定时50ms,数码管变数字
1.硬件连接P3.4P3.5系统内部产生,不连接
2.软件
2.1#库文件、宏定义
2.2全局变量、端口
2.3数组
2.4子函数(延时、流水灯、数码管)
2.5中断初始化子函数
2.6中断服务
2.7主函数
uinta=65536-50000*11.0592/12;
charduanma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
chardeng[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,
0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
voidT0_ini()
TMOD=0x01;
//定时器工作方式00000001,T0方式1
TH0=a/256;
//计时初值高
TL0=a%256;
//计时初值低
ET0=1;
//允许T0中断
//总中断
TR0=1;
//定时开始工作
chari=0,count=0,count2=0;
voidT0_smg()interrupt1
{
//重新装计数初值//
count=count+1;
if(count==20)//50msX20=1s
count=0;
i++;
if(i>
10)
i=0;
P2=deng[i];
voidT0_deng()interrupt3
count2=count2+1;
if(count2==20)//50msX20=1s
count2=0;
=14)
voidmain()
P1=0xff;
//数码管全灭
//灯全灭
//高阻
T0_ini();
//调用
1.定时器硬件结构
1.T0P3.4
T1P3.5
16位TH高8位TL低8位
定时器初值a=2^n-t*f/12
2.控制R->
TMOD:
设置工作方式方式12^16方式22^8自动重装初值
定时器电子秒表00~59
1.库、宏定义
2.数码管段码值数组定义
3.定义子函数
3.1T0中断初始化子函数
4.T0中断服务函数
5.主函数
5.1设备初始化
5.2T0初始化
5.3
//1.库文件宏定义
//2.定义全局变量
//3.定义数组数码管
//4.定义子函数
//4.1定义T0中断初始化子函数
//4.2定义T0中断服务函数
//5.主函数
charcount=0,t=0;
chardm[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f};
uinta=635536-50000*11.0592/12;
voidT0_mb()interrupt1
count++;
if(count==20)//是否到1s
t++;
if(t==60)t=0;
//是否到60s
P0=dm[t/10];
P2=dm[t%10];
P2=0;
//共阴数码管灭
P2=dm[0];
[文档可能无法思考全面,请浏览后下载,另外祝您生活愉快,工作顺利,万事如意!
]