51单片机控制灯泡亮度的仿真
51单片机实例34-模拟开关灯

4. 程序设计内容
(1) .
- 31 -
AT89S51 单片机实验及实践教程
电性可知,这时发光二极管 L1 熄灭;当 P1.0 端口输出低电平,即 P1.0= 0 时, 发光二极管 L1 亮;我们可以使用 SETB P1.0 指令使 P1.0 端口输出高电平,使 用 CLR P1.0 指令使 P1.0 端口输出低电平。
AT89S51 单片机实验及实践教程
2.
1. 实验任务
模拟开关灯
如图 4.2.1 所示, 监视开关 K1 (接在 P3.0 端口上) , 用发光二极管 L1 (接在单片机 P1.0 端口上)显示开关状态,如果开关合上, L1 亮,开关打开,L1 熄灭。
2. 电路原理图
图 4.2.1
3. 系统板上硬件连线
//灯亮
//灯灭
- 32 -
5. 程序框图
开始
K1 开关闭合了吗?
L1 亮 L1 灭
图 4.2.2
6. 汇编源程序
START: ORG 00HБайду номын сангаасJB P3.0,LIG CLR P1.0 SJMP START SETB P1.0 SJMP START END
LIG:
7. C 语言源程序
#include <AT89X51.H> sbit K1=P3^0; sbit L1=P1^0; void main(void) { while(1) { if(K1==0) { L1=0; } else { L1=1; } } }
(1) . (2) . 把“单片机系统”区域中的 P1.0 端口用导线连接到“八路发光二极管指示模块” 区域中的 L1 端口上; 把“单片机系统”区域中的 P3.0 端口用导线连接到“四路拨动开关”区域中的 K1 端口上; 开关状态的检测过程 单片机对开关状态的检测相对于单片机来说,是从单片机的 P3.0 端口输入信号, 而输入的信号只有高电平和低电平两种,当拨开开关 K1 拨上去,即输入高电平, 相当开关断开,当拨动开关 K1 拨下去,即输入低电平,相当开关闭合。单片机 可以采用 JB BIT ,REL 或者是 JNB BIT ,REL 指令来完成对开关状态的检测 (2) . 即可。 输出控制 如图 3 所示,当 P1.0 端口输出高电平,即 P1.0=1 时,根据发光二极管的单向导
通过51单片机控制24个发光二极管形成流水灯效果的亮灭状态

成绩实验名称:单片机系统简单扩展实验
一、实验目的
1、了解单片机系统的扩展方法
2、熟悉8255A在单片机系统扩中的使用方法。
3、熟悉仿真软件Proteus以及编程软件Keil的使用。
二、实验仪器
三、实验内容
四、实验原理
实验报告
五、实验步骤
步骤:
1、根据给定的实验要求,分析实验的目的以及实验要求。
2、通过计算机仿真软件Proteus,根据实验目的设计电路,并且绘制电路原理图。
3、根据自己设计的电路,编写控制程序。
4、调试所编写的控制程序,直至程序没有语法及语意错误,可以通过编译。
5、将所编写的无错误的程序下载至仿真软件,并进行调试,根据仿真结果修改程序。
6、重复上一步骤,知道仿真效果达到实验要求,即可完成。
六、实验程序
#include <reg51.h>
#include<absacc.h>。
51单片机技术应用教程(C语言版)项目八PC机远程控制花样霓虹灯设计与制作

8.1.2 51单片机串行通信基础知识
串行接口控制寄存器SCON
76 5 4 3 2 1 0 SCON(98H) SM0 SM1 SM2 REN TB8 RB8 TI RI
SM0、SSMM12::多串机行通接信口R控E4N种制:允工位许作,串方用行式于接选方收择式位位2和。。方由式软3件。置1或清
通信方式
并行通信:数据的各位同 时传输
串行通信:数据逐位顺序 传输
8.1.1串行通信的基本原理 串行通信制式
单工(simplex) :数据只能按照一 个固定的方向传输,如广播
设备A
设备B
半双工(half duplex) :2个方向上 的数据传输不能同时进行,只能一 端发送,一端接收,如对讲机
全双工(full duplex) : 2个方向可 以同时发送和接收,如电话机
76 5 4 3 2 1 0 SCON(98H) SM0 SM1 SM2 REN TB8 RB8 TI RI
TB8:发R送B数8:据接T的收I:第数发9据送R位I的中:。接第断在收9标方位中志式。断位2工标和。作志方在在位式方方。3式中式在0,2时方和由,式方发0式中送3,时完接,8位收数完8位数
1 0 为方0式还2 是为1,11位T帧I、格R式I都以正常fo方sc/6式4或被fosc激/32活。 1 1 在方方式3式1时,11如位果帧格S式M2=1,可则变只(由有定收时到器控有制效)的停止位后,RI置1。
在方式0时,SM2必须为0。
8.1.2 51单片机串行通信基础知识
串行接口控制寄存器SCON
SM0 SM1 工在作方方式式 2和方0。式功R3E能处N于=1接时收,时允,许如接波果收特S率;MR2=E1N,=0而时且,接收到的第9位数据RB8
基于51单片机的模拟路灯控制系统

