打印

求:“单片机花样流水灯程序”

[复制链接]
2225|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fjfjja|  楼主 | 2008-5-29 13:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
要求89C51用P1控制8只LED,P2.1控制一只蜂鸣器实现以下功能: 
一、发光二级管有5种工作状态,每隔5秒切换一次; 
二、第一种状态是8只LED以0.5秒的间隔一起闪烁。蜂鸣器也同步间歇鸣叫 
三、其他四种蜂鸣器不响,只有8只LED的花式变换。 

各位,如何才能让不同的LED花式之间每隔5秒切换呢?好像不是用查表的方法,因为要求这五种状态都是在五个子程序里。如何才能实现切换啊?其他的四种花式不用写上,只有子程序的空壳就可以! 
请大家帮帮忙!谢谢了!最好能写上程序,我刚学,不是太明白!

相关帖子

沙发
cgkdxx| | 2008-5-29 17:17 | 只看该作者

cgkdxx@yeah.net

使用特权

评论回复
板凳
fjfjja|  楼主 | 2008-5-30 12:27 | 只看该作者

三楼的谢谢了!

不过!这个简单的流水灯我还是会的!我已经找到答案了!谢谢!

以下是答案程序:
设一个标志位flag, 以标志位的5种状态对应发光二极管的5种工作状态,如当flag=1;发光二极管工作在1,当flag=2;发光二极管工作在2,......!然后根据定时器定时功能,5秒到,刷新flag的值,程序如下; 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
;/*程序功能:定时5S到切换LED显示状态. 
;作者:w418781840.2008.5.29 */ 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
FLAG BIT 30H ;定义标志位 
ORG 0 
LJMP MAIN 
ORG 0BH 
LJMP AGA 
;;;;;;主程序;;;;;;;;;;;; 
ORG 0030H 
MAIN: MOV FLAG,#01H ;标志位清0 
MOV TMOD,#01H ;赋值50MS 
MOV TH0,#3CH 
MOV TL0,#0B0H 
MOV R0,#100 ;中断100*50=5S 
SETB EA 
SETB ET0 
SETB TR0 
SJMP $ 
;;;;;;;;;中断服务程序;;;;;;;;;;;;;; 
AGA: MOV TH0,#3CH 
MOV TL0,#0B0H 
DJNZ R0,LOOP ;5S到否?否,返回 
INC FLAG ;到,标志加1 
MOV A,FLAG 
CJNE A,#05,L1 ;扫描5种状态了否? 
MOV FLAG,#01H ;是,归0,重新开始 
;;;;;;;;;切换程序;;;;;;;;;;;; 
L1: CJNE A,#01H,L2 ;判断是否是状态1?否,转判断2 
LCALL LED1 ;是,调有状态1 
SJMP LOOP ;返回 
L2: CJNE A,#02H,L3 ; 以下跟上面判断相同 
LCALL LED2 
SJMP LOOP 
L3: CJNE A,#03H,L4 
LCALL LED3 
SJMP LOOP 
L4: CJNE A,#04H,L5 
LCALL LED4 
SJMP LOOP 
L5: CJNE A,#05H,LOOP 
LCALL LED5 
LOOP: RETI 
;;;;;;LED子程序区;;;;;;;;;; 
LED1: RET 
LED2: RET 
LED3: RET 
LED4: RET 
LED5: RET 
///////////////// 
/////////////////////////////// 
/*程序功能:定时5S到切换LED显示状态. 

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

101

帖子

0

粉丝