参考程序
OUTPORT EQU 0CFB0H
CSEG AT 0000H
LJMP START
CSEG AT 401BH ;定时器/计数器1中断程序入口地址
LJMP INT
CSEG AT 4100H
START: MOV A,#01H ;首显示码
MOV R1,#03H ;03是偏移量,即从基址寄存器到表首的距离
MOV R0,#5H ;05是计数值
MOV TMOD,#10H ;计数器置为方式1
MOV TL1,#0AFH ;装入时间常数
MOV TH1,#03CH
ORL IE,#88H ;CPU中断开放标志位和定时器
;1溢出中断允许位均置位
SETB TR1 ;开始计数
LOOP1: CJNE R0,#00,DISP
MOV R0,#5H ;R0计数计完一个周期,重置初值
INC R1 ;表地址偏移量加1
CJNE R1,#31H,LOOP2
MOV R1,#03H ;如到表尾,则重置偏移量初值
LOOP2: MOV A,R1 ;从表中取显示码入累加器
MOVC A,@A+PC
JMP DISP
DB 01H,03H,07H,0FH,1FH,3FH,7FH,0FFH,0FEH,0FCH
DB 0F8H,0F0H,0E0H,0C0H,80H,00H,0FFH,00H,0FEH
DB 0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH,0BFH,0DFH
DB 0EFH,0F7H,0FBH,0FDH,0FEH,00H,0FFH,00H
DISP: ;MOV DPTR,#OUTPORT
;MOVX @DPTR,A
MOV P1,A ;将取得的显示码从P1口输出显示
JMP LOOP1
INT: CLR TR1 ;停止计数
DEC R0 ;计数值减一
MOV TL1,#0AFH ;重置时间常数初值
MOV TH1,#03CH
SETB TR1 ;开始计数
RETI ;中断返回
END
光敏电阻测光强不是很准确。最简单的思路,两个光敏电阻,电路上每个光敏电阻只要一个分压电路即可。如果左面光敏电阻光照强,光敏电阻上的电压变化,则步进电机往左转,右边同理。但要注意分压电路电阻参数要选合适。两个光敏电阻上的电压可以接比较器或者AD输回单片机。当时我是用舵机做的,但这个思路很明显的一个问题就是太阳位于两个光敏电阻之间时步进电机会抖,可以调整步进电机的步进值,抖的就不会那么厉害了
太简单了
#include <reg52 h>
sbit key1=P0^1;
sbit out=P1^0;
void main()
{
while(1)
{
if(key1==0)
{
delay(ms);
if(key1==0)
out=~out;
delay();
out=1;
}
}
}
在实验板上写的,放心用吧希望对你有帮助
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
方法一:查表法
;;;;;;;;;;;;;;;;;;;;;;;;;;
;作者:w418781840200865 /
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LED EQU P1
FLAG BIT 00H ;定义标志位
ORG 0
LJMP MAIN
ORG 0BH
LJMP AGA
;;;;;;主程序;;;;;;;;;;;;
ORG 0030H
MAIN: CLR FLAG ;标志位清0
;; CLR P20;打开灯开关
MOV TMOD,#01H ;赋值50MS
MOV TH0,#3CH
MOV TL0,#0B0H
MOV R0,#4 ;中断450=200MS
SETB EA
SETB ET0 ;开中断
SETB TR0
WQ: LCALL LENG ;调用
SJMP WQ
;;;;;;;;;中断服务程序;;;;;;;;;;;;;;
AGA: MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R0,LOOP ;02S到否否,返回
MOV R0,#4
SETB FLAG
LOOP: RETI
;;;;;;;;;;
LENG: MOV R1,#0
MOV DPTR,#TAB
LOP: MOV A,R1
MOVC A,@A+DPTR
MOV LED,A
JNB FLAG,$
CLR FLAG
INC R1
CJNE A,#0EEH,LOP
TAB: DB 0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,080H,00H;左渐亮
DB 080H,0C0H,0E0H,0F0H,0F8H,0FCH,0FEH,0FFH ;右渐亮
DB 7EH,3CH,18H,00H; 两边点亮值
DB 0FFH,00H,0FFH,00H,0FFH,0EEH,;闪烁两次,0EEH为结束标志
RET
END
;;;;;;;;;;;;;;;;;;;;;
方法二:不知道法,呵呵
;;;;;;;;;;;;;;;;;;;;;;;;;;
;程序功能:简单彩灯控制系统
;作者:w418781840200865 /
;;;;;;;;;;;;;;声明区;;;;;;;;;;;;;;;;;
LED EQU P1
FLAG BIT 00H ;定义标志位
ORG 0
LJMP MAIN
ORG 0BH
LJMP AGA
;;;;;;主程序;;;;;;;;;;;;
ORG 0030H
MAIN: CLR FLAG ;标志位清0
MOV TMOD,#01H ;赋值50MS
MOV TH0,#3CH
MOV TL0,#0B0H
MOV R0,#4 ;中断450=200MS
SETB EA
SETB ET0 ;开中断
SETB TR0
WQ: LCALL LED1 ;调用
LCALL LED2
LCALL LED3
SJMP WQ;;不断循环
;;;;;;;;;中断服务程序;;;;;;;;;;;;;;
AGA: MOV TH0,#3CH
MOV TL0,#0B0H
DJNZ R0,LOOP ;02S到否否,返回
MOV R0,#4
SETB FLAG
LOOP: RETI
;;;;;;LED子程序区;;;;;;;;;;
;;;;左移渐亮;;;;;;;;;;;
LED1: CLR C ;灯低电平亮
MOV A,#0FFH
LOP1: RLC A
MOV LED,A
JNB FLAG,$ ;02不到,等待
CLR FLAG ;清0,
CJNE A,#0,LOP1 ;不全亮,返回
RET
;;右移渐亮;;;;;;;
LED2: SETB C
LOP2: RRC A
MOV LED,A
JNB FLAG,$
CLR FLAG
CJNE A,#0FFH,LOP2
RET
;;;;;两边亮;;;;;
LED3: MOV R1,#0
MOV DPTR,#TAB
LOP3: MOV A,R1
MOVC A,@A+DPTR
MOV LED,A
JNB FLAG,$
CLR FLAG
INC R1
CJNE A,#0,LOP3
;;;闪烁;;;;;;;;;
MOV R2,#2
LOP4: CPL A
MOV LED,A
JNB FLAG,$
CLR FLAG
DJNZ R2,LOP4;;
TAB: DB 7EH,3CH,18H,00H; 两边点亮值
RET
END
以上就是关于单片机课程设计:循环灯控制系统全部的内容,包括:单片机课程设计:循环灯控制系统、求52单片机的太阳能跟踪控制系统的 c语言程序、求基于51单片机的车窗升降控制系统c语言程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)