AUXR EQU 8EH
;---------------------------------------------------------------
;定义管脚
;---------------------------------------------------------------
defin:
HC595_SCK BIT P0.4;sbit HC595_SCK = P0^4;
HC595_RCK BIT P0^5;sbit HC595_RCK = P0^5;
HC595_RST BIT P0^6;sbit HC595_RST = P0^6;
HC595_DAT BIT P0^7;sbit HC595_DAT = P0^7;
ORG 0000H
AJMP INIT
ORG 000BH ;定时器0的中断向量地址
AJMP TIME0 ;跳转到真正的定时器程序处
ORG 0030H
;---------------------------------------------------------------
;初始化
;---------------------------------------------------------------
INIT:;MOV P0 ,#0FH;初始化低四位为高电平,使能四位数码管
CLR HC595_RST;HC595的复位端,不能让他复位
ANL PCON,#7FH //波特率不倍速 SMOD=0
MOV SCON,#50H //方式1,8位数据,可变波特率,接收允许
ORL AUXR,#40H
ANL AUXR,#0FEH //定时器1时钟为Fosc,即1T
ANL TMOD,#0FH //定时器1:模式2,8位自动重装模式,用于产生波特率 9600
ORL TMOD,#20H
MOV TL1,#0B2H
MOV TH1,#0B2H
CLR ET1
SETB TR1
CLR ES //关串行中断
CLR PS
; SETB EA
MOV 32H,#2H
MOV 33H,#9H
MOV 34H,#4H
MOV 35H,#0H
MOV R1,#32H
MOV A,@R1
MOV 31H,#00H ;软件计数器预清0
MOV TMOD,#00000001B ;定时/计数器0工作于方式1
MOV TH0,#3CH
MOV TL0,#0B0H ;即数15536
SETB EA ;开总中断允许
SETB ET0 ;开定时/计数器0允许
SETB TR0 ;定时/计数器0开始运行
SETB PT0
;---------------------------------------------------------------
;主函数
;---------------------------------------------------------------
MAIN: ;MOV R2,#250 ;循环250次
SHOW1:
LCALL SENDASC
LCALL RECEIVE
LCALL SHOW1234
;DJNZ R2,SHOW1
JMP MAIN
我想用串口自发自收,每秒更新一次的数据送入串口发送并接收显示,本来没有串口直接显示时,四位数码管显示正常四位常亮,但是,只是加了串口后,数码管前面三位开始跳动闪烁,只有第四位是常亮的,为什么呢
我试了试,也不是数码管显示函数中的延迟的问题,改长改短都会闪烁
但是我不用串口直接把数据送到数码管时是正常显示的啊
追答那是当然,不用串口的时候显示是没有干扰的,但有串行通讯时,要占用时间的,影响到了显示。
本回答被提问者采纳高分:51单片机汇编程序,数码管跳动问题
应该是串口收发导致单片机忙不过来,显示就会闪烁,因为你的延时程序是空操作,也占用CPU,建议你用定时中断做显示程序,中断时间定在5ms就可以了,这个定时器可以通过计数干很多其他事,比如500ms干一次。这样就不用CPU做空操作干等了。给你贴一个我写的显示程序(在定时中断中调用,这个程序显示两组数据...
51单片机按键时,数码管会闪烁一下.原因是什么
原因很简单,这是代码和数码管驱动的问题 按键会影响数码管显示,这是单片机直接驱动数码管会出现的问题,而数码管则是工作在动态扫描方式的,若是采用带有锁存器件的数码管驱动,则不会出现此类现象,因为单片机是周期性的扫描工作方式,单片机直接驱动数码管的电路,当单片机扫描到按键的时候,数码管部分...
51单片机数码管显示不停闪烁?
你显示的时候,先显示分,仅仅显示几个毫秒,之后,就显示秒。秒,显示几个毫秒,之后,没有消隐,一直显示到下次调用显示程序。所以,秒,显示稳定,分,一闪就没了。
51单片机 关于按键控制数码管闪烁
可是,你没有写闪烁程序,当然就没有什么反应了,只有再按K2,K3,才能调时分秒,才有改变。只按K1后,不按K2,K3就看不出反应了。
51单片机如何让一个数码管闪烁而其他数码管一直保持亮的状态不受影响...
\/\/5种模式4个数码管,所以表格为5*4 \/\/4个0表示4个数码管都可以正常亮 void display(uint m,uchar mode )\/\/4位显示子程序 带某位闪烁功能 \/\/mode=0,都不闪烁 mode=1 千位闪烁 mode=2 百位闪烁 mode=3 十位闪烁 mode=4 个位闪烁 \/\/mode=5 全部闪烁 { uchar a1,a2,a3,a4;staic ia...
请教高手,用51单片机独立按键控制数码管数字加减,为什么在按下独立按...
数码管一般都是动态扫描的,利用人眼的视觉暂留做的,你按下按键的时候,肯定有延时消抖,延时的时候就影响了数码管显示,所以数码管刷新的慢了,人眼就能分辨出来亮和灭的状态...解决办法 1、改进按键扫描 2、改进数码管显示 3、用嵌入式系统 以上三选一即可解决 ...
单片机数码管闪烁现象
1、你的程序太过复杂,而且没有一点层次感,最起码的编程习惯都没有(缺少注释)2、采用动态扫描的方法,有两个极端要考虑下 如果时间太长,则显示的字符是一个一个的显示 如果时间太短,就会出现你说的那种现象 只有在适当的时间内,利用人眼的视觉滞留效应,才可以感觉到显示“正常”关于此问题,你...
高分:51单片机汇编程序问题,为什么没调用的程序会对原程序产生影响
seg位置影响了数码管显示 去掉org 0100h 因为程序编译代码会超过0100h,覆盖了seg的数据 使得乱码 而删除show1234段使得程序代码短了,seg段就正常了
用51单片机做一个键盘,按一下数码管加1,可是无论我怎么消抖动,总是有...
你可以在去抖程序里加入检测松手程序例如 ………if(!key) \/\/检测键盘是否按下 delay():\/\/去抖延时一般是50ms if(!key)\/\/再次检测键盘是否按下 ×××++: \/\/这里写数码管加"1"程序 while(key);\/\/加入写句,目的是等待key变为原来的状态才会执行下一条指令!希望可以帮到你!
51单片机数码管动态显示从右往左
这是四位数码管从右从左流动显示,像滚动字幕一样的。用不着矩阵按键哪。其实程序很简单,没那么复杂。程序如下 include <reg51.h> define uchar unsigned char define uint unsigned int uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};\/\/共阴段码码,0x...