文档库 最新最全的文档下载
当前位置:文档库 › 51单片机模拟交通信号灯要点

51单片机模拟交通信号灯要点

51单片机模拟交通信号灯要点
51单片机模拟交通信号灯要点

《单片机实验》设计报告交通信号灯模拟系统设计

学院:电子信息学院

专业:电子信息工程

学号: 2011301200106

姓名:卢毅

指导老师:茹国宝

时间: 2014年6月

交通信号灯模拟系统设计

姓名:卢毅专业:电子信息工程学号:201301200106 指导教师:茹国宝

摘要:

本系统以单片机为核心,主要应用单片机中定时器计数器,IO接口,中断系统等,结合8279键盘控制电路,数码管显示以及LED灯实现对十字路口交通信号灯的智能控制。成功实现了利用单片机的定时器定时,令十字路口的红绿灯交替点亮和熄灭,通过按键对红绿灯点亮和熄灭时间进行调整及设置以及对红绿灯点亮和熄灭时间进行倒计时时间显示等基本功能。并在此基础上进一步扩展,实现了对某些特殊功能的操作,如:突发紧急情况,所有路线全部红灯,或南北向(主干道)强制绿灯通行,以及东西向(次干道)强制绿灯等,并且可在交通高峰期(系统默认上午7:00-8:00,下午17:00-18:00)自动修改绿灯时间。系统功能完善,可操控性好,代码通俗易懂。

关键字:

51单片机交通信号灯智能控制 8279

主要功能:

分析题目可知,有两种方案设计的方法,也即两条不同的主干分别对应不同的方案,方案一以键盘控制为主干,穿插对系统时钟的检测,倒计时的检测等,系统主干为循环检测键盘是否被按下并作出相应操作。方案二以交通信号灯不同的点亮与熄灭状态为主干,即系统的主干是交通灯状态的循环,在循环中检测按键并作出相应调整。此次试验选择的是方案二,因为对方案一的代码实现比较复杂。信号灯的状态依次为:南北绿灯,东西红灯->南北黄灯,东西红灯->南北红灯,东西绿灯->南北红灯,东西黄灯。解决这部分问题的关键在于8279键盘扫描和相应的数码管显示,在实验帮助里有详细代码,另一个难点在于内置时钟和倒计时显示,这一部分内容通过使用单片机内的定时器能很好的解决,实验帮助五有详细的代码,通过定时器T1产生中断来定时,从而完成一秒的时间。具体详见附录代码。

设计的主要内容:

第一部分,系统开机界面,设置及人机互动的按键控制,流程图如下:

(相应的功能流程图中已给出)

第二部分,

系统主干部分,即交通信号灯4个大循环以及循环内部检测按键完成拓展功能

的实现,在循环内检测按键,实现相应功能,流程如下:

具体细节,例如定时器的设计等在纸质档报告中有详细分析,在这里就不赘述总结:

总的来说这次试验比较成功,题目要求的功能基本都实现了,对于单片机汇编程序语言的理解也更深刻了,课本上的知识比较分散,每部分之间都没有什么联系,通过实验很好的把各部分之间联系起来,加深记忆,更便于理解。唯一不足的是对于题目的考虑不周,特殊功能采用键盘扫描子程序解决了,而没有采用终端,使得程序应激性不好,没有很好的应变性。在以后的编程中会注意这方面的内容。

附录:(详细代码)

;-------------------------------------------------------

Z8279 EQU 0FF82H ;8279 状态/命令口地址

D8279 EQU 0FF80H ;8279 数据口地址

LEDMOD EQU 00H ;左边输入八位字符显示

;外部译码键扫描方式,双键互锁

LEDFEQ EQU 2FH ;扫描速率

LEDCLS EQU 0C1H ;清除显示 RAM

LEDWR0 EQU 80H ;设定的将要写入的显示RAM地址

READKB EQU 40H ;读 FIFO RAM 地址 0 的命令字

;-------------------------------------------------------

ORG 0000H

AJMP START

ORG 001BH ;INT T1 入口地址

AJMP INT_T1

ORG 0040H

START:

MOV SP,#60H

LCALL INIT8279 ;初始化8279

MOV R3,#0H ;时

MOV R2,#0H ;分

MOV R1,#0H ;秒

MOV R7,#0H ;倒计时时间

MOV R0,#20 ;50毫秒

MOV 40H,#0 ;用于改变主次干道时长比

MOV R6,#0FFH ;标志

MOV TMOD,#10H

MOV TL1,#00H ;50毫秒的时间常数

MOV TH1,#4CH

SETB EX0

SETB ET1

SETB EA ;允许中断

; 初始状态,全红灯

MOV DPTR,#8300H

MOV A,#0FH

MOVX @DPTR,A

; 键盘操作

WAIT:

LCALL GETKEY ;读键盘

CJNE A,#0FFH,CONT ;判断是否有键输入

MOV A,B

CJNE A,#3CH,KEY_C ;输入键是'C',转CLEAR_T LCALL CLEAR_T

KEY_C:

CJNE A,#3AH,KEY_A ;输入键是'A',转START_T LCALL START_T

KEY_A:

CJNE A,#3DH,KEY_D ;输入键是'D',转STOP_T LCALL STOP_T

KEY_D:

CJNE A,#3BH,KEY_E ;输入键是'B',转SET_T LCALL SET_T ;设置系统时间

KEY_E:

CJNE A,#3FH,KEY_B ;输入键是'F',转SET_COUT

LCALL SET_COUT ;设置倒计时间

KEY_B:

CJNE A,#3EH,CONT ;输入键是'E',转MONITOR AJMP MONITOR

CONT:

CJNE R6,#0FFH,WAIT;若无秒标志则循环

LCALL DISPLAY ;显示时间

MOV R6,#0 ;清标志

SJMP WAIT ;循环

MONITOR:

NOP

SJMP $ ;等待回到监控

;按键对应的功能

CLEAR_T: ;时间清零子程序

CLR TR1 ;关计数器

MOV R3,#0H ;小时清零

MOV R2,#0H ;分钟清零

MOV R1,#0H ;秒清零

MOV R0,#20 ;10毫秒清零

MOV R7,#0H ;倒计时时间清零

MOV R6,#0FFH ;置秒标志

RET

START_T: ;电子钟计时子程序

;程序主要部分

;程序开始执行后将循环在这部分

CIRCLE:

LCALL STATION1 ;南北绿灯,东西红灯

LCALL STATION2 ;南北绿灯闪转黄灯,东西红灯 LCALL STATION3 ;南北红灯,东西绿灯

LCALL STATION4 ;南北红灯,东西绿灯闪转黄灯 LJMP CIRCLE

RET

;STATION1

STATION1: ;南北绿灯,东西红灯

MOV R7,30H

MOV A,R7

ADD A,40H

MOV R7,A

MOV DPTR,#8300H

MOV A,#96H ;南北绿灯,东西红灯

SETB TR1

; 扫描键盘

WO1: LCALL GETKEY ;读键盘

CJNE A,#0FFH,JB1 ;判断是否有键输入

MOV A,B

CJNE A,#3FH,PUSHB1 ;若是按下F,则清零并且返回

MOV R4,#1

LCALL GETWORD ;读倒计时时间数

MOV A,B

MOV B,#10

DIV AB

SWAP A

ADD A,B

MOV R7,A ;保存输入的值

INC A

MOV 30H,A

LCALL DISPLAY ;显示时间

PUSHB1:

CJNE A,#3BH,PUSHC1 ;若是按下B,则清零并且返回WAIT CLR TR1 ;关计数器

