单片机入门文档格式.docx

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

单片机入门文档格式.docx

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

单片机入门文档格式.docx

在数码管上显示秒数

14)综合实验3——分秒表:

前两位显示分钟,后两位显示秒钟,中间小数点0.5S闪烁

15)综合实验4——方波信号发生器:

10~200Hz,步长10Hz,P23输出,数码管显示频率值,UP:

频率加,DN:

频率减。

16)综合实验5——简易跑表:

前两位数码管显示秒数,后两位显示百分秒;

按一下M键开始计时,再按一下停止;

DN键清零

17)综合实验6——可多段计数的跑表:

按一下M键开始计时,每再按一下记下当前计数值,最多记四段;

按一下UP键停止,再按一下UP键,第一个指示灯亮,并显示第一段计数值;

继续按UP键,下一个指示灯亮,并显示下一段计数值;

1.摘要:

HELLOWORLD:

把P23置低,点亮一个LED

#include"

reg52.h"

sbitP23=P2^3;

//定义LED指示灯的IO口

voidmain()

{

P23=0;

//P23口置低,点亮一个LED

while

(1);

}

2.摘要:

延时控制IO口P2.3实现LED灯的闪烁

inti;

//计时变量

while

(1)

{

for(i=0;

i<

30000;

i++);

//延时

P23=!

P23;

//指示灯IO口反转

}

3.摘要:

使用定时器0控制LED灯(P23口)1秒间隔的闪烁

#defineTHCO0xee//11.0592MHZ晶振

#defineTLCO0x0//定时5ms时间常数值

//LED指示灯IO口定义

TMOD=0x11;

//设置定时器0工作模式,16位计数模式

TH0=THCO;

TL0=TLCO;

TR0=1;

//启动定时器

ET0=1;

//使能定时器中断

EA=1;

//开总中断

//interruptN:

表示中断服务子程序:

//interrupt0:

表示外部中断0中断服务子程序

//interrupt1:

表示定时器0中断服务子程序

//interrupt2:

表示外部中断1中断服务子程序

//interrupt3:

表示定时器1中断服务子程序

//interrupt4:

表示串口中断服务子程序

voidtimer0()interrupt1//定时器中断服务子程序

staticunsignedcharcount=0;

//软计时变量定义

count++;

if(count>

=200)//1S时间到

count=0;

//LED灯反转

}

4.摘要:

使用定时器控制四个LED以流水灯形式闪烁

sbitP24=P2^4;

sbitP25=P2^5;

sbitP26=P2^6;

staticunsignedcharcount=0,Bit=0;

=50)//250ms更换LED灯亮

Bit++;

if(Bit>

=4)Bit=0;

P2=P2|0x78;

//关闭所有LED

switch(Bit)//打开需要点亮的灯

case0:

break;

case1:

P24=0;

case2:

P25=0;

case3:

P26=0;

5.摘要:

使用外部中断0(ENT按键,接P32口)控制LED亮灭

