找回密码
 立即注册
查看: 215|回复: 15

PWM输出影响数码管

[复制链接]

该用户从未签到

14

主题

33

回帖

204

积分

中级会员

积分
204
发表于 2024-3-20 09:50:44 | 显示全部楼层 |阅读模式
本帖最后由 alanma 于 2024-3-20 10:33 编辑

有没有老师指导下?SET8H4K的P1.0的PWM输出,但是每次PWM输出的时候,数码管的共阳COM2(P2.2)会闪烁点亮,已经排除硬件短路等问题,原因一直没找到,PWM配置的是单独的输出,数码管为共阳的三位数码管,即使把数码管全部设置为没有输出,PWM输出的时候,数码管仍然会有部分笔画闪烁显示;PWM和数码管配置,以及PWM输出控制代码如下,
;========================================================================
; 函数: F_PWM_Init
; 描述: PWM初始化程序.
;========================================================================
F_PWM_Init:
    CLR     A                   ;写 CCMRx 前必须先清零 CCxE 关闭通道
    MOV     DPTR,#PWMA_CCER1
    MOVX    @DPTR,A

    MOV     A,#068H             ;设置 PWMx 模式1 输出
    MOV     DPTR,#PWMA_CCMR1
    MOVX    @DPTR,A

    MOV     A,#03H             ;配置通道输出使能和极性
    MOV     DPTR,#PWMA_CCER1
    MOVX    @DPTR,A
    MOV     A,#2EH                ;设置PWM频率=SYSCLK/(PWMx_PSCR+1)X(PWMx_ARR+1)=2kHz (PWMx_PSCR=0  
    MOV     DPTR,#PWMA_ARRH
    MOVX    @DPTR,A
    MOV     A,#0E0H
    MOV     DPTR,#PWMA_ARRL
    MOVX    @DPTR,A

    MOV     A,#00H             ;使能 PWM1P 输出  ;初始化不输出PWM,=01输出
    MOV     DPTR,#PWMA_ENO
    MOVX    @DPTR,A
   
    MOV     A,#00H              ;高级 PWM 通道输出脚选择位, P2.0为01H,P1.0为00H
    MOV     DPTR,#PWMA_PS
    MOVX    @DPTR,A
  
     MOV     A,#080H             ;使能主输出
    MOV     DPTR,#PWMA_BKR
    MOVX    @DPTR,A
    MOV     DPTR,#PWMA_CR1
    MOVX    A,@DPTR
    ORL     A,#01H              ;开始计时
    MOVX    @DPTR,A
     
MOV     PWM1_Duty_L, #0FFH   ;占空比50%
    MOV     PWM1_Duty_H, #15H    ;数值越大,占空比越大,=20占空比70%,=14占空比44%,=17占空比50%

;========================================================================
; 函数: F_UpdatePwm
; 描述: 更新PWM占空比值.
; 参数: [PWMn_Duty_H PWMn_Duty_L]: pwm占空比值.
;========================================================================
F_UpdatePwm:
    MOV     A, PWM1_Duty_H      ;设置占空比时间
    MOV     DPTR, #PWMA_CCR1H
    MOVX    @DPTR, A
    MOV     A, PWM1_Duty_L
    MOV     DPTR, #PWMA_CCR1L
    MOVX    @DPTR, A
    RET

;=======================
HEAT:
    MOV A,TEMP_STATE    ;判断加热状态,1为加热,0为不加热
JZ  F_INT0

    CLR C
    MOV A,FLAG_TEMP
    SUBB A,#60  ;设定小于50度关闭输出
    JC  F_INT0
    CLR C  
MOV A,FLAG_TEMP
SUBB A,TEMP_NUB
JNC F_INT1

INC TEMP_DOWN_DATA    ;连续5次温度值高于设定值才关闭,补偿温度不足的问题
MOV A, TEMP_DOWN_DATA
CJNE A,#8,INT_END
MOV TEMP_DOWN_DATA ,#0H
F_INT0:
    MOV     A,#0H             ;关闭PWM输出
    MOV     DPTR,#PWMA_ENO
    MOVX    @DPTR,A            
NOP
NOP
CLR P1.0                  ;输出脚拉低         
    RET
  
F_INT1:

    MOV     A,#01H             ;使能 PWM1P 输出
    MOV     DPTR,#PWMA_ENO
    MOVX    @DPTR,A
INT_END:
RET


;======================================================
DSPLAY_Init:
    MOV DPTR,#P2DR     ;P2DR地址0FE2AH
MOV A,#07H
MOVX @DPTR,A          ; 设置P2.0-2.2强电流输出

MOV DPTR,#COMEN     ;
MOV A,#07H
MOVX @DPTR,A ; //允许3个CO

MOV DPTR,#SEGENL  ;//允许0个SEG 低字节
MOV A,#0H
MOVX @DPTR,A

MOV DPTR,#SEGENH  ;//允许8个SEG 高字节
MOV A,#0FFH
MOVX @DPTR,A
      
MOV DPTR,#LEDCTRL  ;/B7=1: ON,  B5 B4: 0共阴, 1共阳, 2共阴共阳, 3保留, B2 B1 B0: 0占空比100%, 1~7占空比7/8~1/8
MOV A,#011H
MOVX @DPTR,A

MOV DPTR,#LEDCKS   //数码管COM扫描显示的主频时钟数 = 160*9*LEDCKS, 每个COM显示时间=1440*LEDCKS/fosc(MHz) us, COM扫描频率=fosc/(1440*LEDCKS *COM数).
MOV A,#08H    //例如 fosc = 11.0592MHz, 8个COM, LEDCKS = 8, 则每个COM显示时间=1440*8/11.0592 = 1042 us, COM扫描频率=11059200/(1440*8*8)=120Hz.
MOVX @DPTR,A    //已知扫描时间t(us)计算 LEDCKS = t*fosc(MHz)/1440, 比如fosc = 24MHz, 要求1个COM扫描1ms, 则 LEDCKS = 1000*24/1440 = 16.7, 取整数17.
    RET