中文摘要中文摘要本作品是具有自动化程度高、运行可靠、使用维护方便的照明控制系统,为城市路灯现代化提供了一些参考方案。
系统采用STC单片机为核心的最小系统板,设计了模拟路灯控制系统。
控制系统采用定时器设定时钟功能,设定、显示开关灯时间;用了基于555为核心的红外传感器检测物体的定位。
路灯单元控制系统采用恒流源供电,具有输出功率调整功能,并能定时调整功率。
阐述了基于单片机模拟路灯控制系统实现的设计思想、方法及过程。
该模拟控制系统,能有效的节约能源,减少照灯具的损耗。
城市亮化随之被政府所重视,既而大量的资金投入进行建设和改造中去,使得我们的城市夜晚变得灯火辉煌,绚丽多彩,但同时,诸多问题也随之而来:能耗的逐年攀升,产生的某些问题亦逐渐显露出来,如城市路灯的维护量增大,带来人员不足的问题,使得路灯故障时不能得到及时的修复以致造成人民生活的不便;维护费用也随之增加,社会成本过高,电费支出过多,财政承担相对困难,给政府带来了相对大的压力;光污染现象严重……这些问题的产生无疑给当地的路灯管理部门的各方面工作带来很大的压力,因此他们迫切的想解决此问题,故针对这种情况我们设计并制作了这一节能智能型的模拟路灯控制系统,其主要价值在于能更好的节能与监测,在很多方面给人们带来了方便,给维护人员降低了难度。
在白天模式的时候,还能根据环境明暗的变化控制路灯的开启和关闭路灯,在夜晚模式的情况下,根据交通路面情况自动开关灯。
当灯出现故障不亮时,能够检测并且通过声光系统报警,显示器上显示故障灯的编号。
自制的单元控制器中的LED灯恒流驱动电源,在多数情况下,具有系统稳定,功耗低等特点。
以STC89C51RC为核心,利用时钟控制LED灯的开关时间段,通过红外感应模块将物体运动的信号通过555的TTL高低电平输入单片机,并通过三红外线输入的情况判断物体运行方向,再控制LED灯的开关情况。
并完成四方面的功能:时间设定功能,环境明暗判断,独立控制功能,交通条件控制功能。
单片机产生PWM波形控制LED灯亮度

一按键,按住时P1.0低电平,中断次数25次,125ms脉冲变
化一次,可看到波形占空比变化较慢,按键松开时P1.0高电平,
中断10次,则波形占空比变化较快。
四,实验仿真电路图
两个三极管有驱动作用,电感和电容起滤波作用,保证LED不至 于太过闪烁而看不清亮度变化。
感谢您的关注 !
携手共进,齐创精品工程
当cc=10H,ee=0时再cc--,ee++。在主程序中令P2.0口当cc 从0到10H的时间为高电平,而ee从10H到0的时间为低电平, 由于定时器的中断,cc不断增加,ee不断减少,则高电平时间 越来越长,低电平时间越来越短。(总周期不变)
•
为了反映出定时器中断对脉冲变化的影响,在P1.0口接
三,程序设计思路
•
采用单片机定时器产生PWM波,然后控制LED灯的亮度。
首先对定0赋初值,使之中断(定时)5ms,再让其中断10次 (次数可设定,只是输出波占空比变化快慢不同而已),再定
义两个变量cc=0,ee=10H(不同的值会有不同的周期,即
PWM波的周期,周期不能太大,否则会闪烁)。cc++,ee--,
随着电子技术的发展,出现了多种PWM技术,其中包括: 相电压控制PWM、脉宽PWM法、随机PWM、SPWM法、线 电压控制PWM等
keilproteus仿真AT89C51单片机点亮一个灯泡并让灯泡不停闪烁

