资源描述:
《单片机数码管led灯控制》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、编写c程序用直接赋值法实现单片机控制P0口的共阳数码管,单片机分别控制P2.0,P2.3,P2.6的红色,黄色,绿色LED,要求开机红灯亮,同时单位数码管开始以9为初始值进行程序延时1S每次减1倒计时显示,当数据显示为0时红灯熄灭,数码管停止显示。接着黄色LED以0.5S的时间间隔闪烁3次。接着绿灯亮,同时单位数码管开始以7为初始值进行程序延时1S每次减1倒计时显示,当数据为0时绿灯熄灭,数码管停止显示,黄色LED以0.5S的时间间隔闪烁3次,以上动作循环进行。#includeunsignedchartable[]={0
2、x90,0x80,0xf8,0x82,0x92,0x99,OxbO,0xa4,0xf9,OxcO);//9876543210sbitred=P20;//红灯sbityellow=P2*3;//黄灯sbitgreen=P2*6;//绿灯unsignedinta,b,z,i,j,n,m=l;voidmain(){THOD二0x11;//设置定时计数器中断Tl、TO的工作方式1TII0二0x3c;TLO二0x80;//以5000微妙微定时时长ETO二1;//开启T0中断TRO二1;〃启动T0THl=0x3c;TLl=0x80;//以5000微妙
3、微定时时长ET1=1;〃开启T1中断TR1=O;//不启动T1EA=1;while(1);}voidT0_time()interrupt1//七段数码管的中断{辻(a==20)//num二20时,时间为Is{switch(m)//m值对数显和灯闪进行控制{case1:〃进入红灯黄灯阶段if(i<10){a=0;Portable[i];//数码管从9-0显示red=l;//仅红灯亮yellow=0;green=0;i++;else//当i>二10时,数码管从9-0显示完毕,开始进入黄灯闪烁阶段{P0二Oxff;//数码管黑屏red=0;ye
4、llow=l;//仅黄灯亮green二0;TRO二0;〃关闭T0TR1二1;//开启T1n二1;z=0;}break;case2:〃进入绿灯黄灯阶段if(j<8){a=0;Portable[j+21;//数码管从7-0显示green二1;〃仅绿灯亮ye1low二0;red=0;j++;}else〃当i>二8时,数码管从7-0显示完毕,开始进入黄灯闪烁阶段{P0二Oxff;//数码管黑屏red二0;green二0;yellow=l;〃仅黄灯亮TRO=O;〃关闭TOTR1二1;//开启T1n=0;z=0;}break;a++;voidTl_t
5、ime()interrupt3//设置黄灯闪烁阶段的中断if(b==10)//numl=10时长设置为0.5s{b二0;//清零if(z<6)//设置黄灯闪烁次数,亮灭共5次{yellow二!yellow;z++;}else〃黄灯闪烁完毕后,进入数码管7-0显示{TR1二0;TRO=1;a=0;if(n~0){呼1;//进入红灯黄灯阶段i二0;}elsem二2;〃进入绿灯黄灯阶段j二0;}}b++;}流程图:分析与讨论:1、实验中采用了屮断嵌套的方法,通过设置TRO,TR1的值对屮断T0T1进行开启关闭的控制,从而对程序运行进行控制。2、
6、将初值设置为50000微秒,利用公式t二(2的16次・a)*12/fosc,(=50000,得a=3c8O<>当设置时间为Is时,循坏20次,当设置时间为0.5s时,循坏10次。3、主函数检测到中断T0_time后,由于TR0=l,TR1=O,执行easel语句,i自加,当i小于10时,数码管从9-0显示,同事红灯亮,当i=10时,数码管不再显示数码,同事关闭了TR0,开启TR1,通过Tl_time中断,进入黄灯闪烁阶段,由于要求闪烁3次,既亮灭一共6次,换言之就是yellow二!yellow要执行6次,故z从0-5变化。当黄灯闪烁完毕后
7、,再通过TR0=l,TR1=O,同时m=2,进入中断T0_time的case2语句,j自加,当j小于8时,数码管从7-0显示,同事红灯亮,当j=8时,数码管不再显示数码,同事关闭了TR0,开启TR1,通过Tl_lime屮断,进入黄灯闪烁阶段,重复上述步骤。#include#defineuintunsignedint#defineucharunsignedcharsbitr=P2A0;〃定义P2.0口为红色led输出口sbity=P2A3;〃定义P2.3口为绿色led输出口sbitg=P2A6;〃定义P2.6口为黄色led
8、输出口uintnum,inc1,inc2,tmp,flag;ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9