单片机编程培训Word文档格式.docx

上传人:b****5 文档编号:16691167 上传时间:2022-11-25 格式:DOCX 页数:11 大小:17.04KB
下载 相关 举报
单片机编程培训Word文档格式.docx_第1页
第1页 / 共11页
单片机编程培训Word文档格式.docx_第2页
第2页 / 共11页
单片机编程培训Word文档格式.docx_第3页
第3页 / 共11页
单片机编程培训Word文档格式.docx_第4页
第4页 / 共11页
单片机编程培训Word文档格式.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

单片机编程培训Word文档格式.docx

《单片机编程培训Word文档格式.docx》由会员分享,可在线阅读,更多相关《单片机编程培训Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。

单片机编程培训Word文档格式.docx

while

(1)

{

P1=P3;

}

04.IO读写操作程序

按下P3口的按键,P1显示相应的位置#include<

reg52.h>

sbitKEY=P3^0;

//定义按键的接口

sbitLED=P1^0;

//定义灯的接口

voidmain(void)

P1=0xFF;

//所有的灯灭

LED=KEY;

//灯的状态由按键的状态决定

05.流水灯

#include<

voiddelay(unsignedintcnt)

while(--cnt);

main()

P1=0xfe;

//给初始化值换算成二进制是11111110

delay(3000);

//延时程序

P1<

<

=1;

//左移一位该语句等效于P1=P1<

1

P1|=0x01;

//最后一位补1,该语句等效于P1=P1|0x01符号"

|"

表示"

或"

if(P1==0x7f)//检测是否移到最左端?

"

=="

表示检测符号2端的值是否相等

delay(30000);

P1=0xfe;

//重新赋值

06.

//按下P3口的按键,P1显示相应的位置,IO读写操作程序

sfrP1=0x90;

/*SFRdefinitionforPort1*/

sfrP3=0xB0;

/*SFRdefinitionforPort3*/

unsignedcharpval;

pval=P3;

/*ReadP1intopval*/

P1=pval;

/*WritepvaltoP3*/

08.数码管动态扫描

Unsignedcharconstdofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

//显示段码值01234567

unsignedcharcodeseg[]={0,1,2,3,4,5,6,7};

//分别对应相应的数码管点亮,即位码

unsignedchari;

P0=dofly[i];

//取显示数据,段码

P2=seg[i];

//取位码

delay(200);

//扫描间隙延时,时间太长会闪烁,太短会造成重影

i++;

if(8==i)//检测8位扫描完全?

i=0;

11.独立按键

内容:

切换到独立按键模式,通过按键在数码管显示对应的数字

sbitkey1=P3^0;

//定义按键位置

sbitkey2=P3^1;

sbitkey3=P3^2;

sbitkey4=P3^3;

P2=0x00;

if(!

key1)//按下相应的按键,数码管显示相应的码值

P0=0x06;

//数码管显示"

1"

if(!

key2)

P0=0x5B;

//2

key3)

P0=0x4F;

//3

key4)

P0=0x66;

//4

//如果有干扰请加去抖程序

//红外接收头部分用黑色物质遮光,防止干扰按键,因为红外接收和按键使用同一个端口

15.去抖

独立按键

key1)

{//按下相应的按键,数码管显示相应的码值

delay(1000);

}

//去抖动

key2)//检测按键确实按下,进行按键处理

2"

//这里可以添加按键按下所需要的操作,如数据加减乘除,蜂鸣器等设备开关

3"

4"

矩阵键盘

//行列扫描程序,可以自己定义端口和扫描方式,这里做简单介绍

//包含头文件

#defineucharunsignedchar

#defineuintunsignedint

unsignedcharconstdofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,

0x77,0x7c,0x39,0x5e,0x79,0x71};

//0-F

ucharkeyscan(void);

voiddelay(uinti);

voidmain()

ucharkey;

//1数码管亮按相应的按键,会显示按键上的字符

key=keyscan();

//调用键盘扫描,

switch(key)

case0x7e:

P0=dofly[0];

break;

//0按下相应的键显示相对应的码值

case0x7d:

P0=dofly[1];

//1

case0x7b:

P0=dofly[2];

case0x77:

P0=dofly[3];

case0xbe:

P0=dofly[4];

case0xbd:

P0=dofly[5];

//5

case0xbb:

P0=dofly[6];

//6

case0xb7:

P0=dofly[7];

//7

case0xde:

P0=dofly[8];

//8

case0xdd:

P0=dofly[9];

//9

case0xdb:

P0=dofly[10];

//a

case0xd7:

P0=dofly[11];

//b

case0xee:

P0=dofly[12];

//c

case0xed:

P0=dofly[13];

//d

case0xeb:

P0=dofly[14];

//e

case0xe7:

P0=dofly[15];

//f

ucharkeyscan(void)//键盘扫描函数,使用行列反转扫描法

ucharcord_h,cord_l;

//行列值

P3=0x0f;

//行线输出全为0

cord_h=P3&

0x0f;

//读入列线值

if(cord_h!

=0x0f)//先检测有无按键按下

delay(100);

//去抖

=0x0f)

P3=cord_h|0xf0;

//输出当前列线值

cord_l=P3&

0xf0;

//读入行线值

return(cord_h+cord_l);

//键盘最后组合码值

}return(0xff);

//返回该值

voiddelay(uinti)//延时函数

while(i--);

16.定时器0

*ThissampleisusedforTimer016bittimermode.

sbitLED=P1^2;

voidInit_Timer0(void)

TMOD|=0x01;

TH0=0x00;

/*Initvalue*/

TL0=0x00;

EA=1;

/*interuptenable*/

ET0=1;

/*enabletimer0interrupt*/

TR0=1;

Init_Timer0();

while

(1);

voidTimer0_isr(void)interrupt1using1

/*Initvalue*/

LED=~LED;

//指示灯反相

17.定时器1

*ThissampleisusedforTimer116bittimermode.

voidInit_Timer1(void)

TMOD|=0x10;

TH1=0x00;

TL1=0x00;

ET1=1;

/*enabletimer1interrupt*/

TR1=1;

Init_Timer1();

voidTimer1_isr(void)interrupt3using1

20.

外部中断0电平触发

通过中断接口P3.2连接的独立按键测试,按一次P1口的LED灯反向,

这里使用电平触发,所以一直按键不松开和一次按键效果不相同,按下会看到灯全部亮,说明中断一直在作用

P1=0x55;

//P1口初始值

//全局中断开

EX0=1;

//外部中断0开

IT0=0;

//电平触发

//在此添加其他程序

外部中断程序

voidISR_Key(void)interrupt0using1

P1=~P1;

23.外部中断0边沿触发

这里使用边沿触发,所以一直按键不松开和一次按键效果相同,区别于电平触发

IT0=1;

//边沿触发

//s3按下触发一次,P1取反一次,这里需要切换跳帽到独立按键模式

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

当前位置:首页 > 高等教育 > 教育学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1