单片机笔记汇总.docx

上传人:b****1 文档编号:15088319 上传时间:2023-06-30 格式:DOCX 页数:25 大小:186.71KB
下载 相关 举报
单片机笔记汇总.docx_第1页
第1页 / 共25页
单片机笔记汇总.docx_第2页
第2页 / 共25页
单片机笔记汇总.docx_第3页
第3页 / 共25页
单片机笔记汇总.docx_第4页
第4页 / 共25页
单片机笔记汇总.docx_第5页
第5页 / 共25页
单片机笔记汇总.docx_第6页
第6页 / 共25页
单片机笔记汇总.docx_第7页
第7页 / 共25页
单片机笔记汇总.docx_第8页
第8页 / 共25页
单片机笔记汇总.docx_第9页
第9页 / 共25页
单片机笔记汇总.docx_第10页
第10页 / 共25页
单片机笔记汇总.docx_第11页
第11页 / 共25页
单片机笔记汇总.docx_第12页
第12页 / 共25页
单片机笔记汇总.docx_第13页
第13页 / 共25页
单片机笔记汇总.docx_第14页
第14页 / 共25页
单片机笔记汇总.docx_第15页
第15页 / 共25页
单片机笔记汇总.docx_第16页
第16页 / 共25页
单片机笔记汇总.docx_第17页
第17页 / 共25页
单片机笔记汇总.docx_第18页
第18页 / 共25页
单片机笔记汇总.docx_第19页
第19页 / 共25页
单片机笔记汇总.docx_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机笔记汇总.docx

《单片机笔记汇总.docx》由会员分享,可在线阅读,更多相关《单片机笔记汇总.docx(25页珍藏版)》请在冰点文库上搜索。

单片机笔记汇总.docx

单片机笔记汇总

第一章

1.1数制定义

十进制:

0,1,2,3,4,5,6,7,8,9D逢十进一

二进制:

0,1B逢二进一

八进制:

0,1,2,3,4,5,6,7O逢八进一

十六进制:

0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,fH逢十六进一

1.2数制转换

十进制->二进制

256

128

64

32

16

8

4

2

1

2^8

2^7

2^6

2^5

2^4

2^3

2^2

2^1

2^0

56=2^5+2^4+2^3=00111000=38H

48=2^5+2^4=00110000=30H

1.3有符号数

最高位正0负1

正数原码=正数反码=正数补码

负数原码-111

原码11101111

负数反码10010000

负数补码10010001(最后一位+1)

1.2.3(书本P6)

位bit二进制中的一位

字节Bbyte1B=8bit

字word1w=2B

双字字长为16

1.2.4BCD(以二进制表示十进制)

56D->01010110BCD

79D->01111001BCD

1.2.5ASCII

a=61HA=41Hk=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单片机的复位、时钟与时序

复位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//调用库文件

#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;i<=1;i++)

{

P0<<=4;

P0|=0x0f;

delay(100);

}

for(i=1;i<=1;i++)

{

P0>>=4;

P0|=0xf0;

delay(100);

}

}

}

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

0

1

1

0

0

0

0

0

0

0xc0

1

1

1

1

1

1

0

0

1

0xf9

2

1

0

1

0

0

1

0

0

0xa4

3

1

0

1

1

0

0

0

0

0xb0

4

1

0

0

1

1

0

1

0

0x99

5

1

0

0

1

0

0

1

0

0x92

6

1

0

0

0

0

0

1

0

0x82

7

1

1

1

1

1

0

0

0

0xf8

8

1

0

0

0

0

0

0

0

0x80

9

1

0

0

1

0

0

0

0

0x90

A

1

0

0

0

1

0

0

0

0x88

b

1

0

0

0

0

0

1

1

0x93

C

1

1

0

0

0

1

1

0

0xc6

d

1

0

1

0

0

0

0

1

0xa1

E

1

0

0

0

0

1

1

0

0x96

F

1

0

0

0

1

1

1

0

0x9e

 

#include

#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(;time>0;time--)

for(i=0;i<125;i++);//内循环延时大概1ms

}

voidsmg1()//共阳数码管显示0-9子函数