keilproteus仿真AT89C51单片机点亮一个灯泡并让灯泡不停闪烁用单片机点亮一个灯泡并让灯泡不停闪烁,这几乎是单片机的入门课程了。
网上有很多图文并茂的资料把这个步骤写得很详细,我就不再画蛇添足了,有兴趣的同学请在网上搜索,很easy.最近在看计算机组成原理,对电路略有兴趣,捡起多年前玩过的东东,呵呵,宝刀不老, 我还能记清楚自己当时点亮一个灯泡并让灯泡不停闪烁的那种激动的心情。
虽然现在工作完全用不到了,但兴趣犹在。
先让单片机点亮一个灯泡,不需要程序,只用proteus即可:下面来用keil c写程序,并把生成的hex文件导入到proteus的单片机中, keil c 界面如下:程序如下:1.#include<reg51.h>2.3.sbit P1_3 = P1^3;4.5.void delay(int n)6.{7.int i = 0;8.int j = 0;9.for(i = n; i > 0; i--)10.{11.for(j = 110; j > 0; j--)12.{13.;14.}15.}16.}17.18.void main()19.{20.int i = 0;21.while(1)22.{23.P1_3 = (i++ % 2)? 0 : 1 ;24.delay(200);25.}26.}生成hex文件,导入到单片机中,运行,灯泡不停闪烁,很简单,但挺有意思的:有点意思。
对了,要说明的是,图中的电源是没有画出的,实际上肯定有电源。
51单片机仿真100实例

《单片机C语言程序设计实训100例—基于8051+Proteus仿真》案例第 01 篇基础程序设计01 闪烁的LED/* 名称:闪烁的LED说明:LED按设定的时间间隔闪烁*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED=P1^0;//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){while(1){LED=~LED;DelayMS(150);}}02 从左到右的流水灯/* 名称:从左到右的流水灯说明:接在P0口的8个LED从左到右循环依次点亮,产生走马灯效果*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intvoid DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){P0=0xfe;while(1){P0=_crol_(P0,1); //P0的值向左循环移动DelayMS(150);}}03 8只LED左右来回点亮/* 名称:8只LED左右来回点亮说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){uchar i;P2=0x01;while(1){{P2=_crol_(P2,1); //P2的值向左循环移动DelayMS(150);}for(i=0;i<7;i++){P2=_cror_(P2,1); //P2的值向右循环移动DelayMS(150);}}}04 花样流水灯/* 名称:花样流水灯说明:16只LED分两组按预设的多种花样变换显示*/#include<reg51.h>#define uchar unsignedchar#define uint unsigned intuchar code Pattern_P0[]={0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f, 0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff, 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe, 0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe, 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff};uchar code Pattern_P2[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0xff, 0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f, 0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f, 0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00, 0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){uchar i;while(1){ //从数组中读取数据送至P0和P2口显示for(i=0;i<136;i++){P0=Pattern_P0[i];P2=Pattern_P2[i];DelayMS(100);}}}05 LED模拟交通灯/* 名称:LED模拟交通灯说明:东西向绿灯亮若干秒,黄灯闪烁5次后红灯亮,红灯亮后,南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁5此后变红灯,东西向变绿灯,如此重复。
开关控制单个led灯--51单片机从零开始-实践篇(基于protues及keil vu4)