MOV R3,#0H ;小时清零

MOV R2,#0H ;分钟清零

MOV R1,#0H ;秒清零

MOV R0,#20 ;10毫秒清零

MOV R7,#0H ;倒计时时间清零

MOV R6,#0FFH ;置秒标志

AJMP WAIT

PUSHC1:

CJNE A,#3CH,PUSHD1

MOV R7,#3 ;若按下C,输出3秒红灯

MOV DPTR,#8300H

MOV A,#0FH

MOVX @DPTR,A

PUSHD1:

CJNE A,#3DH,PUSHE1 ;若按下D,南北绿灯5秒

MOV R7,#5

MOV A,#96H

MOVX @DPTR,A

PUSHE1:

CJNE A,#3EH,JB1

MOV R7,#5

MOVX @DPTR,A

JB1: CJNE R7,#0H,WO1

RET

;STATION2

STATION2:

MOV R7,#3

MOV DPTR,#8300H

MOV A,#06H

MOVX @DPTR,A

SETB TR1

WO2: LCALL GETKEY ;读键盘

CJNE A,#0FFH,JB2 ;判断是否有键输入

MOV A,B

CJNE A,#3FH,PUSHB2 ;若是按下F,则清零并且返回MOV R4,#1

LCALL GETWORD ;读倒计时时间数

MOV A,B

MOV B,#10

DIV AB

SWAP A

ADD A,B

MOV R7,A ;保存输入的值

INC A

MOV 30H,A

LCALL DISPLAY ;显示时间

PUSHB2:

CJNE A,#3BH,PUSHC2 ;若是按下B,则清零并且返回WAIT CLR TR1 ;关计数器

MOV R3,#0H ;小时清零

MOV R2,#0H ;分钟清零

MOV R1,#0H ;秒清零

MOV R0,#20 ;10毫秒清零

MOV R7,#0H ;倒计时时间清零

MOV R6,#0FFH ;置秒标志

AJMP WAIT

PUSHC2:

CJNE A,#3CH,PUSHD2

MOV R7,#3 ;若按下C,输出3秒红灯

MOV DPTR,#8300H

MOV A,#0FH

MOVX @DPTR,A

PUSHD2: CJNE A,#3DH,PUSHE2 ;若按下D,南北绿灯5秒

MOV R7,#5

MOV A,#96H

MOVX @DPTR,A

PUSHE2: CJNE A,#3EH,JB2

MOV R7,#5

MOV A,#69H

MOVX @DPTR,A

JB2: CJNE R7,#0H,WO2

RET

;STATION3

STATION3: ;南北红灯,东西绿灯

MOV R7,30H

MOV DPTR,#8300H

MOV A,#69H

MOVX @DPTR,A

SETB TR1

WO3: LCALL GETKEY ;读键盘

CJNE A,#0FFH,JB3 ;判断是否有键输入

MOV A,B

CJNE A,#3FH,PUSHB3 ;若是按下F,则清零并且返回

MOV R4,#1

LCALL GETWORD ;读倒计时时间数

MOV A,B

MOV B,#10

DIV AB

SWAP A

ADD A,B

MOV R7,A ;保存输入的值

INC A

MOV 30H,A

LCALL DISPLAY ;显示时间

PUSHB3:

CJNE A,#3BH,PUSHC3 ;若是按下B,则清零并且返回WAIT CLR TR1 ;关计数器

MOV R3,#0H ;小时清零

MOV R2,#0H ;分钟清零

MOV R1,#0H ;秒清零

MOV R0,#20 ;10毫秒清零

MOV R7,#0H ;倒计时时间清零

MOV R6,#0FFH ;置秒标志

AJMP WAIT

PUSHC3:

CJNE A,#3CH,PUSHD3

MOV R7,#3 ;若按下C,输出3秒红灯

MOV DPTR,#8300H

MOV A,#0FH

MOVX @DPTR,A

PUSHD3: CJNE A,#3DH,PUSHE3 ;若按下D,南北绿灯5秒

MOV R7,#5

MOV A,#96H

MOVX @DPTR,A

PUSHE3: CJNE A,#3EH,JB3

MOV R7,#5

MOV A,#69H

MOVX @DPTR,A

JB3: CJNE R7,#0H,WO3

RET

;STATION4

STATION4:

MOV R7,#3

MOV DPTR,#8300H

MOV A,#09H

MOVX @DPTR,A

SETB TR1

WO4: LCALL GETKEY ;读键盘

CJNE A,#0FFH,JB4 ;判断是否有键输入

MOV A,B

CJNE A,#3FH,PUSHB4 ;若是按下F,则清零并且返回MOV R4,#1

LCALL GETWORD ;读倒计时时间数

MOV A,B

MOV B,#10

DIV AB

SWAP A

ADD A,B

MOV R7,A ;保存输入的值

INC A

MOV 30H,A

LCALL DISPLAY ;显示时间

PUSHB4:

CJNE A,#3BH,PUSHC4 ;若是按下B,则清零并且返回WAIT CLR TR1 ;关计数器

MOV R3,#0H ;小时清零

MOV R2,#0H ;分钟清零

MOV R1,#0H ;秒清零

MOV R0,#20 ;10毫秒清零

MOV R7,#0H ;倒计时时间清零

MOV R6,#0FFH ;置秒标志

AJMP WAIT

PUSHC4:

CJNE A,#3CH,PUSHD4

MOV R7,#3 ;若按下C,输出3秒红灯

MOV DPTR,#8300H

MOV A,#0FH

MOVX @DPTR,A

PUSHD4: CJNE A,#3DH,PUSHE4 ;若按下D,南北绿灯5秒 MOV R7,#5

MOV A,#96H

MOVX @DPTR,A

PUSHE4: CJNE A,#3EH,JB4

MOV R7,#5

MOV A,#69H

MOVX @DPTR,A

JB4: CJNE R7,#0H,WO4

RET

;电子钟停止的部分

STOP_T: ;电子钟停止计时子程序

CLR TR1

RET

;时钟设置部分

SET_T: ;设置初值子程序

CLR TR1 ;关计数器

MOV R4,#7

LCALL GETWORD ;读小时数

CJNE A,#0FFH,INVALID ;判断输入合法性

MOV A,B

ADD A,#232

JC INVALID ;判断输入小时值 < 24

MOV A,B

MOV B,#10

DIV AB

SWAP A

ADD A,B

MOV R3,A ;保存输入的值

MOV R4,#5

LCALL GETWORD ;读分钟数

CJNE A,#0FFH,INVALID ;判断输入合法性

MOV A,B

ADD A,#196

JC INVALID ;判断输入分钟数 < 60 MOV A,B

MOV B,#10

DIV AB

SWAP A

ADD A,B

MOV R2,A ;保存输入的值

MOV R4,#3

LCALL GETWORD ;读秒钟数

CJNE A,#0FFH,INVALID ;判断输入合法性

MOV A,B

ADD A,#196

JC INVALID ;判断输入分钟值 < 60 MOV A,B

MOV B,#10

DIV AB

SWAP A

ADD A,B

MOV R1,A ;保存输入的值

AJMP SET_TOK

SET_COUT:

MOV R4,#1

LCALL GETWORD ;读倒计时时间数

CJNE A,#0FFH,INVALID ;判断输入合法性

MOV A,B

MOV B,#10

DIV AB

SWAP A

ADD A,B

MOV R7,A ;保存输入的值

INC A

MOV 30H,A

AJMP SET_TOK

INVALID:

LCALL CLEAR_T ;时间清零