{

IT0=1;

//外部中断0连沿触发方式

EX0=1;

//使能外部中断0

EA=1;

//开部中断

P23=0;

//指示灯初始为亮

while

(1);

voidint0()interrupt0//外部中断0程序入口

P23=!

6.摘要:

四个按键控制四个LED灯对应亮灭

#defineTHCO0xee//5ms时间常数设置

#defineTLCO0x0

//四个指示灯IO口定义

sbitP20=P2^0;

//四个按键接口,0有效,即低电平,键按下

sbitP21=P2^1;

sbitP22=P2^2;

sbitP32=P3^2;

{

TMOD=0x11;

//定时器0初始化

TH0=THCO;

ET0=1;

P2=0x07;

//准双向口按键检测之前先置1,同时指示灯亮

voidtimer0()interrupt1

//静态变量,退出函数后,值保留

if(P20==0||P21==0||P22==0||P32==0)

count++;

if(count>

=30)//消抖处理

{

count=0;

if(P20==0)P23=!

//按键按下,指示灯反转

elseif(P21==0)P24=!

P24;

elseif(P22==0)P25=!

P25;

elseif(P32==0)P26=!

P26;

}

elsecount=0;

7.摘要:

使用延时方法,控制蜂鸣器发生

sbitvoice=P1^4;

//蜂鸣器控制IO口

unsignedinti;

for(i=0;

2000;

voice=!

voice;

//延时反转

8.摘要:

蜂鸣器两种频率输出,发生报警声

#defineTHCO0xee

//蜂鸣器IO口定义

unsignedcharff=10;

//频率设置,软计时,输出频率的周期为ff*5*2ms

P2=0x0f;

while

(1);

=200)//1S钟切换一次频率

if(ff==10)ff=20;

//5Hz

elseif(ff==20)ff=10;

//10Hz

if(count%ff==0)//周期到,IO口反转

{

9.摘要:

播放音乐:

两只老虎

#include<

reg52.h>

intrins.h>

#defineFREQ11059200

unsignedcharcodemusic_tab[]={//两只老虎,高4位为音乐节拍,低4位为音符

0x31,0x32,0x33,0x31,0x31,0x32,0x33,0x31,0x33,0x34,0x45,0x33,0x34,0x45,

0x25,0x16,0x25,0x14,0x33,0x31,0x25,0x16,0x25,0x14,0x33,0x31,

0x31,0x35,0x41,0x31,0x35,0x41,

0

};

unsignedcharcodemusic_l_tab[8]={0,1,2,3,4,6,8,16};

//节拍延时单位

unsignedcharcodemusic_freq_tab[16]={

0xff,0xea,//0休止符

255-FREQ/24/1049/256,//1do高字节//255-FREQ/24/x/256

255-FREQ/24/1049%256,//1do低字节//256-FREQ/24/x%256

255-FREQ/24/1178/256,256-FREQ/24/1178%256,//2re

255-FREQ/24/1322/256,256-FREQ/24/1322%256,//3mi

255-FREQ/24/1400/256,256-FREQ/24/1400%256,//4fa

255-FREQ/24/1572/256,256-FREQ/24/1572%256,//5suo

255-FREQ/24/1665/256,256-FREQ/24/1665%256,//6la

255-FREQ/24/1869/256,256-FREQ/24/1869%256,//7xi

unsignedchartemp_TH1;

unsignedchartemp_TL1;

sbitPIN_MSC=P1^4;

//音乐输出端口//

voidmusic_delay(unsignedcharx);

//音乐节拍延时

voidmusic_play(unsignedchar*msc);

//播放音乐子程序

//---------------------------------------------------------------------------//

voidmusic_int_t1(void)interrupt3using1//定时中断1//

PIN_MSC=~PIN_MSC;

TH1=temp_TH1;

TL1=temp_TL1;

voidmusic_delay(unsignedcharn)//延时125*n毫秒

unsignedchari=125,j;

do{

for(j=0;

j<

230;

j++)_nop_();

}while(--i);

}while(--n);

voidmusic_play(unsignedchar*msc)//音乐

unsignedcharmusic_long;

//节拍

unsignedcharmusic_data=0;

//音符数据

temp_TH1=0xff;

temp_TL1=0xea;

//关输出(输出超声波)

TR1=1;

//开T1定时器中断

//---------------------------------------------------------

while(*msc!

=0x00)

music_data=*msc&

0x07;

music_long=*msc>

>

4;

if(music_long!

=0)//是音符

temp_TH1=music_freq_tab[music_data*2];

temp_TL1=music_freq_tab[music_data*2+1];

music_delay(music_l_tab[music_long&

0x07]);

msc++;

TR1=0;

//播放结束

PIN_MSC=1;

//关输出

voidmain(void)//示例

TMOD=0x11;

//TMOD:

定时器1:

模式1:

16位;

定时器2:

16位

TR1=0;

ET1=1;

EA=1;

{

music_delay(10);

//延时

music_play(music_tab);

//播放音乐

10.摘要:

一个数码管上显示数字3

unsignedcharcodeDuan[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

//共阴极数码管,0-9段码表

sbitP10=P1^0;

//第0位数码管

P10=0;

//开位码

P0=Duan[3];

//送段码

11.摘要:

四个数码管上分别显示1234

//共阴极数码管,0-9段码表

unsignedcharData_Buffer[4]={1,2,3,4};

//四个数码管显示数值,数组变量定义

//四个数码管的位码口定义

sbitP11=P1^1;

sbitP12=P1^2;

sbitP13=P1^3;

TMOD=0x01;

//定时器0初始化

TL0=TLCO;

TR0=1;

staticunsignedcharBit=0;

//静态变量,退出程序后,值保留

P1|=0x0f;

//先关位码

P0=Duan[Data_Buffer[Bit]];

//开段码

switch(Bit)//送位码

P10=0;

P11=0;

P12=0;

P13=0;

//动态扫描

12.摘要:

ENT键,按键计数,并将结果显示到数码管上

unsignedcharData_Buffer[4]={0,0,0,0};

unsignedintcount=0;

//从0值开始计数

//数码管位码定义

//定时器0用来扫描数码管显示

//外部中断0,边沿触发方式

while

(1);

voidint0()interrupt0

//有键按下,数值加1

9999)count=0;

Data_Buffer[0]=count/1000;

Data_Buffer[1]=count%1000/100;

Data_Buffer[2]=count%100/10;

Data_Buffer[3]=count%10;

//数码管扫描显示

switch(Bit)

}

13.摘要:

秒表:

从上电开始显示工作秒数

unsignedintSec=0;

bitflag=0;

//1S时间到标志

while

(1)

if(flag==1)

flag=0;

Data_Buffer[0]=Sec/1000;

Data_Buffer[1]=Sec%1000/100;

Data_Buffer[2]=Sec%100/10;

Data_Buffer[3]=Sec%10;

=200)//秒计时,定时器定时5ms,计200次为一秒

Sec++;

flag=1;

//更新数码管显示

if(Sec>

9999)Sec=0;

//秒数最大显示为9999,之后从头开始计时

ca

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

当前位置:首页 > 外语学习 > 英语学习

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

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