51单片机从零开始基于protues和keil uv4的开关控制首先是keil uv4的程序由于是入门篇第一讲,我将如何建立工程给大家稍微说一下点击project-new uvision project建立新的工程在此我们可以选择工程的存放目录选择好目录后在文件名处写上工程名,工程名支持中文和英文。
(后缀无需写,程序会自动补充)我们会遇到这样的界面,由于本教程是针对51系列单片机的,所有我们下拉选择atmel的at89c51作为最初的选择,后续的如at89c52.at89c516等都是一样的他们是51的同类或者说更高的版本选择at89c51后系统会提示你是否需要历程(额英语真心不好,大致是这意思)我们选择否后自己进行编程新建文件保存文件名(注意,用c语音编程需要在文件名后加.c 如led.c)下面我们双击左边的source group会见到这样的选项,意思是选择将文件添加至工程我们双击led.c即可添加至工程文件里。
(注:多次点击会出现如上提示,意味已添加的不能再次添加,我们关闭即可)关于keil的准备工作完成下面开始编程以下是第一个例程,关于单片机通过开关控制led亮灭#include<reg51.h>sbit a=P0^0;//定义led灯的接口为P0^0 等号前为自由定义的自变量(注意不能用关键字定义)sbit key=P0^1;//定义开关的接口为P0^1void main(){while(1)//无限循环,采用扫描模式,不断扫描P0^1口,即开关是否闭合{if(key==0)//当开关闭合时()a=0;//led点亮注:led低电平点亮=0意味低电平elsea=1;//led熄灭}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ADC0831模拟量转换为对应8位数字量时延时大小的调节电路及程序
CS BIT P2.2 CLK BIT P2.1 DO BIT P2.0 ADCD EQU 35H PWM BIT P3.0 TB BIT P3.2
ORG 0000H AJMP MAIN ORG 0003H AJMP ZD
ORG 0100H MAIN:
MOV SP,#30H SETB IT0
;CLR IT0
SETB EA
SETB EX0 LCALL ADC
;MOV ADCD,#51
WAIT:
CLR PWM MOV A,ADCD LCALL DELAY SETB PWM MOV A,#0FFH SUBB A,ADCD LCALL DELAY
SJMP W AIT
ADC:
SETB PWM
SETB CS
CLR CLK
NOP
NOP
CLR CS
NOP
NOP
SETB CLK
NOP
NOP
CLR CLK
NOP
NOP
SETB CLK
NOP
NOP
CLR CLK
NOP
NOP
SETB CLK
NOP
MOV R0,#08H
ADCKS:
CLR CLK
MOV C,DO
RLC A
SETB CLK
NOP
NOP
DJNZ R0,ADCKS
SETB CS
MOV ADCD,A
RET
DELAY:
MOV R5,A
D1:
MOV R6,#18
DJNZ R6,$
DJNZ R5,D1
RET
ORG 0200H
ZD:
PUSH ACC
MOV A,#255
SUBB A,ADCD
LCALL DELAY
CLR PWM
POP ACC
RETI
END
ADC0832的应用
A_0832_CS EQU P2.0 A_0832_CLK EQU P2.1 A_0832_DO EQU P2.2 A_0832_T EQU 30H
A_0832_DA EQU 31H PWM BIT P3.0
TB BIT P3.2
ORG 0000H
LJMP MAIN
ORG 0003H
AJMP ZD
ORG 0100H
MAIN:
MOV SP,#30H
SETB IT0
SETB EA
SETB EX0
WAIT:
LCALL ADC_RD SJMP W AIT
ADC_RD:
MOV A_0832_T,#8 CLR A_0832_CLK CLR A_0832_CS SETB A_0832_DO
;START
SETB A_0832_CLK
;第一个上升沿
NOP
NOP
CLR A_0832_CLK NOP
NOP
SETB A_0832_DO
;选择CH0 NOP
SETB A_0832_CLK
;第二个上升沿
NOP
NOP
NOP
CLR A_0832_CLK
NOP
NOP
SETB A_0832_DO
;选择CH0
NOP
SETB A_0832_CLK
;第三个上升沿
NOP
NOP
NOP
CLR A_0832_CLK
;首个下降沿
NOP
NOP
NOP
SETB A_0832_CLK
NOP
NOP
A_0832_RD:
;读取前,8位
CLR A_0832_CLK
NOP
NOP
NOP
SETB A_0832_CLK
MOV C,A_0832_DO
RLC A
DJNZ
A_0832_T,A_0832_RD
MOV A_0832_DA,A
RR A
MOV A_0832_T,#7
A_0832_RD1:
;读后7位,+前1位
CLR A_0832_CLK
NOP
NOP
NOP
SETB A_0832_CLK
MOV C,A_0832_DO
RRC A
DJNZ
A_0832_T,A_0832_RD1
CJNE
A,A_0832_DA,ADC_RD
SETB A_0832_CS
RET
DELAY:
MOV R5,A
D1:
MOV R6,#14
DJNZ R6,$
DJNZ R5,D1
RET
ORG 0200H
ZD:
PUSH ACC
CLR PWM
MOV A,A_0832_DA
LCALL DELAY
SETB PWM
NOP
NOP
NOP
CLR PWM
POP ACC
RETI
END
PWM控制
双向晶闸管
过零检测
R8=10K
R8=100K
过零检测二。