{chari;

P1=0xff;//初始11111111,全灭

delay(1000);//灭的时间是1s

for(i=0;i<=9;i++)

{

P1=duanma1[i];//显示共阳极段码值

delay(1000);//延时1s

}

}

voidsmg2()

{chari;

P0=0;//00000000段码值为0,共阴数码管灭

delay(10);

for(i=0;i<=7;i++)

{

switch(i)

{

case0:

c=0;b=0;a=0;break;//000,选通Y0,1号管

case1:

c=0;b=0;a=1;break;//001,选通Y1,2号管

case2:

c=0;b=1;a=0;break;//010,选通Y2,3号管

case3:

c=0;b=1;a=1;break;//011,选通Y3,4号管

case4:

c=1;b=0;a=0;break;//100,选通Y4,5号管

case5:

c=1;b=0;a=1;break;//001,选通Y5,6号管

case6:

c=1;b=1;a=0;break;//110,选通Y6,7号管

case7:

c=1;b=1;a=1;break;//111,选通Y7,8号管

}

P0=duanma2[i+2];//共阴极的段码值

delay(10);//动态扫描,延时时间很短

}

}

voidsmg3()//显示ILovEU显示3遍

{chari,m,j;

P0=0;//00000000段码值为0,共阴数码管灭

delay(10);

for(j=1;j<=3;j++)//闪烁3次

{for(m=1;m<=10;m++)//扫描10组

{for(i=0;i<=7;i++)//8个管一组

{

switch(i)

{

case0:

c=0;b=0;a=0;break;//000,选通Y0,1号管

case1:

c=0;b=0;a=1;break;//001,选通Y1,2号管

case2:

c=0;b=1;a=0;break;//010,选通Y2,3号管

case3:

c=0;b=1;a=1;break;//011,选通Y3,4号管

case4:

c=1;b=0;a=0;break;//100,选通Y4,5号管

case5:

c=1;b=0;a=1;break;//101,选通Y5,6号管

case6:

c=1;b=1;a=0;break;//110,选通Y6,7号管

case7:

c=1;b=1;a=1;break;//111,选通Y7,8号管

}

P0=duanma3[i];//共阴极的段码值

delay(10);//动态扫描,延时时间很短

}//i=8个

}//m=10次

P0=0;//数码管全灭

delay(300);

}//j=3次闪烁

}

main()

{

smg3();//只显示3次,不是一直显示

while

(1);

{

//smg1();//调用共阳数码管

//smg2();//调用8位1体共阴数码管

}

}

第5章

5.1中断

1.中断概念

2.中断术语

中断申请->中断响应->中断服务->中断返回

5.2中断控制系统

 

1.中断申请的中断源(3种)

中断源名称

中断号

外部中断

0

1

定时器

T0

1

T1

3

通信

TX

4

RX

4

2.中断寄存器(4个)

(1)TCON

(2)SCON

(3)IE

(4)IP

中断编程

1.硬件电路

固定接法

按键

2.中断初始化

3.中断服务

#include

#defineuintunsignedint

sbitdeng=P2^0;//变量灯与端口P2.0想通

voiddelay(uinttime)//延时子函数

{

chari;//局部变量定义

for(;time>0;time--)

for(i=0;i<125;i++);//内循环延时大概1ms

}

//中断初始化子函数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.系统开始工作

while

(1);//系统等待

}

#include

#defineuintunsignedint

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;

voiddelay(uinttime)//延时子函数

{

chari;//局部变量定义

for(;time>0;time--)

for(i=0;i<125;i++);//内循环延时大概1ms

}

//中断初始化子函数int01

voidint01()

{

IT0=1;//中断触发方式为负跳动,外部中断0

EX0=1;//允许外部中断0中断

IT1=1;//中断触发方式为负跳动,外部中断1

EX1=1;//允许外部中断1中断

EA=1;//打开总中断

}

//中断服务函数外部中断0

int0_deng()interrupt0//外部中断0的中断号为0

{

deng=!

deng;//对后面的deng求反,再传送给deng,再送出给P2.0端口

delay(100);//防止按键抖动

}

//外部中断1的中断服务

int1_smg()interrupt2//外部中断1的中断号为2

{

js=js+1;//累加计数的功能

if(js>=16)js=0;//如果大于等于16就为0

P2=duanma2[js];//对应显示计数的段码值

delay(100);//防止按键抖动,保护

}