SET_TOK:

LCALL DISPLAY ;显示时间

RET

;读取输入按键的部分

GETWORD: ;读数子程序

WKEY1:

LCALL GETKEY ;读键盘

CJNE A,#0FFH,WKEY1;无键输入,则再读

MOV A,B

ADD A,#0C6H

JC ERROR1 ;判断输入是否大于9 MOV A,B

SUBB A,#30H

JC ERROR1 ;判断输入是否小于0

MOV R5,A

LCALL DISLED ;显示输入的字符

MOV B,#10

MUL AB

PUSH ACC ;保存输入的值WKEY2:

LCALL GETKEY ;读键盘

CJNE A,#0FFH,WKEY2;无键输入则再读

MOV A,B

ADD A,#0C6H ;判断输入是否大于9 JC ERROR2

MOV A,B

SUBB A,#30H ;判断输入是否小于0 JC ERROR2

DEC R4

MOV R5,A

LCALL DISLED ;显示输入的字符

MOV B,A

POP ACC

ADD A,B

MOV B,A ;把得到的值存在B MOV A,#0FFH ;置合法输入标志

AJMP KEYOK

ERROR2: POP ACC

ERROR1: MOV A,#0 ;置非法输入标志KEYOK: RET

;8279初始化

INIT8279: ;8279初始化子程序

PUSH DPH ;保存现场

PUSH DPL

PUSH ACC

LCALL DELAY ;延时

MOV DPTR ,#Z8279

MOV A,#LEDMOD ;置8279工作方式

MOVX @DPTR,A

MOV A,#LEDFEQ ;置键盘扫描速率

MOVX @DPTR,A

MOV A,#LEDCLS ;清除 LED 显示

MOVX @DPTR,A

POP ACC ;恢复现场

POP DPL

POP DPH

RET

;读取键盘子程序

GETKEY:

;输入: 无 ; 输出: B: 读到的键码 A: 按键的标志 PUSH DPH ;保存现场

PUSH DPL

PUSH PSW

MOV DPTR,#Z8279

MOVX A,@DPTR ;读8279状态

ANL A,#07H ;屏蔽D7-D3

JNZ GETVAL ;判断是否有键输入

MOV A,#0H ;置标志(无键输入)

SJMP NKBHIT

GETVAL:

MOV A,#READKB ;读 FIFO RAM 命令

MOVX @DPTR,A

MOV DPTR,#D8279

MOVX A,@DPTR ;读键

ANL A,#3FH ;屏蔽 SHIFT 和 CTRL 键

MOV DPTR,#KEYCODE;键码表起始地址

MOVC A,@A+DPTR ;查表

MOV B,A ;置返回键值

MOV A,#0FFH ;置标志(有键输入)

NKBHIT:

POP PSW ;恢复现场

POP DPL

POP DPH

RET

;T1定时器中断控制部分,

INT_T1: ;INT_T1中断服务子程序 PUSH DPH ;保护现场

PUSH DPL

PUSH ACC

PUSH PSW

MOV TL1,#00H ;50毫秒定时常数

MOV TH1,#4CH

DJNZ R0,EXIT ;判断毫秒=0

MOV R0,#20 ;DELAY 1 SECOND

MOV R6,#0FFH ;置秒标志

COUNT1: MOV A,R7

ADD A,#99H

DA A

MOV R7,A ;减1

CJNE R1,#59H,SECOND;判断秒=59

MOV R1,#99H

CJNE R2,#59H,MINUTE;判断分=59

MOV R2,#99H

CJNE R3,#23H,HOUR ;判断时=23

MOV R3,#99H

HOUR:

MOV A,R3

ADD A,#1 ;时加1

DA A

MOV R3,A

MINUTE:

MOV A,R2

ADD A,#1 ;分加1

DA A

MOV R2,A

SECOND:

MOV A,R1

ADD A,#1 ;秒加1

DA A

MOV R1,A

;判断是否到了特定时间7~8,17~18点

CJNE R3,#7,EXIT1

MOV 40H,#5

CJNE R3,#00010111B,EXIT1

MOV 40H,#5

SJMP SHOWT

EXIT1: MOV 40H,#0

SHOWT: CJNE R6,#0FFH,EXIT;若无秒标志则循环

LCALL DISPLAY ;显示时间

MOV R6,#0 ;清标志

EXIT:

POP PSW ;恢复现场

POP ACC

POP DPL

POP DPH

RETI ;中断返回

;实验帮助11延时部分,不太清楚具体功能是什么,可能是键盘消抖DELAY: ;延时子程序

PUSH 0 ;保存现场

PUSH 1

MOV 0,#0H

DELAY1:

MOV 1,#0H

DJNZ 1,$

DJNZ 0,DELAY1

POP 1 ;恢复现场

POP 0

RET

;显示控制部分,但不是具体显示部分

DISPLAY:

MOV A,R3

ANL A,#0FH

ADD A,#10H

MOV R5,A

MOV R4,#6

LCALL DISLED ;显示小时低位

MOV A,R3

SWAP A

ANL A,#0FH

MOV R5,A

MOV R4,#7

LCALL DISLED ;显示小时高位

MOV A,R2

ADD A,#10H

MOV R5,A

MOV R4,#4

LCALL DISLED ;显示分钟低位

MOV A,R2

SWAP A

ANL A,#0FH

MOV R5,A

MOV R4,#5

LCALL DISLED ;显示分钟高位

MOV A,R1

ANL A,#0FH

ADD A,#10H

MOV R5,A

MOV R4,#2

LCALL DISLED ;显示秒低位

MOV A,R1

SWAP A

ANL A,#0FH

MOV R5,A

MOV R4,#3

LCALL DISLED ;显示倒计时高位

MOV A,R7

ANL A,#0FH

ADD A,#10H

MOV R5,A

MOV R4,#0

LCALL DISLED ;显示倒计时低位

MOV A,R7

SWAP A

ANL A,#0FH

MOV R5,A

MOV R4,#1

LCALL DISLED

RET

;显示部分

DISLED: ;显示字符子程序

;输入: R4,位置 R5,值 PUSH DPH ;保存现场

PUSH DPL

MOV A,#LEDWR0 ;置显示起始地址

ADD A,R4 ;加位置偏移量

MOV DPTR,#Z8279

MOVX @DPTR,A ;设定显示位置

MOV DPTR,#LEDSEG ;置显示常数表起始位置

MOV A,R5

MOVC A,@A+DPTR ;查表

MOV DPTR,#D8279

MOVX @DPTR,A ;显示数据

POP ACC ;恢复现场

POP DPL

POP DPH

RET

;LED显示常数表

LEDSEG:

DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;'0,1,2,3,4,5,6,7'

DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;'8,9,A,B,C,D,E,F'

DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,087H ;'0.,1.,2.,3.,4.,5.,6.,7.' DB 0FFH,0EFH,0F7H,0FCH,0B9H,0DEH,0F9H,0F1H ;'8.,9.,A.,B.,C.,D.,E.,F.' DB 6DH,02H,08H,00H,59H,0FH,76H ;'U,-,_, ,I,O,P, '

;键盘键码表

KEYCODE:

DB 30H,31H,32H,33H,34H,35H,36H,37H ;'0,1,2,3,4,5,6,7'

DB 38H,39H,3AH,3BH,3CH,3DH,3EH,3FH ;'8,9,A,B,C,D,E,F'

END

【返回】

51单片机32位流水灯

