单片机计时器原理亮一秒灭一秒的程序,求

扫二维码下载作业帮
3亿+用户的选择
下载作业帮安装包
扫二维码下载作业帮
3亿+用户的选择
单片机定时器应用实验用80C51内部定时器1,按方式1工作,即作为16位定时器使用,每0.05秒钟T1溢出中断一次.P1口的P1.0-P1.7分别接八个发光二极管.要求编写程序模拟一时序控制装置.开机后第一秒钟L1,L3亮,第二秒钟L2,L4亮,第三秒钟L5,L7亮,第四秒钟L6,L8亮,第五秒L1,L3,L5,L7亮,第六秒钟L2,L4,L6,L8亮,第七秒钟八个二极管全亮,第八秒钟全灭,以后又从头开始,L1,L3亮,然后L2,L4亮.一直循环下去.
作业帮用户
扫二维码下载作业帮
3亿+用户的选择
完全一样的题目呀,真幸运,看我的吧(我的是8052的,没关系的):汇编程序:S1&&&EQU&30HS2&&&EQU&31H&&&ORG&0000H&&&AJMP&MAIN&&&ORG&001BH&&&AJMP&INTT1&&&ORG&0100HMAIN:&&ANL&TMOD,#0FH&&&ORL&TMOD,#10H&&&MOV&TH1,#3CH&&&MOV&TL1,#0B0H&&&SETB&EA&&&SETB&ET1&&&SETB&TR1&&&MOV&DPTR,#TABLE&&&MOV&S1,#00H&&&MOV&S2,#00HLP:&&&MOV&A,S2&&&MOVC&A,@A+DPTR&&&MOV&P1,A&&&AJMP&LPINTT1:&PUSH&ACC&&&INC&S1&&&MOV&A,S1&&&CJNE&A,#20,NEXTT1&&&MOV&S1,#00H&&&INC&S2&&&ANL&S2,#07HNEXTT1:&POP&ACC&&&RETITABLE:&DB&05H,0AH,50H,0A0H,55H,0AAH,0FFH,00HC语言程序:#include&reg52.h&unsigned&char&s1=0,s2=0;unsigned&char&code&table[]={0x05,0x0A,0x50,0xA0,0x55,0xAA,0xFF,0x00};void&main(){TMOD=(TMOD&0X0F)|0X10;TH1=0X3C;TL1=0XB0;EA=1;ET1=1;TR1=1;while(1)&{&P1=table[s2];&}}void&t1(void)&interrupt&3&using&0{s1++;if(s1==20)&{&s1=0;&s2++;&s2=s2&0x07;&}}
为您推荐:
扫描下载二维码要求实现两盏LED灯交替闪烁,间隔时间为2秒 用51单片机实现_百度知道
要求实现两盏LED灯交替闪烁,间隔时间为2秒 用51单片机实现
我有更好的答案
根据你的单片机硬件接线图,把小灯的端口对应改一下就可以了#include& TR0 = 1;
while(1) {
if(TF0 == 1)
TH0 = ()/256;//
led_1 = 0.h&#define uint unsigned int#define uchar unsigned charsbit led_1 = P2^1;sbit led_2 = P2^2;void main(){ TMOD =0x01; TH0 = ()/50ms TL0 = ()%256; EA = 1; ET0 = 1;
led_2 = 0;
if(count == 80)
count = 0;
led_2 = 1;//256;
if(count == 40)
led_1 = 1;50ms
TL0 = ()%256;
count++;reg52
采纳率:73%
问题不难,设置好内部计时器和IO口,单片机开发问题或许我可帮助的。
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。求助一个STC单片机简单的定时程序、、(已完成)|我爱单片机 - 数码之家
查看完整版本: [--
赞助商链接
我想用STC15F104E的单片机做一个简单的定时器,上电就开始计时,继电器吸合,LED每秒闪一次,8小时后继电器断开,LED熄灭。看看那位大侠能帮忙写程序,谢谢了!原理图如下[attachment=4390908] 经过测试8小时定时器已经非常稳定了,目前暂时没发现BUG,今日做出实物准备投入使用,非常感谢 和热心坛友帮忙编写程序。[attachment=4397753][attachment=4397752]
赞助商链接
我以前做过,稍微改了下,你看看有没有bug,有问题在改改吧#include&reg52.h&#define uint unsigned int#define uchar unsigned charsbit led = P3^4;sbit out =P3^5;uchar aa,num,time,time1;void delay(uint z){&&&&uint x,y;&&&&for(x=z;x&0;x--)&&&&&&&&for(y=110;y&0;y--);}void init(){&&&&TMOD=0x01;&&&&TH0=()/256;&&&&TL0=()%256;&&&&EA=1;&&&&ET0=1;&&&&TR0=1;&&&&aa=0;&&&&num=0;&&&&time=0;&&&&time1=0;&&&&out=0;}void main(){&&&&init();&&&&while(1)&&&&{&&&&&&&&if(aa==20) //如果到了1S&&&&&&&&&&&&{&&&&&&&&&&&&&&&&aa=0; //清零aa&&&&&&&&&&&&&&&&num++; //秒数累加&&&&&&&&&&&&&&&&led=~ //闪灯&&&&&&&&&&&&}&&&&&&&&if(num==60) //如果到了1min&&&&&&&&&&&&{&&&&&&&&&&&&&&&&num=0; //清零秒数&&&&&&&&&&&&&&&&time++; //累加分钟&&&&&&&&&&&&}&&&&&&&&if(time==60) //如果到了60min(1h)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&time=0; //清零分钟&&&&&&&&&&&&&&&&time1++;//累加小时&&&&&&&&&&&&}&&&&&&&&if(time1==8) //如果到了8h&&&&&&&&&&&&{&&&&&&&&&&&&&&&&time1=0; //小时清零&&&&&&&&&&&&&&&&out=1; //关输出&&&&&&&&&&&&&&&&TR0=0; //关掉定时器&&&&&&&&&&&&&&&&while(1); //停在这里死循环,其实可以把单片机挂到掉电模式,如果喜欢自己写吧&&&&&&&&&&&&}&&&&}}void timer0() interrupt 1{&&&&TH0=()/256; //每50MS产生一次中断,给寄存器装初值并累加aa&&&&TL0=()%256;&&&&aa++;}
赞助商链接
楼主搜索坛友的帖子,有人发过了,我也曾经仿制成功了。
:我以前做过,稍微改了下,你看看有没有bug,有问题在改改吧#include&reg52.h&#define uint unsigned int#define uchar unsigned charsbit led = P3^4;....... ( 05:00) 我大概看了一下,,有BUG哦,,楼主的要求是一秒闪一下,,,代码里成了一秒亮一秒灭了,,,退货退货,,
:我以前做过,稍微改了下,你看看有没有bug,有问题在改改吧#include&reg52.h&#define uint unsigned int#define uchar unsigned charsbit led = P3^4;.......( 05:00)嬀/color]其实不用这样麻烦,一秒的定时,让LED闪烁,然后1秒累加,累加到8*60*60=28800,断开继电器。哪用这么多判断?一个分判断,一个时判断,还来一个8小时判断,太复杂了。
:其实不用这样麻烦,一秒的定时,让LED闪烁,然后1秒累加,累加到8*60*60=28800,断开继电器。哪用这么多判断?一个分判断,一个时判断,还来一个8小时判断,太复杂了。 ( 07:37) 那样要用int型来存储变量了,虽然用两个char型占用的内存空间是一样的其实写成这样想要修改时间比较方便,弄成时分秒。。。这个是被学单片机时写的各种时钟程序害的
:其实不用这样麻烦,一秒的定时,让LED闪烁,然后1秒累加,累加到8*60*60=28800,断开继电器。哪用这么多判断?一个分判断,一个时判断,还来一个8小时判断,太复杂了。 ( 07:37) 我觉得这样,简单易行,直接用i--就搞定了,适合初学者
:我觉得这样,简单易行,直接用i--就搞定了,适合初学者 ( 09:02) 这样有些麻烦啊,首先51的单片机在12M的内存频率下无法做1S的定时,必须自己重装初值然后再累加,如果全用一个变量就会连unsigned int的范围都超出。。。而且那么做不会觉得算起来很麻烦吗,我感觉还是一层层累加看着比较清楚,修改起来方便些
照1楼改下,清简了很多#include&reg52.h&#define uint unsigned int#define uchar unsigned charsbit led = P3^4;sbit out =P3^5;void init(){&&&&TMOD=0x01;&&&&TH0=()/256;&&&&TL0=()%256;&&&&EA=1;&&&&ET0=1;&&&&TR0=1;&&&&aa=0;&&&&time=0;&&&&out=0;}void main(){&&&&init();&&&&while(1);}void timer0() interrupt 1{&&&&TH0=()/256; //每50MS产生一次中断,给寄存器装初值并累加aa&&&&TL0=()%256;&&&&aa++;&&&&&&&& if(aa&=10) //如果到了0.5S&&&&&&&&&&&&{&&&&&&&&&&&&&& led=~&&&&&&&&&&&&&&&&aa=0; //清零aa&&&&&&&&&&&&&&&&time++;&&&&&&&&&&&&&&&&&&&&&&&&&&&&if(time&=57600)//2*8*60*60=57600&&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&out=1;led=1;TR0=0;&&&&&&&&&&&&&&&& }&&&&&&&&&&}&&&&&&&&&&&&&&&&&&}
嗯 我也改过个。3分钟后通电 是40分钟后断电&&用在紫外线灯上
:我以前做过,稍微改了下,你看看有没有bug,有问题在改改吧#include&reg52.h&#define uint unsigned int#define uchar unsigned charsbit led = P3^4;....... ( 05:00) 兄弟,我搭好电路试过了,之前出现点小错误,现在已经可以了,谢谢啊!目前正在测试。待续、、、、[attachment=4393133]
:兄弟,我搭好电路试过了,这个程序不行,通电后LED不秒闪继电器也不吸合,一点反应也没有,你看看是不是那里写错了?? ( 15:45) 我想应该不是程序的问题单片机工作了吗?这电路里没有晶振,下载时设置成内部RC振荡器,要不然单片机不工作的
:我以前做过,稍微改了下,你看看有没有bug,有问题在改改吧#include&reg52.h&#define uint unsigned int#define uchar unsigned charsbit led = P3^4;....... ( 05:00) 顺便请教一下,如果改时间(比如把时间改成6小时)是不是改下面这里???&&if(time1==8) //如果到了8h&&&&&&&&改成&&if(time1==6)
:顺便请教一下,如果改时间(比如把时间改成6小时)是不是改下面这里???  if(time1==8) //如果到了8h        改成  if(time1==6)....... ( 16:01) 没错的,改这个就行了如果RC振荡器频率设置不一样要重新计算下定时器初值,算50MS的,STC官网Stc-ISP上就有这个功能
:我想应该不是程序的问题单片机工作了吗?这电路里没有晶振,下载时设置成内部RC振荡器,要不然单片机不工作的 ( 15:51) 已经改正,不是你的程序问题,是我操作小失误,现在已经正常工作,我改成1小时测试中、、、、、有问题会及时反馈,非常感谢你的热心帮助
:没错的,改这个就行了如果RC振荡器频率设置不一样要重新计算下定时器初值,算50MS的,STC官网Stc-ISP上就有这个功能 ( 16:09) 已经改正,是我自己的小错误,程序是正确的,看10楼
:已经改正,是我自己的小错误,程序是正确的,看10楼[表情] ( 16:16) 你可以先改下程序改成10分钟啥的看看准不准,要不然等8小时太慢了把if(time1 == 8)这一块整个注释掉,然后前面那段改成if(time==10),下面的大括号里加上out=1,就是10分钟的了
:你可以先改下程序改成10分钟啥的看看准不准,要不然等8小时太慢了把if(time1 == 8)这一块整个注释掉,然后前面那段改成if(time==10),下面的大括号里加上out=1,就是10分钟的了 ( 16:19) 确实,测试等8小时太久了,我现在改成2小时的测试着,你说的改成10分钟测试我不懂程序,所以看不懂应该怎么改,你能不能把这段改好的程序发出来呀??麻烦你了。
做成带数码管可调的就很好;STC104&&&&6胶可用,其中2脚是晶振;还剩余4脚,2脚接按键,2脚接芯片(2线驱动2位或3,4位数码管);或者还有种就是1个教接按键,其它3个脚接595芯片驱动数码管;只是得通过一个按键的时间长短来判断功能的调制;即保证精度又可靠,或者直接将一个按键换成红外接收头,实现的功能更多,调节也更方便;3种方案选其一种
:照1楼改下,清简了很多#include&reg52.h&#define uint unsigned int#define uchar unsigned char....... ( 13:41) 谢谢大侠的修改,测试了一下,程序正常,顺便请教一下,改定时时间是不是改下面这段程序???(如果改成1小时是不是改成if(time&=7200))if(time&=57600)//2*8*60*60=57600
:确实,测试等8小时太久了,我现在改成2小时的测试着,你说的改成10分钟测试我不懂程序,所以看不懂应该怎么改,你能不能把这段改好的程序发出来呀??麻烦你了。
#include&reg52.h&#define uint unsigned int#define uchar unsigned charsbit led = P3^4;sbit out =P3^5;uchar aa,num,time,time1;void delay(uint z){&&&&uint x,y;&&&&for(x=z;x&0;x--)&&&&&&&&for(y=110;y&0;y--);}void init(){&&&&TMOD=0x01;&&&&TH0=()/256;&&&&TL0=()%256;&&&&EA=1;&&&&ET0=1;&&&&TR0=1;&&&&aa=0;&&&&num=0;&&&&time=0;&&&&time1=0;&&&&out=0;}void main(){&&&&init();&&&&while(1)&&&&{&&&&&&&&if(aa==20) //如果到了1S&&&&&&&&&&&&{&&&&&&&&&&&&&&&&aa=0; //清零aa&&&&&&&&&&&&&&&&num++; //秒数累加&&&&&&&&&&&&&&&&led=~ //闪灯&&&&&&&&&&&&}&&&&&&&&if(num==60) //如果到了1min&&&&&&&&&&&&{&&&&&&&&&&&&&&&&num=0; //清零秒数&&&&&&&&&&&&&&&&time++; //累加分钟&&&&&&&&&&&&}&&&&&&&&if(time==10) //如果到了60min(1h)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&time=0; //清零分钟&&&&&&&&&&&&//&&&&time1++;//累加小时&&&&&&&&&&&&&&&&out=1;&&&&&&&&&&&&&&&&TR0=0;&&&&&&&&&&&&&&&&while(1);&&&&&&&&&&&&}&&&&/*&&&&if(time1==8) //如果到了8h&&&&&&&&&&&&{&&&&&&&&&&&&&&&&time1=0; //小时清零&&&&&&&&&&&&&&&&out=1; //关输出&&&&&&&&&&&&&&&&TR0=0; //关掉定时器&&&&&&&&&&&&&&&&while(1); //停在这里死循环,其实可以把单片机挂到掉电模式,如果喜欢自己写吧&&&&&&&&&&&&}*/&&&&}}void timer0() interrupt 1{&&&&TH0=()/256; //每50MS产生一次中断,给寄存器装初值并累加aa&&&&TL0=()%256;&&&&aa++;}
:照1楼改下,清简了很多#include&reg52.h&#define uint unsigned int#define uchar unsigned char....... ( 13:41) 测试了几次你修改的这个程序,我把&&if(time&=57600)//2*8*60*60=57600&&改成 if(time&=120) 一分钟测试,上电测试发现实际时间要比程序设置的时间慢5秒继电器才释放,那么如果按照8小时(57600)计算的话定时时间会慢40分钟继电器才释放,请教这是单片机误差还是程序的计算不对呢??
:其实不用这样麻烦,一秒的定时,让LED闪烁,然后1秒累加,累加到8*60*60=28800,断开继电器。哪用这么多判断?一个分判断,一个时判断,还来一个8小时判断,太复杂了。 ( 07:37) 说起来貌似如此,但是细想下还会有问题,楼主的问题并没有说怎样的闪法,如果是亮1s熄灭1s,就最好控制了,如果只是短短的闪一下就麻烦些了,定时器的时基选多少毫秒合适就要看要求了。
:说起来貌似如此,但是细想下还会有问题,楼主的问题并没有说怎样的闪法,如果是亮1s熄灭1s,就最好控制了,如果只是短短的闪一下就麻烦些了,定时器的时基选多少毫秒合适就要看要求了。( 20:29)嬀/color]楼主说一秒闪一次。看楼主意思,一秒闪一次是为了知道秒在冷却,也美观些。这个闪烁也没有严格要求。
:这样有些麻烦啊,首先51的单片机在12M的内存频率下无法做1S的定时,必须自己重装初值然后再累加,如果全用一个变量就会连unsigned int的范围都超出。。。而且那么做不会觉得算起来很麻烦吗,我感觉还是一层层累加看着比较清楚,修改起来方便些 ( 09:16) 可以用中断做定时啊另外,你可以用两层嵌套嘛,反正只跑这一个程序,效率不是很关键
:#include&reg52.h&#define uint unsigned int#define uchar unsigned charsbit led = P3^4;....... ( 17:45) 谢谢兄弟,刚才烧入单片机上电测试,我把10分钟改为2分钟,测试了几次发现时间都是慢了整整10秒继电器才释放,这是什么原因造成的呢?是不是单片机计时不准确呢??
:谢谢兄弟,刚才烧入单片机上电测试,我把10分钟改为2分钟,测试了几次发现时间都是慢了整整10秒继电器才释放,这是什么原因造成的呢?是不是单片机计时不准确呢?? ( 21:04) 单片机片内RC振荡器不准确吧,不过这单片机没法外接晶振,,程序来看应该不会有这么大误差,中断50MS才进一次,不可能出现进了中断累加了aa但是错过了秒数判断和累加的情况吧。。实在不行就只能外接时钟芯片了,DS1302之类
:单片机片内RC振荡器不准确吧,不过这单片机没法外接晶振,,程序来看应该不会有这么大误差,中断50MS才进一次,不可能出现进了中断累加了aa但是错过了秒数判断和累加的情况吧。。实在不行就只能外接时钟芯片了,DS1302之类 ( 21:12) 我编译的时候是按11.0592来设定的,不知道这样对吗?如果是RC振荡器不准确的话看来只能每分钟减掉5秒来计算了,也就是说8小时的定时只能在程序里面写入7小时,这样实际时间就是7小时40分左右继电器释放
:我编译的时候是按11.0592来设定的,不知道这样对吗?如果是RC振荡器不准确的话看来只能每分钟减掉5秒来计算了,也就是说8小时的定时只能在程序里面写入7小时,这样实际时间就是7小时40分左右继电器释放[表情] ( 21:25) 明白了,我在写代码时是按12M晶振写的。。怪不得错了改成12M再下载一遍吧
:明白了,我在写代码时是按12M晶振写的。。怪不得错了改成12M再下载一遍吧 ( 21:34) 我用STC_ISP_V488 版下载烧写软件在下载程序的时候显示我的15F104E单片机的 MCU Clock:11.0592MHz./时钟频率:11.0592M. 的,我如何按照12M来编译和下载会不会误差更大呢?
:我用STC_ISP_V488 版下载烧写软件在下载程序的时候显示我的15F104E单片机的 MCU Clock:11.0592MHz./时钟频率:11.0592M. 的,我如何按照12M来编译和下载会不会误差更大呢? ( 22:12) 这个和编译器没关系(那个怎么设置无所谓,是仿真用的,和hex文件没关系)是要在下载软件里设置的,另外现在stc的新下载软件早就有了,别用4.88老版本了设置成12M应该就行了吧
:这个和编译器没关系(那个怎么设置无所谓,是仿真用的,和hex文件没关系)是要在下载软件里设置的,另外现在stc的新下载软件早就有了,别用4.88老版本了设置成12M应该就行了吧
搞掂了,你说的果然没错,用新版本下载软件设置12M进行下载时间误差非常小,测试了8小时误差也就30秒左右,可以投入使用了,感谢大侠的热心帮助,谢谢!!!!
:照1楼改下,清简了很多#include&reg52.h&#define uint unsigned int#define uchar unsigned char....... ( 13:41) 这程序我测试了几次,电路非常稳定,谢谢!
实物今日总算做出来了,感谢 baiwenlongba和fang3 两位热心坛友帮忙编写程序。
不会是做定时充电用的吧?
:不会是做定时充电用的吧? ( 20:17) 你真聪明,就是用在电动车充电器里
:你真聪明,就是用在电动车充电器里[表情] ( 20:20) 关键是你不可能每次都能把电用完啊,比如电只用了一半,或三分之一,这时8小时显然会过充啦。
谢谢分享,留着备用
:照1楼改下,清简了很多#include&reg52.h&#define uint unsigned int#define uchar unsigned char....... ( 13:41) 谢谢分享资料学习学习
:#include&reg52.h&#define uint unsigned int#define uchar unsigned charsbit led = P3^4;....... ( 17:45) 谢谢分享资料支持一下
8楼的程序才是正确的写法&& 倒不是为楼主提供程序的朋友写的有错误 而是使用定时器应该注意 比较多的判断写在中断子程序中&&如果写在主程序中 会影响定时的精确程度而且 中断每次溢出的值如果过小 有可能在执行判断语句时所用的时间加在变量上让程序跑飞! 以上只是个人意见 如有不对之处 还请大家斧正
新手,我也有电动车留着备用,谢谢!
楼主这水平,菜的可以跟我有一拼
查看完整版本: [--
Powered by
Time 0.086191 second(s),query:5 Gzip enabled"led灯亮一秒熄灭两秒的c语言程序"的糗事
21915 好笑
你可能感兴趣:
糗事百科为大家收集了很多的led灯亮一秒熄灭两秒的c语言程序的糗事,各种关于led灯亮一秒熄灭两秒的c语言程序的爆笑经历、尴尬时刻和开心视频,想持续关注led灯亮一秒熄灭两秒的c语言程序的糗事就收藏本页吧.
扫码下载糗事百科app

我要回帖

更多关于 单片机延时一秒程序 的文章

 

随机推荐