单片机编程培训Word格式.docx
- 文档编号:21845243
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:12
- 大小:17.40KB
单片机编程培训Word格式.docx
《单片机编程培训Word格式.docx》由会员分享,可在线阅读,更多相关《单片机编程培训Word格式.docx(12页珍藏版)》请在冰豆网上搜索。
}
04.IO读写操作程序
按下P3口的按键,P1显示相应的位置#include<
reg52.h>
sbitKEY=P3^0;
//定义按键的接口
sbitLED=P1^0;
//定义灯的接口
voidmain(void)
{
P1=0xFF;
//所有的灯灭
while
(1)
LED=KEY;
//灯的状态由按键的状态决定
}
05.流水灯
#include<
voiddelay(unsignedintcnt)
while(--cnt);
main()
P1=0xfe;
//给初始化值换算成二进制是11111110
while
(1)
delay(3000);
//延时程序
P1<
<
=1;
//左移一位该语句等效于P1=P1<
1
P1|=0x01;
//最后一位补1,该语句等效于P1=P1|0x01符号"
|"
表示"
或"
if(P1==0x7f)//检测是否移到最左端?
"
=="
表示检测符号2端的值是否相等
{
delay(30000);
//重新赋值
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};
//分不对应相应的数码管点亮,即位码
voiddelay(unsignedintcnt)
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"
key2)
P0=0x5B;
//2
key3)
P0=0x4F;
//3
key4)
P0=0x66;
//4
//如果有干扰请加去抖程序
//红外接收头部分用黑色物质遮光,防止干扰按键,因为红外接收和按键使用同一个端口
15.去抖
独立按键
key1)
{//按下相应的按键,数码管显示相应的码值
delay(1000);
}
//去抖动
key2)//检测按键确实按下,进行按键处理
2"
//那个地点能够添加按键按下所需要的操作,如数据加减乘除,蜂鸣器等设备开关
3"
4"
矩阵键盘
//行列扫描程序,能够自己定义端口和扫描方式,那个地点做简单介绍
#include<
//包含头文件
#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取反一次,那个地点需要切换跳帽到独立按键模式
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 编程 培训