51单片机32位流水灯 摘要:随着电子工业的发展,电子元器件急剧增加,C51单片机应用非常广泛。本文介绍了一种简易的单片机应用的设计思路及硬件结构。首先研究了51单片机流水灯的基本原理,画出整机框图,接着提出系统的性能指标,计算确定电路形式和元器件参数,然后根据原理图通过Simulink软件进行建模仿真,验证系统的可行性。 关键字:C51;LED;S imulink软件;Protel99SE; 1引言 1.1设计背景及意义 目前,随着电子工业的发展,电子元器件急剧增加,电子元器件的适用围也逐渐广泛起来,在我们的生活当中有许多地方要应用中到灯光,因此,设计全自动,可靠,安全,便捷的灯光效益具有极大的现实必要性。 2.系统概述 该系统主要有C51单片机,LED灯,晶振等。 2.1 设计目的 (1)掌握简易流水灯的工作原理,以及程序的编写等等。 (2)进一步熟悉和掌握常用数字电路元器件的应用; (3)学习数字电路仿真、调试、测试、故障查找和排除的方法、技巧; (4)培养实践技能,提高分析和解决实际问题的能力。 2.2设计容及要求 1、51单片机x1、40Pin 座x1 2、LED x32(建议用5mm 七彩的) 3、电阻470Ωx33 4、晶振12MHz x1 5、10uf 电解电容x1、谐振瓷片电容30pf x2 6·其他的可以看自己的爱好去加 7、其实也可以不用那么多的电阻,用几个排阻就OK了。

2.2电路原理图

2.2重要元器件介绍

(1)C51单片机 (2)12MHZ晶振分为两种封装形式: SMD3225产品详细参数: 频率围:12 ~ 54 MHz 频率公差(25℃)± 10ppm± 30 ppm, or specify 在工作温度围的频率稳定度:± 10ppm± 30 ppm, or specify 工作温度围:- 20 ~ +70 oC, or specify 并联电容(C0):7 pF Max. 驱动级:1~200μW(100μW typical) 负载电容:Series, 8 pF, 12 pF, 15 pF, 20pF, or specify 老化(25℃):± 3 ppm / year Max. 储存温度围:- 40 ~ + 85 oC SMD5032产品详细参数: 频率围:12 ~ 54 MHz 频率公差(25℃)± 10ppm± 30 ppm, or specify 在工作温度围的频率稳定度:± 10ppm± 30 ppm, or specify 工作温度围:- 20 ~ +70 oC, or specify 并联电容(C0):7 pF Max. 驱动级:1~200μW(100μW typical) 负载电容:Series, 8 pF, 12 pF, 15 pF, 20pF, or specify 老化(25℃):± 3 ppm / year Max. 储存温度围:- 40 ~ + 85 oC 3实物

西南科技大学单片机原理实实验四及代码

2.1 实验四中断实验 一、实验目的 加深对MCS-51单片机中断系统基础知识的理解。 二、实验设备 Keil C单片机程序开发软件。 Proteus仿真软件 DP51-PROC单片机综合实验仪。 三、实验内容和步骤 内容: 利用外部中断输入引脚(以中断方式)控制步进电机的转动。要求:每产生1次中断,步进电机只能步进1步。 实验程序: 使用INT0的中断服务程序控制步进电机正向步进;使用INT1中断服务程序控制步进电机反向步进。 设计思路: ①主程序在完成对INT0和INT1的设置后,可进入死循环(等待中断请求)。 ②为便于实验观察和操作,设INT0和INT1中断触发方式为边沿。 ③步进电机的转动控制由外部中断的服务程序来实现。 ④当前步进电机的相位通电状态信息可以使用片内RAM中的一个字节单元来存储。 设计参考: ①主程序需要设置的中断控制位如下: IT0和IT1 外部中断触发方式控制 0=电平 1=边沿(下降沿) EX0和EX1 外部中断允许控制0=屏蔽 1=允许 PX0和PX1 中断优先级级别控制0=低级 1=高级 在同级别(PX0=PX1)时INT0的优先级高于INT1 EA 中断允许总控制0=屏蔽 1=允 许 ②外部中断服务程序的入口地址: 0003H 外部中断0 0013H 外部中断1 预习: 1)编写好实验程序。 2)根据编写的程序和实验步骤的要求制定调试仿真的操作方案。

实验单元电路: 1) 步进电机驱动电路。 步进电机共有4相,当以A →B →C →D →A →B …的顺序依次通电时,电机就会正转,若按相反的顺序依次通电,电机就会反转。每顺序切换一相(1步),电机旋转18°,切换的频率决定电机的转速(切换的频率不能超过电机的最大响应频率)。根据图 2.4中的电路,当BA (插孔)输入为高时,对应的A 相通电。 2) SW 电路 开关SW X 拨在下方时,输出端SWX 输出低电平,开关SW X 拨在上方时,输出端SWX 输出高电平。其中SW1和SW3具备消除抖动电路,这样,SW1或SW3每上下拨动一次,输出端产生单一的正脉冲(上升沿在前,下降沿在后)。 3) LED 和KEY 电路 步骤: 1) 在S : \ STUDY \ Keil 文件夹中新建Ex04文件夹(该文件夹用于保存本次实验的所 有内容),通过网上邻居将服务器上本次实验共享文件夹下的所有文件拷贝到S : \ STUDY \ Keil \ Ex04文件夹中。 2) 在Keil C 中创建一个新工程,新工程保存为S : \ STUDY \ Keil \ Ex04\Ex04.uv2,然 后选择单片机型号为Generic 中的8051。 图2.5 单脉冲电路原理图 +5V +5V 图2.4 步进电机驱动电路原理图 LED1 LED8 +5V 8 图2.6 LED 和KEY 电路 +5V 8

单片机课程设计报告--心形流水灯

井冈山大学 机电工程学院 单片机 课程设计报告 课程名称:单片机 设计题目:心形流水灯 姓名:玉红 专业:生物医学工程 班级:11级医工本一班 学号:110615017 指导教师:王佑湖 2013年11月27日

目录 1引言 (2) 1.1设计任务 (2) 1.2设计要求……………………………………………… ..2 2 课题综述 (2) 2.1课题的来源 (2) 2.2面对的问题 (2) 3 系统分析 (2) 3.1 STC89C52单片机引脚图及引脚功能介绍 (2) 4 系统设计 (4) 4.1硬件设计 (4) 4.1.1硬件框图 (4) 4.1.2硬件详细设计 (5) 4.2 软件设计 (5) 4.3 硬件原理图 (6) 4.4 元件清单 (6) 4.5 硬件焊接

图 (6) 4.6 代码编写 (7) 5心得体会 (7) 6致 (8) 参考文献 (8) 1 引言 单片机课程设计主要是为了让我们增进对STC89C51单片机电路 的感性认识,加深对理论方面的理解。了解软硬件的有关知识,并掌握软硬件设计过程、方法及实现,为以后设计和实现应用系统打下良好基础。另外,通过简单课题的设计练习,使我们了解必须提交的各项工程文件,达到巩固、充实和综合运用所学知识解决实际问题的目 的。 1.1设计任务 设计一个单片机控制的流水灯系统 1.2设计要求 (1)32个LED灯; (2)可实现多种的亮灯(如左循环,右循环,间隔闪,90度交叉闪等)。 2 课题综述

