求基于51单片机P01,P2 LED接数码管,用三极管驱动的电子时钟程序,大神求救啊!
能,用单片机控制8050基极电平,做成动态扫描就行。以前我做过。
在数字电路中所谓的三极管驱动,全部是用三极管的开关特性,首先你的接法是正确的,单片机选通某一个片选端时,给对应三极管基极一个高电平,该三极管导通处于饱和区,反之低电平三极管处于截止区。三极管的这种用法在数字电路中相当多的,只要是数字信号,那么它就是一个开关,无一例外。
程序名称:51单片机数码管电子钟汇编程序简要说明:实现24小时制电子钟,8位数码管显示,显示时分秒
显示格式:23-59-59(小时十位如果为0则不显示)
P0口输出段选信号,P2口输出位选信号
P1.0为调时按钮,P1.1为调分按钮;晶振12M
编 写:JiangX.net
**********************************************/
ORG 0000H ;程序入口地址
LJMP START
ORG 000BH ;定时器0中断入口地址
LJMP TIMER_0
K1 BIT P1.0 ;定义调时按键
K2 BIT P1.1 ;定义调分按键
START:
MOV TMOD,#01H ;定时器0,工作模式1
MOV TH0,#03CH
MOV TL0,#0B0H ;赋初值,定时50ms
SETB EA ;开中断总开关
SETB TR0 ;开启定时器0
SETB ET0 ;定时器0中断允许位
MOV R6,#0 ;用于控制走时的基准时钟源,计中断次数
MOV R5,#0 ;R5用于控制扫描按键的时间间隔
MOV 20H,#0 ;秒个位寄存器清零
MOV 21H,#0 ;秒十位寄存器清零
MOV 22H,#0 ;分个位寄存器清零
MOV 23H,#0 ;分十位寄存器清零
MOV 24H,#0 ;时个位寄存器清零
MOV 25H,#0 ;时十位寄存器清零
LJMP DISPLAY
TIMER_0:
CLR EA
INC R6
INC R5
MOV TH0,#03CH
MOV TL0,#0B0H ;重新赋初值,定时50ms
SETB EA
RETI
ADD_TIME:
CJNE R6,#20,EXIT ;定时器中断20次,1秒到
MOV R6,#0
INC 20H
MOV A,20H
CJNE A,#10,EXIT ;如果秒个位等于10,清零
MOV 20H,#00H
INC 21H
MOV A,21H
CJNE A,#6,EXIT ;如果秒十位等于6,清零
MOV 21H,#00H
INC 22H
MIN:
MOV A,22H
CJNE A,#10,EXIT ;如果分个位等于10,清零
MOV 22H,#00H
INC 23H
MOV A,23H
CJNE A,#6,EXIT ;如果分十位等于6,清零
MOV 23H,#00H
INC 24H
HOUR:
MOV A,25H
CJNE A,#2,LOOP ;如果时十位等于2,检查时个位
MOV A,24H
CJNE A,#4,EXIT ;如果时个位等于4,清零
MOV 24H,#00H ;清零时个位
MOV 25H,#00H ;清零时十位
LJMP EXIT
LOOP:
MOV A,24H
CJNE A,#10,EXIT ;如果时个位等于10,清零
MOV 24H,#00H
INC 25H
LJMP EXIT
EXIT:
LJMP DISPLAY ;刷新完毕,跳转到显示
DISPLAY:
MOV DPTR,#TABLE
MOV A,20H
MOVC A,@A+DPTR
MOV P0,A
CLR P2.7
LCALL DELAY
SETB P2.7 ;显示秒个位
MOV A,21H
MOVC A,@A+DPTR
MOV P0,A
CLR P2.6
LCALL DELAY
SETB P2.6 ;显示秒十位
MOV A,#0BFH
MOV P0,A
CLR P2.5
LCALL DELAY
SETB P2.5 ;显示“-”
MOV A,22H
MOVC A,@A+DPTR
MOV P0,A
CLR P2.4
LCALL DELAY
SETB P2.4 ;显示分个位
MOV A,23H
MOVC A,@A+DPTR
MOV P0,A
CLR P2.3
LCALL DELAY
SETB P2.3 ;显示分十位
MOV A,#0BFH
MOV P0,A
CLR P2.2
LCALL DELAY
SETB P2.2 ;显示“-”
MOV A,24H
MOVC A,@A+DPTR
MOV P0,A
CLR P2.1
LCALL DELAY
SETB P2.1 ;显示时个位
MOV DPTR,#TABLE1 ;该位使用TABLE1以消除前置0
MOV A,25H
MOVC A,@A+DPTR
MOV P0,A
CLR P2.0
LCALL DELAY
SETB P2.0 ;显示时十位
CJNE R5,#4,EXIT0 ;当R5到4时,扫描按键
MOV R5,#0
KEY_SCAN:
JNB K1,ADD_HOUR
JNB K2,ADD_MIN
LJMP ADD_TIME ;无键按下,跳至走时
ADD_HOUR:
INC 24H ;小时加1
LJMP HOUR ;更新
ADD_MIN:
INC 22H ;分钟加1
LJMP MIN ;更新
EXIT0:
LJMP ADD_TIME
DELAY:
MOV R7,#150 ;扫描延时
DJNZ R7,$
RET
TABLE: ;数码管字形显示编码表
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;字形显示编码
TABLE1:
DB 0FFH,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;小时位的十位数编码,该位如果为0则不显示
END ;程序结束
学51单片机,提到P0口为高阻状态,这个高阻状态什么意思?在百度知道里...
如图所示为P0口电路图。P0口的输出端是由上下2只场效应管组成。当上管V1导通、下管V1截止时,P0输出高电平;当上管V1截止、下管V2导通时,P0输出低电平;当V1、V2都截止时,就是高阻态。国为场效应管截止时DS间阻抗非常高(近似于开路),两管都截止就近似于P0口悬空。高阻态就是在两只管...
MCS-51单片机的P0、 P1、 P2、 P3口有哪些功能?如何使用这些功能?_百度...
P0.0~P0.7 P0口8位双向口线(在引脚的39~32号端子)。P1.0~P1.7 P1口8位双向口线(在引脚的1~8号端子)。P2.0~P2.7 P2口8位双向口线(在引脚的21~28号端子)。P3.0~P3.7 P3口8位双向口线(在引脚的10~17号端子)。P0口有三个功能 1、外部扩展存储器时,当做数据总线(...
根据51单片机对P0赋值就应该是 *(unsigned char *)P0 = 0X00;为什么我...
因为在#include〈reg51〉.h头文件中有#define 0x80 P0这句宏定义,也就是说以下两句语句是完全一样的 P0=0x00; 0x80=0x00; 这样的好处是我们只要看到p0就知道它是哪个端口,如何写成后一种我们只看到一个十文进制数,我们很难记得住这个寄存器干啥的,只有看书才能知道它其实是p0端口的数据寄存器...
求助:C51单片机P0口和P1口实际应用的区别
为了解决用户可能碰到关于"求助:C51单片机P0口和P1口实际应用的区别"相关的问题,志乐园经过收集整理为用户提供相关的解决办法,请注意,解决办法仅供参考,不代表本网同意其意见,如有任何问题请与本网联系。"求助:C51单片机P0口和P1口实际应用的区别"相关的详细问题如下:p0口是漏级开路,必须加上拉...
51单片机引脚哪里是P0,P1哪里是P2哪里是P3?有没有P4?
51单片机引脚P0引脚包含P0.0、P0.1、P0.7,共八个引脚。P1、P2、P3也一样,没有P4。P0口第一个引脚(第一个端口)就是单片机的第39引脚,在汇编语言中就表示为P0.0,在C51中表示为P0^0.
单片机读p0端口是什么意思?
不光是P0口,标准51单片机的所有IO口都有“读引脚”和“读锁存器”的问题。其实这类问题也很好解释,自己去看看51单片机的IO脚框图就豁然开朗了。读引脚的意思就是直接读P0外部引脚的电位,而读端口(锁存器)读的是内部与数据总线链接的锁存器的电位。一般来说,读取P0的数据,都是读引脚,目的是...
为什么说51单片机中数据总线是P0?
是因为当你执行访问外部RAM的指令时(例如movx r0,a),a的内容就是放在P0口的引脚上的,反过来输入时(例如movx a,@r0),CPU会把P0引脚上的信号送给a 当然P0是分时复用的,也输出地址,上例中r0的内容(地址)在ALE信号有效时也会出现在P0口。当然还有访问外部ROM的movc指令以及从外部ROM中取指令的...
单片机51,P1口的各个管脚是什么, 0xfe?
如果对于C语言。P0只是一个普通的变量。但是对于C51单片机语言,P0有其特定的含义。特指通用输入输出端口(GPIO)的第0组端口。也就是说,P0是和硬件芯片上的一组管脚,共计8个管脚相对应的。当使用P0=0xfe这种形式时,该组管脚必须被配置成可写的,也就是可用来输出的形式。0xfe转为二进制值为1111...
为什么51单片机P0口要外接一个排阻?
因为P0口是准双向口,即是开漏输出的,当P0口作为并行口使用时,只能输出低电平,不能输出高电平,需要接一个上拉电阻才能输出高电平,因为8个引脚都需要接上拉电阻,共8个,所以,用一个排电阻就方便了,假如用8个上拉电阻也是可以的,就是画图时比较麻烦些。
51单片机的P0口驱动共阴数码管的问题
接上拉电阻驱动共阴数码管,当P0口输出为高时,数码管亮。--此时,由 VCC 经过上拉电阻,为数码管供电。--此时,P0 的引脚,几乎不导电。--数码管的亮度,取决于上拉电阻的数值。接上拉电阻驱动共阴数码管,当P0口输出为低时,数码管灭。--此时,由 VCC 经过上拉电阻,为 P0 引脚供电。...
鞠菁正心: 程序名称:51单片机数码管电子钟汇编程序 简要说明:实现24小时制电子钟,8位数码管显示,显示时分秒 显示格式:23-59-59(小时十位如果为0则不显示) P0口输出段选信号,P2口输出位选信号 P1.0为调时按钮,P1.1为调分按钮;晶...
民勤县15758091284: 求51单片机控制2个数码管的程序 - ?
鞠菁正心: 两只数码管段码分别由P0,P2输出控制,P0是十位,P2是个位.62616964757a686964616fe59b9ee7ad9431333330363830P3.2,P3.4分别接两只按键,P32.清0,P3.4计数.以上程序来自《单片机C语言程序设计实训100例——基于8051+...
民勤县15758091284: 求一个简单的51单片机程序 (一个按键控制两个口输出) - ?
鞠菁正心: 确实是初学呀,P0,P1,P2都有8个IO口,所以暂且给你都安排在第一个口吧. #include<reg51.h> #define uchar unsigned char sbit key=P0^0; sbit pluse1=P1^0; sbit pluse2=P2^0; void delay(int ms) { uchar i ; while(ms--)for(i=0;i<120;i++); } main() ...
民勤县15758091284: 51单片机P1口输出1HZ方波,P2口输出2HZ方波的汇编程序,求啊,?
鞠菁正心: 给点思路你吧——得用两个定时器.先赋初值,开中断,等待中断.中断程序中可这么设计,定时器定时到0.5秒的时候改变P2的电平,定时器1定时到1秒的时候改变P1口的电平. 希望对你有用
民勤县15758091284: 求基于51单片机的C外部中断程序指导~ - ?
鞠菁正心: /这是测试时用的,你用不到.h>#define uchar unsigned char#define uint unsigned int void delayms(uint); sbit led1=P2^0;/ void main() { EA=1;//这个地方时低电平开中断#include<reg52.h>//j--); } 你自己加到你的程序里试试.uchar num,相信你...
民勤县15758091284: 求一个基于AT89S51单片机的PWM调光的C程序,LED接在P2口,按键接在P3^2 -- P3^5,要求P^2按下增加亮度 - ?
鞠菁正心: #include sbit K1 =P3^2 ; //亮度增加键 sbit K2 =P3^3 ; //亮度减少键 unsigned char PWM=0x7f ; void delayms(unsigned char ms); void delay(unsigned char t);/*********************************************************/ void main() {P2=0xff; TMOD=0x21 ;...
民勤县15758091284: 51单片机P01加按键,P2口驱动1602显示,这么简单的程序,为什么搞不定? - ?
鞠菁正心: 你这是实物开发板,还是仿真图呀.那P01脚接按键,要加上拉电阻的.估计是没有上拉电阻的原因.还有程序有问题,if(0==K1) ,这是K1,可是while(0==K2),这却是K2,这不相同的.另外,写程序要规范,要写成if(K1==0),这才是标准的写法.
民勤县15758091284: 单片机 怎么将P1和P2连用? - ?
鞠菁正心: 示范一下:LED1 EQU 30H LED2 EQU 31H ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV LED1,#0FEH MOV LED2,#0FFH LOOP: MOV P1,LED1 MOV P2,LED2 LCALL DELAY MOV A,LED1 SETB C RLC A PUSH ACC MOV A,LED2 RLC A MOV LED2,A POP ACC JC LOOP1 ANL A,#0FEH MOV LED1,A SJMP LOOP LOOP1: ORL A,#01H SJMP LOOP END
民勤县15758091284: 求51单片机汇编语言 要求P1口LED灯闪烁 并且P2口接1个数码管自动计数并且P3.2按键计数 求答案啊 - ?
鞠菁正心: ORG 0000H LJMP MAIN ORG 0003H LJMP EX0INT ORG 0030H MAIN:MOV SP,#5FHSETB IT0SETB EX0SETB EAMOV R0,#0MOV DPTR,#TABLEMOV A,R0MOVC A,@A+DPTRMOV P2,A LOOP:MOV A,P1CPL A...
民勤县15758091284: 基于51单片机数码管动态显示程序 - ?
鞠菁正心: P2.7-P2.4为选择数码管,P1口接数码管8个笔画#include<xxxxx.H> //你所用单片机的型号 main() { while(1) { P2 = 0x1F; P1 = SEG_TAB[a/1000]; //送A的最高位代码,求段码后送显//示,要求A值不要大于4位数 delay_ms(2); //延时2ms,延时函...