1. 用PLC编写一个关于交通信号灯的电路图!
你买一本单片机编程的书,那上面说的比较详细,
2. 怎么用单片机C语言编写驱动蜂鸣器发出7个音的电路图和程序代码(最好有解释)。
将51单片机的P1.2口连接到蜂鸣器的一个管脚上,另外一个管脚接地。若声音小,则添加一个三级管放大电路或直接串一个UL2003
/*------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动?
//头文件包含特殊功能寄存器的定义
/*------------------------------------------------
硬件端口定义
------------------------------------------------*/
sbit SPK=P1^2; //定义音乐输出端口
unsigned char Timer0_H,Timer0_L,Time;
//世上只有妈妈好数据表
code unsigned char MUSIC[]={ 6,2,3, 5,2,1, 3,2,2, 5,2,2, 1,3,2, 6,2,1, 5,2,1,
6,2,4, 3,2,2, 5,2,1, 6,2,1, 5,2,2, 3,2,2, 1,2,1,
6,1,1, 5,2,1, 3,2,1, 2,2,4, 2,2,3, 3,2,1, 5,2,2,
5,2,1, 6,2,1, 3,2,2, 2,2,2, 1,2,4, 5,2,3, 3,2,1,
2,2,1, 1,2,1, 6,1,1, 1,2,1, 5,1,6, 0,0,0
};
// 音阶频率表 定时器高八位
code unsigned char FREQH[]={
0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,
0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i
0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,
} ;
// 音阶频率表 定时器低八位
code unsigned char FREQL[]={
0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,
0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i
0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,
0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,
};
/*------------------------------------------------
uS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
长度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{
while(--t);
}
/*------------------------------------------------
mS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t)
{
while(t--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
/*------------------------------------------------
节拍延时函数
各调1/4节拍时间:
调4/4 125ms
调2/4 250ms
调3/4 187ms
------------------------------------------------*/
void delay(unsigned char t)
{
unsigned char i;
for(i=0;i<t;i++)
DelayMs(250);
TR0=0;
}
/*------------------------------------------------
定时器0中断
------------------------------------------------*/
void TIM0_ISR() interrupt 1
{
TR0=0;
SPK=!SPK;
TH0=Timer0_H;
TL0=Timer0_L;
TR0=1;
}
/*------------------------------------------------
歌曲处理函数
------------------------------------------------*/
void Song()
{
TH0=Timer0_H;//赋值定时器时间,决定频率
TL0=Timer0_L;
TR0=1; //打开定时器
delay(Time); //延时所需要的节拍
}
/*------------------------------------------------
主函数
------------------------------------------------*/
void main(void)
{
unsigned char k,i;
TMOD|=0x01; //置定时器0工作方式1
EA=1; //打开全局中断
ET0=1; //打开定时0中断
while(1)
{
i=0;
while(i<100)
{ //音乐数组长度 ,唱完从头再来
k=MUSIC[i]+7*MUSIC[i+1]-1;//去音符振荡频率所需数据
Timer0_H=FREQH[k];
Timer0_L=FREQL[k];
Time=MUSIC[i+2]; //节拍时长
i=i+3;
Song();
}
}
}
3. 跪求此电路图的编写程序
你这是要实现什么功能?我可以帮你设计一下看看
4. 画出电路图,有可以根据电路图能写出程序的吗
你可以这样理解
在编写PLC程序的时候如果你手里只有对应电路图,那么你首先要做的是按照你现有的电路图来分析它的工作原理、设备的工作流程和控制方式等等,在实际编写的时候对于初学者来说有时候可能喜欢参考电路图上边的走线来编写程序,本人不建议这样做,当你真的弄明白设备的工作原理及工作流程及控制要求的话,在编写PLC程序时候完全可以按照自己的思路来,怎么方便怎么简单就怎么写,只要能达到控制目的就行
5. 大家都用什么软件绘制电气原理图
现在的电抄气原理图软袭件五花八门,各有各的长处。普遍用的有AutoCAD Electrical、EPLAN、eleworks、SEE Electrical。电路图设计的软件的使用则在国内用protel 99se和protel 2004的最多。
AutoCAD 是最原始的,应用也是最多的,画图也很麻烦,现在有很多专业软件,国外的SEE Electrical,pcs等,国内的有天正,中望,浩辰,利驰的SuperWORKS等。
elecworks,电气元件很全,画原理图,布线图,机柜的设计,还可以和solidworks一起完成机柜的三维设计,包括元器件的插入,智能布线等。
也有工程师朋友推荐:现在电气电路图最专业的软件是德国的Eplan P8,功能非常强大,可以包含器件选型,甚至转化3D电气制造图纸。
如果是设计电气原理图,需要反复修改,建议使用Visio2003,其所带的电气图库完全满足需要,也可做自己的图库,好用易上手;如果是画电子版电气图,建议使用AutoCAD Electrical 2006或2008,非常专业的CAD作图工具,一旦掌握,可大幅提高工作效率。
6. 能帮我设计一个电路图吗 让红黄绿三个灯循环闪烁,模拟交通信号灯,红的20秒,黄灯4秒,绿灯20秒。
图
7. 谁会编写这个电路图的的梯形图!自锁电路
如图所示:X2为启动,X1为停止,X0为过载保护。Y0控制KM线圈。
8. 怎么样设计电路图呢
方法如下:来
首先一定要先把源分立元器件学好,学透。比如:电阻、电容、二极管、稳压管、三极管、比较器、运放、MOSFET等。分立元器件在模拟电路中是最基本也是最小的组成部分。这好比人的组织细胞,要想研究人就要先研究组织细胞。
其次,需要懂得利用这些分立器件的工作特性和条件来组成一个小的单元电路,学会让这个单元电路正常工作。这就好比各个组织细胞组成了人体的各个器官,模拟电路的各个单元电路正常高效工作就好比人体器官的正常健康;
再次,学会将各个单元电路有机地协调运转,联调可靠运行,这就好比各个器官的协调运动组成了一个健康充满活力的有生命的人。
最后,学会设计和调试电路,借助示波器等测量仪器让电路的参数调整合理并最优化。这就好比利用仪器对人体进行体检,并根据体检报告进行调理,使人精神饱满,健康充满活力。
9. 写出一个你感兴趣的电路:1,写出电路的用途2,画出电路图或原理方框图3,简述电路的基本工作原理或调试方
电子时钟
一摘要
单片计算机即单片微型计算机。(Single-ChipMicrocomputer),是集CPU,RAM,ROM,
定时,计数和多种接口于一体的微控制器。他体积小,成本低,功能强,广泛应用于智能产
品和工业自动化上。而51单片机是各单片机中最为典型和最有代表性的一种。这次毕业设
计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。
二说明
系统由AT89C51、LED数码管、按键、发光二极管等部分构成,能实现时间的调整、定
时时间的设定,输出等功能。系统的功能选择由SB0、SB1、SB2、SB3、SB4完成。其中SB0
为时间校对,定时器调整功能键,按SB0进入调整状态。SB1为功能切换键。第一轮按动
SB1依次进入一路、二路、三路定时时间设置提示程序,按SB3进入各路定时调整状态。定
时时间到,二极管发亮。到了关断时间后灭掉。如果不进入继续按SB1键,依次进入时间
¡年¡位校对、¡月¡位校对、¡日¡位校对、¡时¡位校对、¡分¡位校对、¡秒¡位
校对状态。不管是进入那种状态,按动SB2皆可以使被调整位进行不进位增量加1变化。各
预置量设置完成后,系统将所有的设置存入RAM中,按SB1退出调整状态。上电后,系统自
动进入计时状态,起始于¡00¡时¡00¡分。SB4为年月日显示转换键,可使原来显示时分
秒转换显示年月日。
三、电路原理分析
1.显示原理
电原理图见附图1。由6个共阴极的数码管组成时、分、秒的显示。P0口的8条数据线
P0.0至P0.7分别与两个CD4511译码的ABCD口相接,P2口的P2.0至P2.2分别通过电阻
R10至R13与VT1至VT3的基极相连接。这样通过P0口送出一个存储单元的高位、低位BCD
显示代码,通过P2口送出扫描选通代码轮流点亮LED1至LED6,就会将要显示的数据在数
码管中显示出来。从P0口输出的代码是BCD码,从P2口输出的就是位选码。这是扫描显示
原理。
。
2键盘及读数原理
键盘是人与微机打交道的主要设备,按键的读取容易引起误动作。可采用软件去
抖动的方法处理,软件的触点在闭合和断开的时候会产生抖动,这时触点的逻辑电
平是不稳定的,如不采取妥善处理的话,将引起按键命令错误或重复执行,在这里
采用软件延时的方法来避开抖动,延时时间20ms.
3连击功能的实现
按下某键时,对应的功能键解释程序得到执行,如操作者没有释放按键,则对应
的功能会反复执行,好象连续执行,在这里我们采用软件延时250ms,当按键没释放则
执行下一条对应程序。利用连击功能,能实现快速调时操作。
四、程序设计思想和相关指令介绍
本系统的主程序主要完成时间显示和定时输出判断功能。而年月日显示和各时间单元进
位,时间设定时,调定时间设定时等功能全部在中断服务程序中完成。
1.数据与代码转换。
由前述可知,从P2口输出位选码,从P0口输出段选码,LED就会显示出数字来。但P0
口的输出的数据是要BCD码,各存储单元存储的是二进制数,也就是和要显示出的字符表达
的含义是不一致的。可见,将要显示的存储单元的数据直接送到P0口去驱动LED数码管显
示是不能正确表达的,必须在系统内部将要显示的数据经过BCD码行转换后,将各个单元数
据的段选代码送入P0口,给CD4511译码后去驱动数码管显示。
具体转换过程如下:
我们先将要显示的数据装入累加器A中,再将A中的数据转换成高低两位的BCD码,
再放回A中,然后将A中的值输出。如:有一个单元存储了45这样一位数,则需转换成四
位的BCD码:(0100)(0101)然后放入A中。A中BCD码,高位四位代表¡4¡低四位代
表¡5¡同时送给两个译码器中,译码后¡45¡字就在两个LED中显示出来。
2.计时功能的实现与中断服务程序
时间的运行依靠定时中断子程序对时钟单元数值进位调整来实现的。计数器T0打开后,
进入计时,满100毫秒后,重装定时。中断一次,满一秒后秒进位,满60秒后即为1分钟,
分钟单元进位,60分到了后,时单元进位,24小时满后,天单元进位。这样然后根据进率,
得到年、月、日、时、分、秒存储单元的值,并经译码后,通过扫描程序送LED中显示出来,
实现时钟计时功能。累加是用指令INC来实现的。
进入中断服务程序以后,执行PUSHPSW和PUSHA将程序状态寄存器PSW的内容和累
加器A中的数据保存起来,这便是所谓的¡保护现场¡.以保护现场和恢复现场时存取关键
数据的存储区叫做堆栈。在软件的控制之下,堆栈可在片内RAM中的任一区间设定,而堆栈
的数据存取与一般的RAM存取又有区别,对它的操作,要遵循¡后进先出¡的原则。
3时间控制功能与比较指令
系统的另一功能就是实现对执行设备的定时开关控制,其主要控制思想是这样的:先
将执行设备开启的时间和关闭时间置入RAM某一单元,在计时主程序当中执行几条比较指
令,如果当前计时时间与执行设备的设定开启时间相等,就执行一条CLR指令,将对应的
那路P3置为高电位,开启;如果当前计时时间与执行设备设定的关闭时间相等,就执行SETB
对应的P3置低电位,二极管截止,。实现此控制功能用到的比较指令为CJNEA,#direct,
rel,其转移条件是累加器A中的值与立即数不等则转移。
参考文献
1、谢自美,《电子线路设计、实验、测试》武汉:华中理工大学出版社,2000
2、何书森、何华斌《实用数字电路原理与设计速成》福州:福建科学技术出版社,2000.6
3、白驹衍,《单片计算机及应用》北京:电子工业出版社,1999.2
五:程序
SECEQU32H;秒即时时间伪指令
MINEQU31H;分
HOUREQU30H;时
DAYEQU35H;日
MONEQU34H;月
YEAREQU33H;年
MIN_1EQU41H;分定时器1路、开存储单元
HOUR_1EQU42H;时
DAY_1EQU43H;
MON_1EQU44H;
YEAR_1EQU45H;
MIN_11EQU40H;分定时器1路、关存储单元
HOUR_11EQU46H;时
DAY_11EQU47H;日
MON_11EQU48H;月
YEAR_11EQU49H;年
;***********************
ORG0000H
ljmpMAIN
ORG0003H;中断转换显示年月日、INT0(SB4键)
LJMPSHOW
ORG000BH;计数中断T0、方式1
LJMPTIME
ORG0013H
LJMPCHANGE;调整时间、定时、INT1(SB0键)
;------主程序
ORG0030H
MAIN:
;--------初始化付值
MOVYEAR,#02
MOVMON,#05
MOVDAY,#01
MOVHOUR,#00
MOVMIN,#00
MOVSEC,#00
CLR40H;定时单元1路清零
CLR41H
CLR42H
CLR43H
CLR44H
CLR45H
CLR46H
CLR47H
CLR48H
CLR49H
;-------开中断
MOVTMOD,#01H;计数、模式1、T0
MOVTL0,#0B0H;100SM计数定时
MOVTH0,#3CH;
clrp3.0
MOV20H,#0AH;10次*100SM
SETBPT0;T0为最高级
SETBTR0;允许计数
SETBET0;允许T0中断
SETBEX0;允许INT0中断
SETBEX1;允许INT1中断
SETBEA;开总中断
;------显示、定时器启动判断
LOOP:
MOVR1,#30H;存储单元
MOVR4,#01H;位选通
MOVR3,#03H;三组显示
NEXT:
MOVA,@R1;
MOVB,#10;将存储单元转换成两高低两组的BCD码
DIVAB
SWAPA
ORLA,B
MOVP0,A;输出
MOVP2,R4
INCR1;下一单元
MOVA,R4;
RLA;位移
MOVR4,A
LCALLDE5SM;延时0.5SM
DJNZR3,NEXT;全扫描显示一偏
;------判断定时输出(只编写了一路)
CJNER7,#88H,LOOP;是8则开,否则、定时已关、转
;---------开
MOVA,YEAR
CJNEA,YEAR_1,LOOP_1;年比较,不等转关
MOVA,MON
CJNEA,MON_1,LOOP_1
MOVA,DAY
CJNEA,DAY_1,LOOP_1
MOVA,HOUR
CJNEA,HOUR_1,LOOP_1
MOVA,MIN
CJNEA,MIN_1,LOOP_1
CPLP3.0
;---------关
LOOP_1:
MOVA,YEAR
CJNEA,YEAR_11,LOOP;年比较
MOVA,MON
CJNEA,MON_11,LOOP
MOVA,DAY
CJNEA,DAY_11,LOOP
MOVA,HOUR
CJNEA,HOUR_11,LOOP
MOVA,MIN
CJNEA,MIN_11,LOOP
CPLP3.0
LJMPLOOP
;-----年月日显示中断子程序
SHOW:
PUSHPSW
pushACC
PUSHB
PUSH01H
PUSH02H
PUSH03H
PUSH04H
MOVR2,#0FFH;中断扫描次数
TURN:MOVR1,#33H
MOVR4,#01H
MOVR3,#03H
NEXT_1:
MOVA,@R1
MOVB,#10
DIVAB
SWAPA
ORLA,B
MOVP0,A
MOVP2,R4
INCR1
RLA
MOVR4,A
LCALLDE5SM
DJNZR3,NEXT_1
DJNZR2,TURN;反复显示一定时间后返回
POP04H
POP03H
POP02H
POP01H
POPB
POPACC
POPPSW
RETI
;-----计数中断服务子程序
TIME:
PUSHPSW
PUSHACC
PUSHB
PUSH06H
MOVTH0,#3CH;重装计数
MOVTL0,#0BH;
DJNZ20H,OUT;转到中断跳出pop程序
MOV20H,#0AH;重装:100*10=1000
;-----进位程序
INCSEC
MOVR6,SEC;
CJNER6,#60,OUT;比较
MOVSEC,#00;
INCMIN
MOVR6,MIN
CJNER6,#60,OUT
MOVMIN,#00
INCHOUR
MOVR6,HOUR
CJNER6,#25,OUT
MOVHOUR,#00
INCDAY
MOVR5,MON
CJNER5,#1,MON_22;是否1月、不是转2月
MOVR5,DAY
CJNER5,#32,OUT;本月是否益出
INCMON
MOVDAY,#1
LJMPOUT
OUT:
POP06H
POPB
POPACC
POPPSW
RETI
MON_22:
MOVR5,MON
CJNER5,#2,MON_33;是否2月、不是转3月
MOVA,YEAR;判断是否瑞年
MOVB,#4
DIVAB
MOVA,B
JNZOUT_1;不是则转(A不为零则转)
MOVR5,DAY
CJNER5,#30,OUT;如是瑞年、判断是否到29天
INCMON
MOVDAY,#1
LJMPOUT
OUT_1:
MOVR5,DAY
CJNER5,#29,OUT;平年二月判断
INCMON
MOVDAY,#1
LJMPOUT
MON_33:
MOVR5,MON
CJNER5,#3,MON_44
MOVR5,DAY
CJNER5,#32,OUT
INCMON
MOVDAY,#1
LJMPOUT
MON_44:
MOVR5,MON
CJNER5,#4,MON_55
MOVR5,DAY
CJNER5,#31,OUT
INCMON
MOVDAY,#1
LJMPOUT
MON_55:
MOVR5,MON
CJNER5,#5,MON_66
MOVR5,DAY
CJNER5,#32,OUT
INCMON
MOVDAY,#1
LJMPOUT
MON_66:
MOVR5,MON
CJNER5,#6,MON_77
MOVR5,DAY
CJNER5,#31,OUT
INCMON
MOVDAY,#1
LJMPOUT
MON_77:
MOVR5,MON
CJNER5,#7,MON_88
MOVR5,DAY
CJNER5,#32,L1
INCMON
MOVDAY,#1
L1:LJMPOUT
MON_88:
MOVR5,MON
CJNER5,#8,MON_99
MOVR5,DAY
CJNER5,#32,L2
INCMON
MOVDAY,#1
L2:LJMPOUT
MON_99:
MOVR5,MON
CJNER5,#9,MON_00
MOVR5,DAY
CJNER5,#31,L3
INCMON
MOVDAY,#1
L3:LJMPOUT
MON_00:
MOVR5,MON
CJNER5,#10,MON_AA
MOVR5,DAY
CJNER5,#32,L4
INCMON
MOVDAY,#1
L4:LJMPOUT
MON_AA:
MOVR5,MON
CJNER5,#11,MON_BB
MOVR5,DAY
CJNER5,#31,L5
INCMON
MOVDAY,#1
L5:LJMPOUT
MON_BB:
MOVR5,DAY
CJNER5,#32,L6
INCYEAR
MOVMON,#1
MOVDAY,#1
L6:LJMPOUT
;-------按SB2定时器年单元加1子程序
SB3_2:LJMPSHOW_2;二路没编返回
SB3_3:LJMPSHOW_3;三路没编返回
SB3_1:
MOVA,YEAR_1;调时年单元
MOVB,#10
DIVAB
SWAPA
ORLA,B
MOVP0,A
MOVP2,#01H
LCALLREAD
LCALLDE250SM
CJNEA,01H,SB3_1
CJNEA,#0FBH,KEY2_7;按SB2转年调整
LJMPMON_111;按SB1往下调月单元
KEY2_7:CJNEA,#0FDH,SB3_1
INCYEAR_1;1路年单元加1
MOVR5,YEAR_1
CJNER5,#09,SB3_1;益出
MOVYEAR_1,#00H
AJMPSB3_1;
;-------月单元加1子程序
MON_111:
MOVA,MON_1;调时月单元显示
MOVB,#10
DIVAB
SWAPA
ORLA,B
MOVP0,A
MOVP2,#02H
LCALLREAD
LCALLDE250SM
CJNEA,01H,MON_111
CJNEA,#0FBH,KEY2_8;按SB2转月调整
LJMPDAY_111
KEY2_8:
CJNEA,#0FDH,MON_111
INCMON_1;1路月单元加1
MOVR5,MON_1
CJNER5,#13,MON_111;益出
MOVMON_1,#01H
AJMPMON_111;转到月显
;_------日单元加1子程序
DAY_111:
MOVA,DAY_1;调时日单元显示提示
MOVB,#10
DIVAB
SWAPA
ORLA,B
MOVP0,A
MOVP2,#04H
LCALLREAD
LCALLDE250SM
CJNEA,01H,DAY_111
CJNEA,#0FBH,KEY2_9;按SB2转日调整
LJMPHOUR_111
KEY2_9:CJNEA,#0FDH,DAY_111
INCDAY_1;1组日单元加1
MOVR5,DAY_1
CJNER5,#32,DAY_111;益出
MOVDAY_1,#01H
AJMPDAY_111;转到日显
;-------按SB2时单元加1子程序
HOUR_111:
MOVA,HOUR_1;调时时单元显示提示
MOVB,#10
DIVAB
SWAPA
ORLA,B
MOVP0,A
MOVP2,#01H
LCALLREAD
LCALLDE250SM
CJNEA,01H,HOUR_111
CJNEA,#0FBH,KEY2_10;按SB2转时调整
LJMPMIN_111
KEY2_10:CJNEA,#0FDH,HOUR_111
INCHOUR_1
MOVR5,HOUR_1
CJNER5,#24,HOUR_111;益出
MOVHOUR_1,#00H
AJMPHOUR_111;转到时显
;-------分单元加1子程序
MIN_111:
MOVA,MIN_1;调时分单元、并显示提示
MOVB,#10
DIVAB
SWAPA
ORLA,B
MOVP0,A
MOVP2,#02H
LCALLREAD
LCALLDE250SM
CJNEA,01H,MIN_111
CJNEA,#0FBH,KEY2_11;按SB2转分调整
AJMPOFF_CH;按SB3往下调定时:关单元
KEY2_11:CJNEA,#0FDH,MIN_111
INCMIN_1;1路分单元加1
MOVR5,MIN_1
CJNER5,#60,MIN_111;益处
MOVMIN_1,#00H
AJMPMIN_111;转到分显
年单元调整
OFF_CH:MOVA,YEAR_11;调时年单元
MOVB,#10
DIVAB
SWAPA
ORLA,B
MOVP0,A
MOVP2,#01H
LCALLREAD
LCALLDE250SM
CJNEA,01H,OFF_CH
CJNEA,#0FBH,KEY2_F7;按SB2转年调整
LJMPMON_OFF;按SB1往下调月单元
KEY2_F7:CJNEA,#0FDH,OFF_CH
INCYEAR_11;1路年单元加1
MOVR5,YEAR_11
CJNER5,#09,OFF_CH;益出
MOVYEAR_11,#00H
AJMPOFF_CH;
;-------月单元加1子程序
MON_OFF:
MOVA,MON_11;调时月单元显示
MOVB,#10
DIVAB
SWAPA
ORLA,B
MOVP0,A
MOVP2,#02H
LCALLREAD
LCALLDE250SM
CJNEA,01H,MON_OFF
CJNEA,#0FBH,KEY2_F8;按SB2转月调整
LJMPDAY_OFF
KEY2_F8:
CJNEA,#0FDH,MON_OFF
INCMON_11;1路月单元加1
MOVR5,MON_11
CJNER5,#13,MON_OFF;益出
MOVMON_11,#01H
AJMPMON_OFF;转到月显
;_------日单元加1子程序
DAY_OFF:
MOVA,DAY_11;调时日单元显示提示
MOVB,#10
DIVAB
SWAPA
ORLA,B
MOVP0,A
MOVP2,#04H
LCALLREAD
LCALLDE250SM
CJNEA,01H,DAY_OFF
CJNEA,#0FBH,KEY2_F9;按SB2转日调整
LJMPHOUR_OFF
KEY2_F9:CJNEA,#0FDH,DAY_OFF
INCDAY_11;1组日单元加1
MOVR5,DAY_11
CJNER5,#32,DAY_OFF;益出
MOVDAY_11,#01H
AJMPDAY_OFF;转到日显
;-------按SB2时单元加1子程序
HOUR_OFF:
MOVA,HOUR_11;调时时单元显示提示
MOVB,#10
DIVAB
SWAPA
ORLA,B
MOVP0,A
MOVP2,#01H
LCALLREAD
LCALLDE250SM
CJNEA,01H,HOUR_OFF
CJNEA,#0FBH,KEY2_F10;按SB2转时调整
LJMPMIN_OFF
KEY2_F10:CJNEA,#0FDH,HOUR_OFF
INCHOUR_11
MOVR5,HOUR_11
CJNER5,#24,HOUR_OFF;益出
MOVHOUR_11,#00H
AJMPHOUR_OFF;转到时显
;-------分单元加1子程序
MIN_OFF:
MOVA,MIN_11;调时分单元、并显示提示
MOVB,#10
DIVAB
SWAPA
ORLA,B
MOVP0,A
MOVP2,#02H
LCALLREAD
LCALLDE250SM
CJNEA,01H,MIN_OFF
CJNEA,#0FBH,KEY2_F11;按SB2转分调整
LJMPON_1;按SB3往下调定时:开与关
KEY2_F11:CJNEA,#0FDH,MIN_OFF
INCMIN_11;1路分单元加1
MOVR5,MIN_11
CJNER5,#60,MIN_OFF;益处
MOVMIN_11,#00H
LJMPMIN_OFF;转到分显
;-------开、关定时
ON_1:CJNEA,#0FBH,MIN_OFF
K1:MOVA,#88H
MOVR7,A
MOVP0,A
MOVP2,#0FFH;三组都显示开
LCALLREAD
LCALLDE250SM
CJNEA,01H,ON_1;去抖后比较
CJNEA,#0FBH,KEY2_12;按SB2转关
LJMPOUT_A;按SB3调出、处于开状态
KEY2_12:CJNEA,#0FDH,K1
k2:MOVA,#00H;显示0关
MOVR7,A
MOVP0,A
MOVP2,#0FFH;
LCALLREAD
LCALLDE250SM
CJNEA,01H,K2;去抖后比较
CJNEA,#0FBH,KEY2_13;按SB2转开
LJMPOUT_A;SB3调出、处关状态
KEY2_13:
CJNEA,#0FDH,K2;比较按了没
LJMPK1;按了SB2、转开
OUT_A:
POP00H
POPB
POPACC
POPPSW
RETI
;_------读取按键程序
READ:MOVA,P1;读取按键
MOVR1,A
LCALLDE10MS
MOVA,P1
RET
;_----延时程序
DE5SM:
PUSH01H
MOVR1,#0FFH
DJNZR1,$
POP01H
RET
DE10MS:PUSH04H
PUSH05H
MOVR4,#0AH
Dl1:MOVR5,#0FFH
dl2:DJNZR5,$
DJNZR4,dl1
POP05H
POP04H
RET
DE250SM:PUSH02H
PUSH00H
MOVR0,#0FFH
DEL:MOVR2,#0FFH
DJNZR2,$
DJNZR0,DEL
POP00H
POP02H
RET
;_---调整时间进位程序
MIN_AD:
INCMIN
MOVR6,MIN
CJNER6,#60,OU1
MOVMIN,#00
OU1:RET
HOUR_AD:
INCHOUR
MOVR6,HOUR
CJNER6,#25,OU2
MOVHOUR,#00
OU2:RET
DAY_AD:
INCDAY
MOVR6,DAY
CJNER6,#32,OU3;是否益出
MOVDAY,#01H
OU3:RET
MON_AD:
INCMON
MOVR6,MON
CJNER6,#13,OU4;是否益出
MOVMON,#01H
OU4:RET
YEAR_AD:
INCYEAR
MOVR6,YEAR
CJNER6,#09,OU5;是否益出
MOVYEAR,#00H
OU5:RET
六:附录
实验设计电路图1
10. 绘制一单片机最小系统电路图,编写程序控制P1.7口输出低电平,并点亮发光二极管。求大神解答哇😭
编程实现对 8 个 LED 的输出控制 将实验箱中的 8255 片选信号连接到 218H~21FH,将 8255 的 4 个寄存器地址(A、B、 C 端口及控制字寄存器端口)设置为 218H~21BH。将 8255 的端口 A 的 8 个引脚:PA0~PA7 与 8 个 LED 对应相连,然后打开实验箱电源,最后编程对 8 个 LED 进行显示控制。
程序清单:
CODE SEGMENT
ASSUME CS:CODE
START: MOV DX,21BH
MOV AL,80H
OUT DX,AL ;工作方式初始化
MOV DX,218H
MOV AL,0FEH ;设置输出数据,即显示模式
MOV CX,80 ;设置循环次数
LN: OUT DX,AL
ROL AL,1
CALL DELAY ;调用延迟程序
LOOP LN
MOV AH,4CH
INT 21H ;返回 dos
DELAY PROC ;延迟子程序
PUSH CX
MOV BX,2000
A0: MOV CX,3000
A1: LOOP A1
DEC BX
JNZ A0
POP CX
RET DELAY
ENDP
CODE ENDS
END START。吴鉴鹰单片机开发板。
从刚开始接触单片机,到现在已经有4年的时间了,在这期间学习和使用了51单片机、飞思卡尔单片机,LPC2138,PIC16F887等系列的单片机,每接触一款单片机,都会经历熟悉其基本开发,然后将其用于项目中的过程,对于如何学习一款单片机,自己做了如下的总结。
大家都知道,51单片机是最容易入门的,不仅因为其编程简单,更重要的是网上的资料非常丰富。所以一般学习单片机开发的都将51单片机作为入门开发的首选。我学习51单片机的时候是采用这样的一个步骤进行学习的:
第一步(熟悉的过程):买了一款51单片机开发板,然后就开始了我的学习之旅,刚开始的时候没有去看视频教程,而是对着一本实验教材进行学习,那本实验教材的名字记不清楚了,但是其内容就是围绕单片机的LED灯进行控制,将51单片机内部的各个功能部件全部都使用到了,这样就能使我在很短的时间内,通过控制LED灯的亮、灭熟悉了51单片机的内部的各种资源,这时对51单片机也就没有感到陌生了。所以,个人觉得,学习单片机,要从实验入手,先熟悉单片机再说,开发语言开始使用的是C语言。
第二步(进阶的过程):有了第一步的基础之后,接下来的便是进阶的过程,当时,我看的是郭天祥十天学会单片机的视频教程,因为这个教程从基础到复杂的编程慢慢深入,讲的比较的全面,而且也生动,所以那一阶段,也是我学习单片机进步最快的阶段,每次听课的时候,按照上面的实验,以及课堂上面调试程序时出现的一些问题,自己认真的在电脑上进行调试,并分析产生故障的原因,让我有了一定的开发基础。在看完了视频教程之后,后面又对基础的知识进行了下补习,主要是看单片机原理性的教材,因为有些细节性的东西还是要从教材上面获得。