2.1 课题的来源 当今社会,这种由单片机芯片控制各种硬件工作的技术也日益成熟,并普及在交通、化工、机械等各个领域。而流水灯这项技术在生活中的应用更是广泛,较为贴近生活。而流水灯控制的设计所需要的知识也正好吻合了我们本学期对于单片机这门课程的学习,所以设计流水灯控制的这个课题让我们对知识的学习和巩固都有了进一步的加深。 2.2 面对的问题 这次课程设计是通过STC89C52位单片机实现。但面对的问题却是两方面的:一个是软件的设计,也就是实现流水灯控制功能的程序编辑;另一个是硬件的设计,需要我们自己连接、焊接电路板。而更为严峻的就是设计的最后还要将软硬件相结合。 3 系统分析 3.1 STC 89C52单片机引脚图及引脚功能介绍 本次设计的目的在于加深STC89C52单片机的理解,首先来简单认识一下,它的引脚如图3-1所示: 图3.1 STC89C52

2014版51单片机实验开发板焊接和调试资料

2014版51单片机实验开发板焊接调试指南 一、焊接指南: 1、先矮后高(先焊接低矮的器件如飞线、卧式电阻等,再焊比较高的器件)。 2、先小后大(先焊接体积比较小巧的器件,再焊体积比较大的器件)。 3、注意有极性元器件的安装和焊接(普通二极管、发光二极管、三极管、电解电容的极性,以及接插件的缺口方向、芯片插座方向等)。 4、建议不要一次性的把很多元件都放好才焊,应该是先放几个,焊好后剪掉元件引脚线,再接着放和焊。元件插入电路板后,为了防止电路板翻转焊接时掉落,可以适当把元件脚掰过两边,但是千万不要把元件脚全部掰平到电路板上! 5、建议一个类型一个类型地焊接,比如先统一把所有电阻焊完,再统一焊接二极管,然后再统一焊电容,等等。这样就不会搞漏。 6、所有元器件,包括电容、发光二极管等,都应该尽可能压低到电路板表面后再在反面焊接,不要让元件歪歪扭扭的“站”在电路板上。 7、注意发光二极管、排针、排座芯片插座不要长久焊接,防止这些塑料件被烫坏而报废! 8、芯片插座,尤其是单片机插座,要认真检查所有针脚从电路板洞中全部露出来后再焊接,否则贸然焊接后才发现有脚没过来时,整个芯片插座可能得拆出来才能解决问题,不仅费工而且极可能使芯片插座报废! 二、调试指南: 把元件清单后半部分的元器件焊接完毕后,绝对不可以马上把清单的前部分器件如芯片等插入电路板通电测试,这样做会因为焊接等原因导致元器件大面积损坏!应按以下步骤一步步按顺序进行调试: 1、不要插入任何芯片、液晶显示模块、电池,先用万用表测量单片机芯片插座的第20脚(地线脚)和第40脚之间(电源脚)是否短路。如有一定要先排除,否则可能会导致电脑USB口和下载线的损坏!重点检查电路板的电源线有否与地线之间有毛刺粘连,尤其是左下角可调电阻的一个脚所在电源线与地线之间是否粘连。 2、板子正确接好下载线,然后插到电脑USB口,反复按动板子上的电源开关,这时左上角的电源指示灯应该可以亮灭。如果灯不亮,断电检查开关是否可以通断,电源指示灯是否焊反或烫坏。 3、接着用一根杜邦线一头接在地线上,一头顺序接通P2.0、P2.1……P2.7的引出脚,以及右边的十个LED灯的引出脚,此时对应的灯应该点亮,不亮的不是烫坏了就是焊反了。揭开蜂鸣器上的盖纸,地线接P2.0时,除灯亮外,应可听到蜂鸣器发出响声,不响的,检查所接三极管和蜂鸣器是不是接反。地线接P2.1时,应可听到继电器“滴答”的吸合声。 4、上述步骤检查通过的,则说明板子基本没问题了,可以进行下一步调试。没通过的绝对不可以继续下去! 5、断电,插上51单片机,注意芯片方向。运行下载软件,看看是否可以进行正常下载!注意最好使用STC的V481下载软件,并确保下载线驱动装好、串口号设对。如果电脑端无问题但还是不能下载的,重点检查下载线的收发两根线是否正确接到单片机收发口上(收发接反、收发线相互粘连或与别的线粘连)。能正常下载,说明板子基本可以正常使用了。 6、强烈建议,板子使用中,用到什么芯片再插入相应的芯片,不要一股脑儿全插上,避免不知不觉中未用到的芯片误连接或操作而损坏。尤其是纽扣电池,没用到时钟的坚决不能放到板上,它造成的DS1302芯片损坏率和板子不正常的几率奇高(芯片出厂或编程时没有进入电池不充电保护状态)!

51单片机流水灯C语言源代码

#include #include #define uint unsigned int #define uchar unsigned char uchar z=50,e=0x00,f=0xff; uchar code table1[]={ 0x80,0xc0,0xe0,0xf0, 0xf8,0xfc,0xfe,0xff}; uchar code table2[]={ 0x7f,0x3f,0x1f,0x0f, 0x07,0x03,0x01,0x00}; uchar code table3[]={ 0x01,0x03,0x07,0x0f, 0x1f,0x3f,0x7f,0xff}; uchar code table4[]={ 0xe7,0xdb,0xbd,0x7e, 0xbd,0xdb,0xe7,0xff}; uchar code table5[]={ 0xe7,0xc3,0x81,0x00, 0x81,0xc3,0xe7,0xff}; uchar code table6[]={ 0x7e,0x3c,0x18,0x00, 0x18,0x3c,0x7e,0xff}; void delay(uchar); void lsd1(); void lsd2(); void lsd3(); void lsd4(); void lsd5(); void lsd6(); void lsd7(); void lsd8(); void lsd9(); void lsd10(); void lsd11(); void lsd12(); main() { while(1) { lsd1(); lsd2(); lsd3(); lsd4();

51单片机20个实验-代码详细

第一章单片机系统板说明 一、概述 单片机实验开发系统是一种多功能、高配置、高品质的MCS-51单片机教学与开发设备。适用于大学本科单片机教学、课程设计和毕业设计以及电子设计比赛。 该系统采用模块化设计思想,减小了系统面积,同时增加了可靠性,使得单片机实验开发系统能满足从简单的数字电路实验到复杂的数字系统设计实验,并能一直延伸到综合电子设计等创新性实验项目。该系统采用集成稳压电源供电,使电源系统的稳定性大大提高,同时又具备完备的保护措施。为适应市场上多种单片机器件的应用,该系统采用“单片机板+外围扩展板”结构,通过更换不同外围扩展板,可实验不同的单片机功能,适应了各院校不同的教学需求。 二、单片机板简介 本实验系统因为自带了MCS-51单片机系统,因此没有配置其他单片机板,但可以根据教学需要随时配置。以单片机板为母板,并且有I/O接口引出,可以很方便的完成所有实验。因此构成单片机实验系统。 1、主要技术参数 (1)MSC-51单片机板 板上配有ATMEL公司的STC89C51芯片。 STC89C51资源:32个I/O口;封装DIP40。 STC89C51开发软件:KEIL C51。 2、MSC-51单片机结构 (1)单片机板中央放置一块可插拔的DIP封装的STC89C51芯片。 (2)单片机板左上侧有一个串口,用于下载程序。 (3)单片机板的四周是所有I/O引脚的插孔,旁边标有I/0引脚的脚引。 (4)单片机板与各个模块配合使用时,可形成—个完整的实验系统。 三、母板简介 主要技术参数 (1)实验系统电源 实验系统置了集成稳压电源,使整个电源具有短路保护、过流保护功能,提高了实验的稳定性。 主板的右上角为电源总开关,当把220V交流电源线插入主板后,打开电源开关,主板

基于单片机的心形流水灯毕业设计论文

