单片机课程设计:循环灯控制系统

单片机课程设计:循环灯控制系统,第1张

参考程序

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语言程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10069993.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存