版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一、N时器控制单只LED实验:8051+Proteus定时/计数器仿真/*名称:定时器控制单只LED说明:LED在定时器的中断例程控制下不断闪烁。#include#define uchar unsigned char 片define uint unsigned int sbit LED=POP;uchar T_Count=0;/主程序void mainOTMOD=OxOO;/定时器0工作方式0THO= (8192-5000)/32; /5ms 定时TLO=(8192-5000)%32;IE=0x82;允许TO中断LC1口C2-TF如.(=Mr*X7AL1POLACOPOZfAOZTOS/A05
2、P06/AD6时TO ADPP2JMtSP24XMJ P22A10ALEPJ4AX12P27W15Pl JO因刀EDP1.1P51/TXDpi .2PI 3P3X*7TTP1.4PUPISP3AtuBwXTAllpacMio阳:叱xiaiiPUTRBTpsavwmwo1TXM2” HEM3P3JHTTPXMP25切Q#include#include#define uchar unsigned char廿define uint unsigned intt/主程序 void mainOuchar T_Count=0;P0=0xfe;P2=0xfe;TMOD=0x01;定时器0工作方式1THO= (
3、65536-40000)/256; /40ms 定时TLO=(65536-40000)%256;TRO=1;启动定时器while (1)if(TFO=l)TFO=O;THO= (65536-40000) /256; 恢复初值 TLO=(65536-40000)%256;辻(+T_Count=5)P0=_crol_(P0,1);P2=_crol_(P2,1);T_Count=0;三、龙时器控制4个LED滚动闪烁 /*名称:定时器控制4个LED滚动闪烁说明:4只LED在定时器控制下滚动闪烁。/#includedefine uchar unsigned #define uint unsigned i
4、nt sbit Bl二POO;sbit G1 二POJ;sbit Rl=P(f2;sbit Y1=P(T3;uint i, j, k;/主程序-C1-HIr.沏F. _I1幻 C2 |* H .22F.R1void mainOio;C3IF-; PO二Oxff;TMOD=0x02;/定时器0工作方式2J jKTAL1PODfADOP02fAD2PO.4fAMP0.5fAD5P0.7fAD7P2CUA8P2,心P22W10PSEN ALE EAP2佃2P2SWU3P2.7AM5PI OP3 味 XDP1.1P3.1/DOPI 2PS WTOPI 3PI .4P3.4noPI 5P3 5fT1PI
5、 6PITP3.7JRDT89C1TH0=256-200;/200us 定时TL0=256-200;IE=0x82;TRO=1;启动定时器while (1);/TO中断函数void LED_Flash_and_Scroll0 interrupt 1if(+k35)return;定时中断若干次后执行闪烁k=0;switch (i)case 0:break;case 1: G1=G1;break;case 2: R1=R1;break;case 3: Y1=Y1;break;default:i=0;if(+j300) return;每次闪烁持续一段时间j=0;P0二Oxff; 关闭显示X1JU.2
6、砂VS TO2WX2 ro.wo 刃总心R3.7W7l.TXDP34.TO附拠皮 切0P21A9 P22W0 P2W1 P24UU2i+;/切换到下一个LED四. TO控制LED实现二进制计数/*名称:T0控制LED实现二进制计数说明:本例对按键的计数没有使用査 询法,没有使用外部中断函数,没有使用 定时或计数中断函数。而是启用了计数 器,连接在T0引脚的按键每次按下时, 会使计数寄存器的值递增,其值通过LED 以二进制形式显示/#include/主程序void mainOTMOD=0x05;/定时器0为计数器,工作方式1,最大计数值65535THO=O;/初值为0TLO二0;启动定时器TRO
7、=1; while (1)P1=THO;P2=TL0;五、TIMERO与TIMER1控制条形LED/*名称:TIMERO与TIMER1控制条形LED说明:定时器TO定时控制上一组条形LED,滚动速度较快定时器T1定时控制下一组条形LED,滾动速度较慢SincludeO#includettdefine uchar unsigned char#define uint unsigned intuchar tc0=0, tcl=0;/主程序void mainOP0=0xfe;P2=0xfe;TMOD=Oxll; /定时器 Ox定时器1均工作于方式1THO=(65536-15000)/256;ClrH;
8、l t . j”X1C2 I 12Mi:i_.八.idKTAL2RSTPSEN ALE 罠Pl 0 P11PI 2Pi 3PI 4 PI SP1PI 7AT09C$1/定时器0: 15msP3 0贰e P3.1/TXD P32fiT0P3M0P3.saiP3创匝空RN2型KlUWWF0.1W01 FO 羽 D2FgD3FO6JAD6FO7WD7名P2.UAS P2.2TA1O P2.-3/M1 P2.VA12 P2SXA13 P25/A14 P2.7/M53iq351434133312 |3211112212231324142515s1627172318 20-2S3| 64?5figI q7
9、10 81 $?4e5s477 2-2 .151 .1312.in口A严1413:八.J L.23316TLO=(65536-15000)%256;TH1=(65536-50000)/256;/定时器I: 50msTL1=(65536-50000)%256;IE=0x8a;TRO=1;启动定时器TR1=1; while (1);/TO中断函敦void TimeOO interrupt 1恢复定时器0初值/150ms转换状态TH0=(65536-15000)/256;TLO=(65536-15000)%256;辻(+tc0=10) tc0=0;P0=_crol_(P0,1);/Tl中断函数voi
10、d Time1() interrupt 3/500ms转换状态TLO=(65536-50000)%256; 辻(+tcl=10)tcl=0; P2=_crol_(P2,1);六、10s的秒表/*名称:10s的秒表说明:首次按键计时开始,/#include#define uchar unsigned char #define uint unsigned int sbit K1=P3A7;uchar再次按键暂停,第三次按键清零。Cl 汕丄XI1l:2(Sng.UBX. x_ .1C2开始偌停廂零AT&3CS1U1a ror/X二尸:CO 1 X 云总彳 寿話2、XTAL1FOCTADO冈 IfAO
11、l XAD2fDFO5M05冈“A8 FC7fAD?P2(LlA8P2im.9ps&tW7JA10 P23JA11出EAP2Z3W7JA5SFID因刀rwP1 1P31/TXDP12P13片顾iP14P34iT0PI 5巧迅P16P3 用P173肌kSiSEG71-RP1 -i, Second_Counts, Key_Flag_Idx;bit Key_State;uchar DSY.CODE = Ox3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f;延时void DelayMS(uint ms)uchar t;while(ms)
12、for (t=0;t120;t+);处理按键事件void Key_Event_Handle()辻(Key_State=0)Kcy.Flag_Idx= (Key_Flag_Idx+l) %3;switch (Key_Flag_Idx)case 1: EA=1;ET0=l;TR0=l;break;case 2: EA=0;ET0=0;TR0=0:break;case 0: P0=0x3f;P2=0x3f;i=0;Second_Counts=0;/主程序 void mainO显示00按键次数(取值0, 1, 2, 3)按键状态/定时器0方式1/定时器0: 15msP0=0x3f;P2=0x3f; i
13、=0;Second_Counts=0;Key_Flag_Idx=O;Key_State=l;TMOD=0x01;THO= (65536-50000)/256;TLO=(65536-50000)%256; while(1)if(Key_S tat e!二KI)DelayMS(lO);Key_State=Kl;Key_Event_Handle 0;/TO中断函数void DSY.Refresh0 interrupt 1THO= (65536-50000) /256;/恢复定时器 0 初值TLO=(65536-50000)%256;辻(+i=2)/50ms*2=转换状态i=0;Second_Coun
14、ts+;PO=DSY.CODESecond.Counts/10;P2=DSY_C0DESecond.Counts%10;if (Second_Counts=100) Second.Counts=0; 满 100 (10s)后显示 00 七. 用汁数器中断实现100以内的按键计数 /*名称:用计数器中断实现100以内的按键计数说明:本例用T0计数器中断实现按键技术,由于计数寄存器初值为1,因此 引脚的每次负跳变都会触发T0中断,实现计数值累加。计数器的清零用外部中断0控制。*/#includedefine uchar unsigned char#define uint unsigned int/
15、段码ucharcodeIOjFU1WH阳RJWgM4 述4rtsrPOTmpTP2.1AA9 P2.?A10PSEri空P24CA1?WAP2K P2A1 02.仙P1DP3XQP11P12Pl 3円汕mPl 3P”TOP15PM SIP16P36WP12P3?jA7ATWC51MDSY_C0DELJ = 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x00; uchar Count=0;/主程序void mainOP0=0x00;P2=0x00;TMOD=0x06;/计数器TO方式2TH0=TL0=256-l;计数值
16、为1ETO=1;允许TO中断EXO二1;/允许INTO中断EA=1;允许CPU中断IP=0x02;设置优先级,T0高于INTOIT0=l;/INTO中断触发方式为下降沿触发TRO二1;启动T0while(1)P0=DSY_C0DECount/10;P2=DSY.C0DECount%10;/TO计数器中断函数void Key_Counter () interrupt 1Count=(Count+l)%100;因为只有两位数码管,计数控制在100以内(0099)/INTO中断函数void Clear_Counter () interrupt 0Count=0;八、100 000s以内的计时程序/*
17、名称:100 000s以内的计时程序 说明:在6只数码管上完成0“99。*/#include#include#define uchar unsigned char#define uint unsigned int段码ucharcodeDSY_C0DE = 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f; /6只数码管上显示的数字uchar Digits_of_6DSY = 0, 0, 0, 0, 0, 0;uchar Count;sbit Dot=P07;延时void DelayMS(uint ms)uchar t;whil
18、e(ms) for (t=0:t120;t+);/主程序void mainOuchar i, j;P0二0x00;P3=0xff;Count=0;TMOD=0x01;/计数器TO方式1TH0= (65536-50000)/256; /50ms 定时TL0=(65536-50000)%256;IE=0x82;TRO=1;启动 TOwhile (1)j=0x7f;显示 Digits_of_6DSY5:PDigits_of-6DSY0的内容前面高位,后面低位,循环中门二-1亦可写成i!=0xff for(i=5;i!=-l;i)(j=_crol_(j, 1);P3=j;PO=DSY_CODEDigi
19、ts_oC6DSYi;if (i=l) Dot=l;加小数点DelayMS(2);/TO中断函数void TimerO0 interrupt 1uchar i;THO= (65536-50000)/256; 恢复初值TLO=(65536-50000)%256;if(+Count!=2) return;Count=0;Digits_of_6DSY0卄;/位累加for (i=0; i=5; i+)进位处理if(DigitS-of-6DSY订=10)Digits_of_6DSYi=0;辻(i!=5) Digits.of_6DSYi+l+;如果04位则分别向高一位进位else break;/若某低位没
20、有进位,怎循环提前结束 P2 4CA12 P2M13 P2ZQ P27CM3AW:51九、泄时器控制数码管动态显示/*名称:定时器控制数码管动态 显示说明:8个数码管上分两组动 态显示年月日与时分秒,本例的 位显示延时用定时器实现。/#include#include#define uchar unsigned chardefine uint unsigned int 段码,最后一位是的段码 ucharcodeDSY_C0DE 二0xc0, Oxf9, 0xa4, OxbO, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, Oxbf;待显示的数据:09-12-25与23-
21、59-58 (分两组显示)uchar code Table.of.Digits 8 = 0, 9,10,1, 2,10, 2, 5, 2, 3,10, 5, 9,10, 5, 8; uchar i, j=0;uint t=0;/主程序 void mainOP3=0x80;位码初值OD=OxOO;/计数器TO方式0THO= (8192-4000)/32; /4ms 定时TLO二(8192-4000)%32;IE=0x82;TRO=1; irfiile(l):启动TO/TO中断函数控制数码管刷新显示void DSY_Show() interrupt 1THO= (8192-4000) /32;恢复
22、初值TLO=(8192-4000)%32;P0=0xff;输出位码和段码PO=DSY-CODETable_oOigitsi j;P3=_crol_(P3,1);j=(j+l)%8;/数组第i行的下一字节索引if(卄t!=350) return; 保持刷新一段时间t=0;i= (i+1) %2;/数组行i=0时显示年月日,i=l时显示时分秒 :RP i十.用上时器设汁的门铃C/*名称:用定时器设计的门铃 说明:按下按键时蜂鸣器发出 叮咚的门铃声。/#include#define uchar unsigned chardefine uint unsigned int sbit Key=P7;sbi
23、t DoorBell=P3A0;uint p=0;/主程序void mainOcYH F-r I如疋|_1_:ki19C2 JP0.1WD1P0.2WO2P0.3WCGP0SC9&旳朋C6RSTP0.7MO704他33373S54A5ggeoBIm 田848G86J5-ir iia 22pFRiDoorBell=0;TMOD=OxOO;/TO 方式 0THO= (8192-700) /32; /700us 定时U11ruPO VAD1XTAL2P0 2fAD2P0.3 蚀 3PO卯心P0 5IXD5RSTPD 6fAD6P0.7fAD7P2CVA8F2.1JA9P20AWP=NP2aJA11A
24、LEF24.W12P25UA13cApmF2.7AJX15P3MDP31JTXDP1.2P3 2伽Pl .3P3 3MT1P1.4P3M0P1SP3 6MRP3.7.RDP1 MJT39:S1LS2丸5DER :TLO=(8192-700)%32;IE=0x82; irfiile(l)if (Key=0)/按下按键启动定时器TRO=1;while(Key=0);/TO中断控制点阵屏显示void TimerO0 interrupt 1DoorBell=DoorBell;p+;if(p400)若需要拖长声音,可以调整400和800THO= (8192-700)/32; /700us 定时TLO=
25、(8192-700)%32;else 辻(p800)THO= (8192-1000)/32; /Ims 定时TLO= (8192-1000) %32;elseTRO=O; C1 22rF.OU1十一、演奏音阶C2XI12MKTAL2/*名称:演奏音阶说明:本例使用定时器演奏一段音 阶,播放由K1控制。/R13 ciz#include#define uchar unsigned char 片define uint unsigned int sbit Ki=pro; sbit SPK=P3八4;uint i=0;音符索引/14个音符放在方式2下的定时寄存器PSEN ALE EAP1DPI .1PI
26、 .2PI .3PI 4PI .5PI 6P17AT89C51PO.tVAMPO.1/AD1PD.2ZAD2 PO.yAW P0.4/ACM PO&ADS P0.GAD6 PO.7/AD7P2.WA8P21fASP2 2JA10P2 3JA11P2 4JA12 P2 5JA13 F2J6A14 P2.7RSP3D.RXD P3.1 fTXD P3.2XMfO P3.34MfrP3 4fTD P3 5fT1 P36睡P3.7丽_LL_1L(THO, TLO)uchar code HI_LIST = 0, 226, 229, 232, 233, 236, 238, 240, 241, 242, 2
27、44, 245, 246, 247, 248; uchar code LO LIST=0,4,13,10,20, 3, & 6, 2,23, 5,26,1,4, 3;/定时器0中断函数void T0.INT 0 interrupt 1TLO=LO.LISTi; THO=HUISTi; SPKSPK;延时 void DelayMS(uint ms)uchar t;while(ms) for (t=0;t120;t+);/主程序void mainOTMOD=OxOO;IE=0x82;/TO方式0SPK=0; while(1)while(Kl=l);while(Kl=0); for(i=l;i15;
28、i+)未按键等待等待释放TRO=1;/播放一个音符DelayMS (500);播放延时TR0=0;DelayMS(50);十二、按键控制立时器选皤多段音乐K1席湖5止 . o O/*名称:按键控制定时器选播多段音乐 说明:本例内置3段音乐,K1可启动 停止音乐播放,K2用于选择音乐段。/SincludcOXTAL1FOHCADOFO.1XAD1F02QD2KTAL2FO3D3FOS(AD5FOfilADGRSTrojxAD?P2.0.W3P2 1;A9P2 2fA1OP5ENP2 3fA11ALEP2 W12臥P2 SW3P2.6fAUP2.伽 5P1 0P3C.RX0PI 1painxoP1
29、 2F3.2NT0P1 3P3KMT1P1.4P3.i/roP1 5P3 5/HP16P1 7P3 7IFDAT39C53亠JIL-31遵全嗤 21#include#define uchar unsigned char#define uint unsigned intsbit Ki=pro;播放和停止键sbit SPK二P37;/蜂鸣器uchar Song_lndex=0, Tone Index=0:当前音乐段索引,音符索引/数码管段码表uchar code DSY.C0DE = 0xc0, 0xf9, 0xa4, OxbO, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x9
30、0;/标准音符频率对应的延时表uchar code HI.LIST=0, 226, 229,232,233,236,238,240,241, 242, 244, 245,246,247, 248;uchar code LO_LIST=0,4, 13,10, 20, 3, 8, 6, 2, 23, 5, 26,1, 4, 3;三段音乐的音符uchar code Song50=1, 2, 3,1,1,2, 3,1, 3,4, 5, 3,4, 5, 5, 6, 5, 3, 5, 6, 5,3, 5, 3, 2,1,2,1,-1,3, 2 1 3 2 1,1, 2, 3,1,1 2, 3,1,3,4,
31、 5, 3y 4, 5, 5, 6, 5, 3 5 3,2,1 3, 2,1,1, *1;三段音乐的节拍uchar code Lent50=1,1,1, mi, 1,1 2,1,1,2,1,1,1,1,1,1,1,1,1,1,1, 2,1,2, -1,1,1, 1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2, 2, -1,1,1, 2,1,1, 2,1,1,1,1,1,1,1,1,1 丄 2,1,1, 2,1,1,1,1,1,1,1, 2,1,1, 2, 2,-1 ;外部中断0void EX0_INT 0 interrupt 0TRO二0; 播放结束或者播放中途
32、切换歌曲时停止播放 Song_Index= (Song_Index+l) %3;/跳到下一首的开头Tone_lndex=0;数码管显示当前音乐段号P2二DSY_CODE Songndex;/定时器0中断函数 void T0_INT 0 interrupt 1TLO=LO_LISTSongSong_IndexTone.Index; THO=HI_LISTSongSong_IndexTone.Index; SPK=SPK;延时void DelayMS(uint ms)uchar t;while(ms) for (t=0;t120;t+); /主程序void mainOP2=0xc0;/TO方式0S
33、PK=0;TMOD=0x00;IE=0x83;ITO=1;IP=0x02;while(1)while (Kl=l); while (Kl=0); TRO=1;Tone_lndex=0;未按键等待等待释放开始播放从第0个音符开始播放过程中按下K1可提前停止播放(Kl=0)若切换音乐段会触发外部中断,导致TRO=O,播放也会停止while(SongSong_IndexTone_Index!=-1&K1=1&TRO=1)DelayMS (300札enSong_Index Tone_Index);/播放延时(节拍)Tone_Index+;/当前音乐段的下一音符索引TRO=O;停止播放while(Kl=
34、0);若提前停止播放,按键未释放时等待十三. 泄时器控制交通指示灯/*名称:定时器控制交通指示灯说明:东西向绿灯亮5s后,黄灯闪烁,闪烁5次亮红灯, 红灯亮后,南北向由红灯变成绿灯,5s后南北向黄灯闪烁, 闪烁5次后亮红灯,东西向绿灯亮,如此往复。#includedefine uchar unsigned charSdefine uint unsigned int sbit RED_A=P(TO; 东西向指示 灯sbit YELLO虻A=P(T1;sbit GREEN_A 二 PO2;sbit RED_B=PO3; 南北向指示 灯sbit YELL0W-B=P(T4;sbit GREEN.B=
35、P(T5;C2Cli-E.f1 XI. 加12MC3 ne:Ue亠a .51X.壬X1/L1RST脚 232 AACPU叱顾rPl .3PI .4 Pl方 PM Pl.?P33T0 冷卯延时倍数,闪烁次数,操作类型变量uchar Time_Count=0 Flash_Count=0 Operat i on_Type=1;/定时器0中断函数void TO.INT 0 interrupt 1TLO二-50000/256; TH0=-50000%256;switch (Operation.Type)case 1: /东西向绿灯与南北向红灯亮5sRED=O; YELLOW.A=0; GREEN_A=1;RED_B=1; YELL0WJ=0; GREEN_B=O;if (+Time_Count!=100) return; /5s (100*50ms)切换 Time_Count=0;Operat i on_Type=2;break;case 2: 东西向黄灯开始闪烁,绿灯关闭if(+Time_Count!=8) r
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高考物理总复习专题十三热学第3讲热力学定律练习含答案
- 春运期间全程出行安全手册
- 《变压器的简单介绍》课件
- 九年级历史上册 第6课 古代世界的战争与征服教案1 新人教版
- 2024-2025学年高中历史 第二单元 古代历史的变革(下)第4课 商鞅变法与秦的强盛(1)教学教案 岳麓版选修1
- 2024年秋八年级物理上册 第一章 第4节 测量平均速度教案 (新版)新人教版
- 高中政治 第三专题 联邦制、两党制、三权分立:以美国为例 第四框题 美国的利益集团教案 新人教版选修3
- 2024年五年级语文上册 第二单元 语文园地二配套教案 新人教版
- 2023六年级数学上册 七 负数的初步认识第1课时 认识负数教案 西师大版
- 租赁工业吊扇合同范本(2篇)
- 特种设备安装安全协议合集3篇
- 2024年注册消防工程师题库(历年真题)
- 直流电机的维护
- 挖掘机操作收藏手册
- 读书感悟《活在课堂里》第四辑
- 《勾股定理逆定理》观评课报告
- 生物科学师范生生涯发展报告
- 职业生涯规划生物学科教师
- 监理办公室岗位责任制度牌
- 介绍方志敏(修订版)
- 国家非物质文化遗产竹编
评论
0/150
提交评论