课程设计(论文)说明书 题目:心形流水灯 院(系):信息与通信学院 专业:通信工程 学生姓名: 学号: 指导教师: 职称:讲师 2012年12 月1日

摘要 本论文基于单片机技术与单片机芯片AT89S51芯片功能和C语言程序,实现心形流水灯的多种亮与灭的循环。首先,我们了解单片机的一些技术,了解了单片机芯片AT89S51的一些功能;然后结合C语言编程;最后将它们运用到实际的电路,使心形LED灯实现多种亮灭方法。本论文介绍关于流水灯的运用和单片机技术;然后介绍芯片AT89S51;最后介绍运用到的相关软件.矚慫润厲钐瘗睞枥庑赖。 关键词:单片机;流水灯;C语言;

Abstract This paper Based on the single chip microcomputer and single chip microcomputer chip AT89S51 chip function and C language program,Realization of flowing water light heart a variety of light and the cycle of destruction。primarily,We know some of the single chip microcomputer technology,Understanding of the single chip microcomputer chip AT89S51 of some functions, Then based on the C language programming; Finally they are applied to the practical circuit, Make heart LED lamp achieve a variety of light out method. This paper introduces about the use of flowing water light and single chip microcomputer; and then introduced chip AT89S51; At the end of this paper applied to software.聞創沟燴鐺險爱氇谴净。Key words:micro-computer;light water ;C programming language残骛楼諍锩瀨濟溆塹籟。

(完整版)51单片机流水灯程序

1.第一个发光管以间隔200ms 闪烁。 2. 8 个发光管由上至下间隔1s 流动,其中每个管亮500ms, 灭500ms 。 3. 8 个发光管来回流动,第个管亮100ms 。 4. 用8 个发光管演示出8 位二进制数累加过程。 5. 8 个发光管间隔200ms 由上至下,再由下至上,再重复一次,然后全部熄灭再以300ms 间隔全部闪烁 5 次。重复此过程。 6. 间隔300ms 第一次一个管亮流动一次,第二次两个管亮流动,依次到8 个管亮,然后重复整个过程。 7. 间隔300ms 先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;8 个全部闪烁 3 次;关闭发光管,程序停止。 1 #include #define uint unsigned int sbit led 仁P"0; void delay(); void main() { while(1) { led1=0; delay(); led1=1; delay(); } } void delay() {

uint x,y; for(x=200;x>0;x--) for(y=100;y>0;y--); } #include #include #define uint unsigned int #define uchar unsigned char sbit p P1A0; uchar a; void delay(); void main() { a=0xfe; P1=a; while(1) { a=_crol_(a,1); delay(); P1=a; delay(); } } void delay() { uint b; for(b=55000;b>0;b--); } 3 #include #include #define uint unsigned int #define uchar unsigned char void delay() { uint x,y; for(x=100;x>0;x--) for(y=110;y>0;y--); } void main() { uchar a,i; while(1) a=0xfe; for(i=0;i<8;i++) { P1=a; delay(100); a=_crol_(a,1); } a=0x7f; for(i=0;i<8;i++) { P1=a; delay(100); a=_cror_(a,1);

51单片机实例(含详细代码说明)

1.闪烁灯 1.实验任务 如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。 2.电路原理图 图4.1.1 3.系统板上硬件连线 把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。 4.程序设计内容 (1).延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要 求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在 执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程 序是如何设计呢?下面具体介绍其原理:

如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒机器周期微秒 MOV R6,#20 2个 2 D1: MOV R7,#248 2个 2 2+2×248=498 20× DJNZ R7,$ 2个2×248 (498 DJNZ R6,D1 2个2×20=40 10002 因此,上面的延时程序时间为10.002ms。 由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时, 延时10ms,以此为基本的计时单位。如本实验要求0.2秒=200ms, 10ms×R5=200ms,则R5=20,延时子程序如下: DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET (2).输出控制 如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管 的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平, 即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0 端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。 5.程序框图 如图4.1.2所示

51单片机流水灯实验报告

51单片机流水灯试验 一、实验目的 1.了解51单片机的引脚结构。 2.根据所学汇编语言编写代码实现LED灯的流水功能。 3.利用开发板下载hex文件后验证功能。 二、实验器材 个人电脑,80c51单片机,开发板 三、实验原理 单片机流水的实质是单片机各引脚在规定的时间逐个上电,使LED灯能逐个亮起来但过了该引脚通电的时间后便灭灯的过程,实验中使用了单片机的P2端口,对8个LED灯进行控制,要实现逐个亮灯即将P2的各端口逐一置零,中间使用时间间隔隔开各灯的亮灭。使用rl或rr a实现位的转换。 A寄存器的位经过rr a之后转换如下所示: 然后将A寄存器转换一次便送给P2即MOV P2,A便将转换后的数送到了P2口,不断循环下去,便实现了逐位置一操作。 四、实验电路图

五、通过仿真实验正确性 代码如下:ORG 0 MOV A,#00000001B LOOP:MOV P2,A RL A ACALL DELAY SJMP LOOP DELAY:MOV R1,#255 DEL2:MOV R2,#250 DEL1:DJNZ R2,DEL1 DJNZ R1,DEL2 RET End 实验结果:

六、实验总结 这次试验我通过Proteus仿真实现对流水灯功能的实现。受益匪浅,对80c51的功能和结构有了深层次的了解,我深刻的明白,要想完全了解c51还有一定距离,但我会一如既往的同困难作斗争。在实验中,我遇到了不少困难,比如不知道怎么将程序写进单片机中,写好程序的却总出错,不知道什么原因,原来没有生成hex文件。这些错误令我明白以后在试验中要步步细心,避免出错。

(完整word版)51单片机流水灯

51单片机的流水灯控制 班级:100712 姓名:全建冲 学号:10071047

一、设计要求 用51单片机设计一个流水灯的控制方案,要求采用定时器定时,利用中断法控制流水灯的亮灭,画出电路图和程序流程图,写出程序代码以及代码注释。 二、电路原理图 原理图分析: 本原理图采用STC89S52单片机控制8个LED灯,其中8个LED灯的负极接单片机的P1端口,正极通过1KΩ排阻连接到电源上。原理图中还给出了晶振与复位端,以保证控制器的稳定工作。

三、程序流程图

四、程序代码及注解 1.非中断定时器控制 #include #include//包含了_crol_函数的头文件 #define uchar unsigned char #define uint unsigned int uint i=0; uchar a=0xfe; void main() { TMOD=0x01;//设置工作方式为定时器0,16位手动重装初值 TH0=(65536-46080)/256;//50毫秒定时赋初值 TL0=(65536-46080)%256; TR0=1;//启动定时器0 while(1) { If(TF==1)//读溢出标志位 { TH0=(65536-46080)/256;//重新赋初值 TL0=(65536-46080)%256;

i++; if(i==10)//500毫秒定时 { i=0; P1=a;//P1端口赋值 a=_crol_(a,1);//循环左移 } TF=0;//清除定时器溢出标志 } } } 程序分析:本程序采用非中断定时器法控制流水灯,核心语句在于读取标志位TF位,TF为定时器溢出标志位,溢出时硬件自动置一,所以循环读取标志位以判断定时器是否溢出,而每次溢出需要手动清零,否则定时器无法再次溢出,利用标志i读取10次即可达到500毫秒的定时。另外需要注意的是单片机晶振为11.0592MHz,所以计时一个数的时间为12/11.0592=1.085us,故定时50毫秒的计数为50000/1.085=46080。 2.中断定时器控制 #include

