求基于51单片机P01,P2 LED接数码管,用三极管驱动的电子时钟程序,大神求救啊!

作者&投稿:有轻 (若有异议请与网页底部的电邮联系)
51单片机(at89s51)电子时钟用8050三极管能驱动(共阳型)数码管吗(我有20来个8050三极管)不想浪费了~

能,用单片机控制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 引脚供电。...

民勤县15758091284: 求基于51单片机P01,P2 LED接数码管,用三极管驱动的电子时钟程序,大神求救啊! -
鞠菁正心: 程序名称: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,延时函...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网