回复 送花

使用道具 举报

  • TA的每日心情
    开心
    2024-4-24 09:28
  • 签到天数: 90 天

    [LV.6]常住居民II

    68

    主题

    579

    回帖

    1866

    积分

    超级版主

    积分
    1866
    QQ
    发表于 2024-3-20 10:24:27 | 显示全部楼层
    排除法,先单独测试数码管
    截图202403201024249035.jpg
    热线19952583534
    www.STCAI.com
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    14

    主题

    33

    回帖

    204

    积分

    中级会员

    积分
    204
     楼主| 发表于 2024-3-20 10:27:42 | 显示全部楼层
    国学芯用 发表于 2024-3-20 10:24
    排除法,先单独测试数码管

    只要不开PWM,数码管都是正常显示的
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    7 小时前
  • 签到天数: 71 天

    [LV.6]常住居民II

    2

    主题

    90

    回帖

    548

    积分

    高级会员

    积分
    548
    发表于 2024-3-20 13:45:31 | 显示全部楼层
    本帖最后由 STCAI-32位8051 于 2024-3-21 17:33 编辑

    汇编太难了。。。

    点评

    北京化工大学,何宾教授亲自主讲,STC创始人主持授课,正统权威。从第24集到第30集专业讲解:汇编语言程序设计,可以跟着视频一起学习 [attachimg]39101[/attachimg] 【新提醒】视频教学:《STC32位8051单片机原理  详情 回复 发表于 2024-3-21 10:16
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    14

    主题

    33

    回帖

    204

    积分

    中级会员

    积分
    204
     楼主| 发表于 2024-3-21 09:35:06 | 显示全部楼层
    补充说明下,我把数码管的所有寄存器清零后,
    开启PWM输出后,仍然有笔画闪烁输出,
    但是我把数码管的电源关闭掉(LEDCTRL的B7=0)后,
    闪烁的数码管笔端才没有闪烁点亮,
    PWM对应的管脚为P1.0,
    对应的闪烁笔段的COM口为P2.2,对应的SEG口为P0.0
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    550

    主题

    9339

    回帖

    1万

    积分

    管理员

    积分
    13932
    发表于 2024-3-21 10:02:38 | 显示全部楼层
    你这还是不用 仿真器查你程序错在哪的问题 !
    用 仿真器 深入进去,看你程序错在哪的手段:
    单步运行运行到光标处运行到断点

    截图202403211000573282.jpg

    仿真STC8,STC-USB Link1D支持STC32/STC8仿真及下载 !视频讲解 - 仿真/编译器/头文件 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)


    截图202403211002353427.jpg

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    2024-1-24 13:08
  • 签到天数: 1 天

    [LV.1]初来乍到

    8

    主题

    627

    回帖

    1044

    积分

    超级版主

    积分
    1044
    发表于 2024-3-21 10:16:42 | 显示全部楼层
    李鑫发 发表于 2024-3-20 13:45
    汇编太难了。。。

    北京化工大学,何宾教授亲自主讲,STC创始人主持授课,正统权威。从第24集到第30集专业讲解:汇编语言程序设计,可以跟着视频一起学习

    截图202403211014033821.jpg

    【新提醒】视频教学:《STC32位8051单片机原理及应用》,何宾教授主讲 - 视频教学,《单片机原理及应用》教学改革及实践研讨会,实战技术交流会,会务通知 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区  https://www.stcaimcu.com/forum.p ... &extra=page%3D1

    STC官网:https://www.stcai.com/
    QQ:2593903262
    微信号:18106296598
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    8 小时前
  • 签到天数: 133 天

    [LV.7]常住居民III

    26

    主题

    1305

    回帖

    4067

    积分

    论坛元老

    积分
    4067
    发表于 2024-3-21 10:43:40 | 显示全部楼层
    附件提供一份数码管显示同时PWMA端口输出PWM脉冲例子,这两个功能不会相互干扰。

    截图202403211040471550.jpg

    演示效果:


    参考程序: 4个共阴米字数码管显示-同时PWMA输出.zip (14.24 KB, 下载次数: 7)
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    7 小时前
  • 签到天数: 145 天

    [LV.7]常住居民III

    10

    主题

    277

    回帖

    974

    积分

    高级会员

    积分
    974
    发表于 2024-3-21 11:18:34 | 显示全部楼层
    STCAI-32位8051 发表于 2024-3-21 10:16
    北京化工大学,何宾教授亲自主讲,STC创始人主持授课,正统权威。从第24集到第30集专业讲解:汇编语言程 ...

    这两天抽空也要去看一下汇编了
    自信就会温和,温和就会坚定!
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    14

    主题

    33

    回帖

    204

    积分

    中级会员

    积分
    204
     楼主| 发表于 2024-3-21 12:32:36 来自手机 | 显示全部楼层
    神农鼎 发表于 2024-3-21 10:02
    你这还是不用 仿真器查你程序错在哪的问题 !
    用 仿真器 深入进去,看你程序错在哪的手段:
    单步运行,运行 ...

    仿真过,单步仿真几十个循环,都没有这个现象,怪就怪在这里,程序自己运行的时候就有

    点评

    运行到光标处,运行到断点  详情 回复 发表于 2024-3-21 12:37
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-6 17:53 , Processed in 0.079746 second(s), 74 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表