基于51单片机心形流水灯C语言源程序

基于51单片机心形流水灯C语言源程序

#include unsigned int x,y; void delayms(unsigned int z) //延时 { unsigned int i,j; for(i=z;i>0;i--) for(j=150;j>0;j--); } void On_all() //开启所有灯 { P0=0x00; P1=0x00; P2=0x00; P3=0x00; } void Off_all()//关闭所有灯 { P0=0xff; P1=0xff; P2=0xff; P3=0xff; } void ls()//正向流水灯 { P0=0x00; delayms(400); P2=0x00; delayms(400); P3=0x00; delayms(400); P1=0x00; delayms(400); P0=0x01; delayms(50);

P0=0x04; delayms(50); P0=0x08; delayms(50); P0=0x10; delayms(50); P0=0x20; delayms(50); P0=0x40; delayms(50); P0=0x80; delayms(50); P0=0x00; P2=0x01; delayms(50); P2=0x02; delayms(50); P2=0x04; delayms(50); P2=0x08; delayms(50); P2=0x10; delayms(50); P2=0x20; delayms(50); P2=0x40; delayms(50); P2=0x80; delayms(50); P2=0x00; P3=0x80; delayms(50); P3=0x40; delayms(50); P3=0x20; delayms(50); P3=0x10; delayms(50); P3=0x08; delayms(50); P3=0x04; delayms(50);

基于51单片机的开发板

江西工业学院 课程设计报告书 题目:基于STC89C52RD单片机实验板的制作 与程序设计 系别: 专业: 姓名:学号: 指导老师: 2016 年12 月

目录 第1节引言 (3) 1.2 基于89C51单片机系统实验板概述 (3) 1.2.1stc89C51单片机开发板硬件配置情况 (4) 1.2.2、stc89C51单片机实验板配套实验 (4) 第2节系统主要硬件电路设计 (5) 2.1 STC89C51单片机简介 (5) 2.2电源转换芯片MAX232 (6) 2.3 四位一体共阳LED数显 (7) 2.4 LED 灯电路 (8) 2.5 按键电路 (9) 2.6蜂鸣器 (9) 2.7 8*8点阵 (9) 第3节实验系统软件设计 (10) 3.1 花样流水灯程序设计: (10) 3.2.简易时钟程序设计: (11) 3.3 8*8点阵屏显示程序设计 (13) 第4节结束语 (14) 参考文献 (14) 附录 (14) 课程设计指导教师评语 (17)

基于STC89C52RD单片机系统实验板的制作与程序设计 第1节引言 单片微型计算机简称单片机,又称微控制器(MCU),它的出现是计算机发展史上的一个重要的里程碑,它以体积小、功能全、性价比高等诸多优点独具特色,在工业控制、尖端武器、通信设备、信息处理、家用电器等嵌入式应用领域中独占鳌头。本次课设采用的STC89C51单片机是51系列单片机的一种代表,目前51系列单片机是国内目前应用最广泛的一种单片机之一。单片机以其系统硬件构架完整、价格低廉、学生能动手等特点,成为工科学生硬件设计的基础课。 1.1本设计任务和主要内容 本设计以单片机STC89C52RD为控制核心,由八路LED模块、八路按钮模块、四位一体共阳数显模块、语音模块等部分组成。可实现花样流水灯、简易电子琴、外部中断控制、时间显示等功能。要求在将硬件电路准确无误地安装后进行软件调试,至少完成以下三个程序设计及调试任务 1 .1.1花样流水灯:程序循环输出到单片机P1口,从左到右依次点亮,每次增加一个,直至全亮;从左到右依次暗灭,每次减少一个,直至全灭;从右向左依次点亮,每次亮一个;从左到右依次点亮,每次亮一个;8个发光二极管闪烁三次;两个二极管前后追逐循环三次;两个按键控制,K1按下停止循环,K2按下继续循环。 1.1.2.简易时钟电路:采用动态扫描技术,四位数显实现数字时钟,要求显示时、分,K0调时、K1调分;整点报时。 1.1.3 8*8点阵屏显示程序设计:动态轮流显示数字0-9,字母A-Z 1.2基于89C51单片机系统实验板概述 本次课设所使用的单片机最小系统板包括以下器件:电源端子(DC +5V),可以USB供电,也可独立电源供电。通用异步串口,采用MAX232做电平转换。STC89C51单片机。各种颜色的LED发光二极管共9个,其中8个接于P1口做LED显示,还有一个做电源灯显示。四位一体共阳数码管可以实现时钟电路及动态扫描显示。还有其他电阻电容若干,系统板一个,大按键开关两个,用于中断控制和通信开关。

51单片机实验报告

51单片机实验报告

实验一 点亮流水灯 实验现象 Led灯交替亮,间隔大约10ms。实验代码 #include void Delay10ms(unsigned int c); void main() { while(1) { P0 = 0x00; Delay10ms(50); P0 = 0xff; Delay10ms(50); } }

void Delay10ms(unsigned int c) { unsigned char a, b; for (;c>0;c--) { for (b=38;b>0;b--) { for (a=130;a>0;a--); } } } 实验原理 While(1)表示一直循环。 循环体首先将P0的所有位都置于零,然后延时约50*10=500ms,接着P0位全置于1,于是LED全亮了。接着循环,直至关掉电源。延迟函数是通过多个for循环实现的。 实验2 流水灯(不运用库函数) 实验现象 起初led只有最右面的那一个不亮,半秒之后从右数第二个led

也不亮了,直到最后一个也熄灭,然后led除最后一个都亮,接着上述过程 #include #include void Delay10ms(unsigned int c); main() { unsigned char LED; LED = 0xfe; while (1) { P0 = LED; Delay10ms(50); LED = LED << 1; if (P0 == 0x00) { LED = 0xfe; } } } void Delay10ms(unsigned int c)

基于51单片机多功能实验板设计

毕业设计说明书 设计题目:基于51单片机多功能实验板设计作者姓名: 班级学号: 系部:机电工程系 专业:机电一体化 指导教师: 2012年4月15 日

摘要 设计一种基于51单片机的实验板,实验板具有成本低、体积小、可靠性能高,功能多、低功耗设计、操作方便等特点。本设计介绍了该开发板的开发过程及相关硬件设计。实验板以STC89C52以单片机为核心控制器,板上资源主要包括通信模块、数码管模块、LED模块、蜂鸣器模块、键盘模块等。 实验板可以作为主控制模块安装于控制系统中执行控制任务,也可以用于高校教学,实验板能够完成多数通用实验,操作简单,控制结果可见,性价比高,具有一定的实用价值和现实意义。 关键词: STC89C52 MAX232 键盘LED灯数码管蜂鸣器 目录 第1章绪论 1.1单片机基本概念及引脚说明 (1) 1.2STC89C芯片介绍………………………………………………………………。3 1.3MAX2芯片介绍...........................................................................。3 第2章方案介绍 (5) 2.1系统原理框图 (5) 第3章硬件电路设计 (6) 3.1 键盘模 (6) 3.2 发光二极管模块 (6) 3.3 数码管模块 (8) 3.4 蜂鸣器模块 (8) 3.5 串行通信模块 (8) 3.6 中断模块 (9)

3.7 电源模块 (10) 3.8 复位模块 (10) 第4章实验板实用方法 (11) 4.1 KEIL 软件介绍 (11) 4.2 STC-ISP下载 (13) 附A单片机引脚分配 (15) 致谢 (16) 参考文献。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。.17 第一章绪论 1.1单片机基本概念及引脚说明

心率计51单片机代码.doc