main()

{

//1.设备初始化

P0=0xff;//11111111灯灭

P2=0;//00000000共阴极数码管灭

P3=0xff;//按键,高电平,高阻抗

delay(100);

//2.中断初始化

int01();//调用外部中断0,外部中断1初始化子函数

//如果有按键按下,产生一个外部中断,系统自动进入中断服务函数

//3.系统开始工作

while

(1);//系统等待

}

1.中断系统工作流程

暂时中止当前工作->转中断申请->进入中断服务->中断返回

2.中断系统的硬件结构组成

8位(统一设置或每一位设置编程)

TCONIT0电平触发

IT1边沿触发

SCON

IEEX0、EX1允许中断

EA总中断允许

IP

3.中断系统软件编程方法

1.调用库文件

2.设备初始化(保护,全灭,高阻)

3.中断初始化(3种中断源5个),可自动调用中断服务

4.系统开始第一个工作

5.继续调用其他工作

#include

#defineuintunsignedint

charkey;

voiddelay(uinttime)

{uinti;

for(;time>0;time--)

for(i=0;i<125;i++);

}

voiddeng_ld()

{chari;

P2=0xfe;

for(i=0;i<7;i++)

{P2<<=1;

P2|=1;

delay(100);

}

for(i=0;i<=7;i++)

{P2>>=1;

P2|=0x80;

delay(100);

}

}

voiddeng_ss()

{P2=0xaa;

delay(100);

P2=0x55;

delay(100);

}

deng[]={0x3c,0x18,0x7e,0x24};

deng_hy()

{chari;

for(i=0;i<=3;i++)

{P2=deng[i];

delay(100);

}

}

deng_0xff()

{P2=0xff;

delay(100);

}

voidint0()

{IT0=1;

EX0=1;

EA=1;

}

voidint0_deng()interrupt0

{key=P0&0x0f;

}

main()

{

P0=0xff;

P2=0xff;

P3=0xff;

delay(10);

int0();

while

(1)

{switch(key)

{case0x0e:

deng_ld();break;

case0x0d:

deng_ss();break;

case0x0b:

deng_hy();break;

case0x07:

deng_off();break;

}

}

}

第6章定时

1.中断源类型

INT0

INT1

T0

T1

TX/TR

0

2

1

3

4

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主函数

#include

#defineuintunsignedint

uinta=65536-50000*11.0592/12;

charduanma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

voiddelay(uinttime)//延时子函数

{uinti;//局部变量定义

for(;time>0;time--)

for(i=0;i<125;i++);//内循环延时大概1ms

}

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中断

EA=1;//总中断

TR0=1;//定时开始工作

}

chari=0,count=0,count2=0;

voidT0_smg()interrupt1

{

TH0=a/256;

TL0=a%256;//重新装计数初值//

count=count+1;

if(count==20)//50msX20=1s

{

count=0;i++;

if(i>10)

i=0;

P2=deng[i];

}

}

voidT0_deng()interrupt3

{

TH0=a/256;

TL0=a%256;//重新装计数初值//

count2=count2+1;

if(count2==20)//50msX20=1s

{

count2=0;i++;

if(i>=14)

i=0;

P2=deng[i];

}

}

voidmain()

{

P1=0xff;//数码管全灭

P2=0xff;//灯全灭

P3=0xff;//高阻

delay(100);

T0_ini();//调用

while

(1);

}

 

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.主函数

#include

#defineuintunsignedint

charcount=0,t=0;

chardm[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,

0x7d,0x07,0x7f,0x6f};

uinta=-50000*11.0592/12;

voidT0_ini()

{

TMOD=0x01;

TH0=a/256;

TL0=a%256;

ET0=1;

EA=1;

TR0=1;

}

voidT0_mb()interrupt1

{

count++;

if(count==20)//是否到1s

{

count=0;

t++;

if(t==60)t=0;//是否到60s

}

P0=dm[t/10];

P2=dm[t%10];

}

voidmain()

{

P0=0;P2=0;//共阴数码管灭

P2=dm[0];

P2=dm[0];

T0_ini();

while

(1);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 党团建设

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2