#include "STC12C5A.h" #include "SMG.h" #define FSOC 24000000L #define T1MS (65536-FSOC/12/1000) sbit LED0 = P0^0; unsigned int count=0;计时标志数 unsigned int xinlv=0;心率计算器 unsigned char seg[10] = {0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6}; sbit HC595_RST = P0^6; sbit HC595_SCK = P0^4; sbit HC595_RCK = P0^5; sbit HC595_DAT = P0^7;

外部中断代码void Exti0_Init() { IT0 = 1; //下降沿触发 TCON.0=1 EX0 = 1; //开外部中断0 IE.0=1 EA = 1; //开总中断 } void Exit0_ISR() interrupt 0 { Xinlv++; LED0=0; delay_ms(2); LED0=1; } 定时器代码void Timer0_Init() { TMOD = 0x01; TR0 = 1; //16位定时器工作方式 TH0 = T1MS>>8; TL0 = T1MS; ET0 = 1; //打开定时器0中断 EA = 1; //打开总中断 } void Timer0_ISR() interrupt 1 { unsigned int temp; count++; TH0 = T1MS>>8; TL0 = T1MS; if(count=5000) temp=Xinlv; for{} SMG_Display(temp); }

51单片机实验开发板设计

东 北 石 油 大 学 课 程 设 计 2012年 7 月 8日 课 程 单片机课程设计 题 目 51单片机实验开发板设计 院 系 电气信息工程学院测控系 专业班级 测控09 学生姓名 学生学号 指导教师

东北石油大学课程设计任务书 课程单片机课程设计 题目51单片机实验开发板设计 专业测控技术与仪器姓名学号 一、任务 设计一款基于仿真软件实现的51单片机实验开发板。 二、设计要求 [1] 该实验开发板力求单片机IO口分配合理,实验板硬件资源丰富。 [2] 外围电路设计合理,程序例程正确。 [3] 基本电路包括:单片机最小系统、8位流水灯电路、LED显示电路、蜂鸣 器电路、键盘电路、1602及12864液晶显示电路。 [4] 提交设计报告、电路图及程序源码。 三、参考资料 [1] 潘永雄.新编单片机原理与应用[M].西安电子科技大学出版社,2003. [2] 丁元杰.单片微机原理与应用[M].机械工业出版社,2006. [3] 朱定华.单片微机原理及接口技术实验[M].北方交通大学出版社,2002. [4] 付家才.单片机控制工程实践技术[M].化学工业出版社,2004. [5] 杨丽凤,王艳秋,张军.单片机原理与接口技术[M].清华大学、北方交通大学 出版社,2004. 完成期限至 指导教师 专业负责人曹广华 2012年6月29 日

目录 第1章绪论 (2) 单片机现状与发展 (2) 单片机的性能特点 (2) 本设计任务 (3) 第2 章总体方案论证与设计 (4) 电源 (4) 显示功能方案 (4) 电位指示选择 (4) 总体硬件组成框图 (4) 第3章系统硬件设计 (6) 单片机最小系统 (6) 键盘模块设计 (7) LED显示模块设计 (7) 流水灯显示模块设计 (8) 发声模块设计 (9) 串口通信模块设计 (9) 第4章系统的软件设计 (10) LED模块的程序设计 (10) 键盘模块的软件设计 (11) 第5章系统调试与测试结果分析 (12) 使用的仪器仪表 (12) 系统调试 (12) 测试结果 (13) 结论 (14) 参考文献 (15) 附录1 程序 (16)

基于51单片机的流水灯

基于51单片机的流水灯 利用51单片机P0口实现8个LED(发光二极管)的流水灯控制。可以使用Proteus软件进行仿真调试。 1 硬件设计 利用单片机的PO口控制8个LED,其电路如下图所示。 在桌面上双击图标,打开ISIS 7 Professional窗口(本人使用的是v7.4 SP3中文版)。单击菜单命令“文件”→“新建设计”,选择DEFAULT模板,保存文件名为“LSD.DSN”。在器件选择按钮中单击“P”按钮,或执行菜单命令“库”→“拾取元件/符号”,添加如下表所示 都可以不画,它们都是默认的。 在ISIS原理图编辑窗口中放置元件,再单击工具箱中元件终端图标,在对象选择器中单击POWER和GROUND放置电源和地。放置好元件后,布好线。左键双击各元件,设置相应元件参数,完成电路图的设计。 2 软件设计 流水灯又称为跑马灯,在函数中可以将P0口的八种不同状态做成一维数组,循环执行即可,如下所示。当然也可以采用其它函授来实现,如左移一位<<1(或右移一位>>1),循环左移函授_crol_(或循环右移函授_cror_)等。 /****************************************************************** 流水灯

*******************************************************************/ #include "reg51.h" const tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; void delayms(unsigned int x) //延时 { unsigned int j; unsigned char k; for(j=0;j

51单片机蜂鸣器奏乐实验汇编代码

LJMP START ORG 000BH INC 20H ;中断服务,中断计数器加1 MOV TH0,#0D8H MOV TL0,#0EFH ;12M晶振,形成10毫秒中断RETI START: MOV SP,#50H MOV TH0,#0D8H MOV TL0,#0EFH MOV TMOD,#01H MOV IE,#82H MUSIC0: NOP MOV DPTR,#DAT ;表头地址送DPTR MOV 20H,#00H ;中断计数器清0 MUSIC1: NOP CLR A MOVC A,@A+DPTR ;查表取代码 JZ END0 ;是00H,则结束 CJNE A,#0FFH,MUSIC5 LJMP MUSIC3 MUSIC5:NOP MOV R6,A INC DPTR MOV A,#0 MOVC A,@A+DPTR MOV R7,A SETB TR0 MUSIC2:NOP CPL P3.2 MOV A,R6 MOV R3,A LCALL DEL MOV A,R7 CJNE A,20H,MUSIC2 MOV 20H,#00H INC DPTR LJMP MUSIC1 MUSIC3:NOP CLR TR0 MOV R2,#0DH

MOV R2,#0FFH LCALL DEL DJNZ R2,MUSIC4 INC DPTR LJMP MUSIC1 END0:NOP MOV R2,#0FFH MUSIC6:MOV R3,#00H LJMP MUSIC0 DEL:NOP DEL3:MOV R4,#02H DEL4:NOP DJNZ R4,DEL4 NOP DJNZ R3,DEL3 RET NOP DAT: DB 18H, 30H, 1CH, 10H DB 20H, 40H, 1CH, 10H DB 18H, 10H, 20H, 10H DB 1CH, 10H, 18H, 40H DB 1CH, 20H, 20H, 20H DB 1CH, 20H, 18H, 20H DB 20H, 80H, 0FFH, 20H DB 30H, 1CH, 10H , 18H DB 20H, 15H, 20H , 1CH DB 20H, 20H, 20H , 26H DB 40H, 20H , 20H , 2BH DB 20H, 26H, 20H , 20H DB 20H, 30H , 80H , 0FFH DB 20H, 20H, 1CH , 10H DB 18H, 10H, 20H , 20H DB 26H, 20H , 2BH , 20H DB 30H, 20H , 2BH , 40H DB 20H, 20H , 1CH , 10H DB 18H, 10H, 20H, 20H DB 26H, 20H , 2BH, 20H DB 30H, 20H, 2BH , 40H DB 20H, 30H, 1CH , 10H DB 18H, 20H , 15H , 20H DB 1CH, 20H , 20H , 20H DB 26H, 40H, 20H , 20H

相关文档
相关文档 最新文档