找回密码
 立即注册
查看: 321|回复: 6

请教个问题: 想用PWM控制屏幕亮度,始终达不到目的

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:172
  • 最近打卡:2025-05-01 10:06:01

44

主题

124

回帖

1437

积分

金牌会员

积分
1437
发表于 2024-12-9 21:45:25 | 显示全部楼层 |阅读模式

用PWM控制彩屏亮度,但始终没有用

环境

mcu: STC8H1K08-TSSOP20

目的

想用PWM输出引脚(P1.6)控制屏幕的BLK针脚,达到控制屏幕亮度的目的

遇到的问题

没想到配置之PWM输出这么复杂 :-(。照着手册,逐个bit位配置寄存器,还是没有达到控制屏幕亮度的目的。代码如下:

GPIO配置

MOV P1M1, #0BFH

MOV P1M0, #40H

PWM输出配置和中断:

PWM4PCONF:

; PWM4P output pin selection: P1.6

MOV DPTR, #PWMA_PS

MOVX A, @DPTR

ANL A, #NOT 0C0H

MOVX @DPTR, A

; turn off input capture/ compare output

MOV A, #00H

MOV DPTR, #PWMA_CCER2

MOVX @DPTR, A

; set output mode to PWMA

; enable preload func

MOV DPTR, #PWMA_CCMR4

MOVX A, @DPTR

ORL A, #78H

MOVX @DPTR, A

; enable preload buffer and edge align mode

; counter up

MOV DPTR, #PWMA_CR1

MOVX A, @DPTR

ORL A, #84H

ANL A, #NOT 70H

MOVX @DPTR, A
; enable CC4P output

MOV DPTR, #PWMA_CCER2

MOVX A, @DPTR

ORL A, #10H

MOVX @DPTR, A

; setup PWM duty; high byte first

MOV A, #0FFH

MOV DPTR, #PWMA_CCR4H

MOVX @DPTR, A

MOV A, #0FH

MOV DPTR, #PWMA_CCR4L

MOVX @DPTR, A

; auto-reload value; high byte first

MOV A, #0FFH

MOV DPTR, #PWMA_ARRH

MOVX @DPTR, A

MOV A, #0FFH

MOV DPTR, #PWMA_ARRL

MOVX @DPTR, A

; enable PWMA update interrupt

MOV DPTR, #PWMA_IER

MOVX A, @DPTR

ORL A, #11H

; set prescale

MOV A, #00H

MOV DPTR, #PWMA_PSCRH

MOVX @DPTR, A

MOV A, #00H

MOV DPTR, #PWMA_PSCRL

MOVX @DPTR, A

; re-init counter

MOV DPTR, #PWMA_EGR

MOVX A, @DPTR

ORL A, #01H

MOVX @DPTR, A

; enable PWM4P output; disable PWM4N output

MOV DPTR, #PWMA_ENO

MOVX A, @DPTR

ORL A, #40H

ANL A, #NOT 80H

MOVX @DPTR, A
; extra PWM4P control

MOV DPTR, #PWMA_IOAUX

MOVX A, @DPTR

ORL A, #40H

MOVX @DPTR, A

; enable OC output

MOV DPTR, #PWMA_BKR

MOVX A, @DPTR

ORL A, #80H

MOVX @DPTR, A

; enable counter

MOV DPTR, #PWMA_CR1

MOVX A, @DPTR

ORL A, #01H RET

PWMAISR:

PUSH ACC

PUSH DPH

PUSH DPL

MOV DPTR, #PWMA_SR1

MOVX A, @DPTR

ANL A, #NOT 11H

MOVX @DPTR, A

POP DPL

POP DPH

POP ACC

RETI

这能有什么错?逐bit位配置

回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:365
  • 最近打卡:2025-05-02 00:20:03

6

主题

319

回帖

2206

积分

金牌会员

积分
2206
发表于 2024-12-9 22:15:38 | 显示全部楼层

大神能不能翻译成C代码?

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-19 16:12:35
已绑定手机

60

主题

777

回帖

4001

积分

论坛元老

自定义头衔

积分
4001
发表于 2024-12-9 22:39:04 | 显示全部楼层
网*** 发表于 2024-12-9 22:15
大神能不能翻译成C代码?


给你翻译完了,你看看呗

根据代码,以下是各个寄存器被设置的具体值:

P1M1:设置为 0BFH(二进制:10111111,十进制:191)。
P1M0:设置为 40H(二进制:01000000,十进制:64)。
对于以下寄存器,代码通过位操作设置了特定的位:

PWMA_PS:通过 ANL A, #NOT 0C0H 清除了累加器A中的 0C0H(二进制:11000000)对应的位,然后将结果写回。
PWMA_CCER2:首先通过 MOV A, #00H 清零累加器A,然后写入,禁用或清除相关功能。
PWMA_CCMR4:通过 ORL A, #78H 设置累加器A中的 78H(二进制:01111000)对应的位,然后写回。
PWMA_CR1:通过 ORL A, #84H 和 ANL A, #NOT 70H 分别设置了 84H(二进制:10000100)和清除了 70H(二进制:01110000)对应的位,然后写回。
PWMA_CCER2:通过 ORL A, #10H 设置累加器A中的 10H(二进制:00010000)对应的位,然后写回。
PWMA_CCR4H 和 PWMA_CCR4L:分别设置为 0FFH(二进制:11111111,十进制:255)和 0FH(二进制:00001111,十进制:15)。
PWMA_ARRH 和 PWMA_ARRL:分别设置为 0FFH 和 0FFH。
PWMA_IER:通过 ORL A, #11H 设置累加器A中的 11H(二进制:00010001)对应的位,启用中断。
PWMA_PSCRH 和 PWMA_PSCRL:通过 MOV A, #00H 清零累加器A,然后写入,禁用预分频。
PWMA_EGR:通过 ORL A, #01H 设置累加器A中的 01H(二进制:00000001)对应的位,触发事件。
PWMA_ENO:通过 ORL A, #40H 和 ANL A, #NOT 80H 分别设置了 40H 和清除了 80H 对应的位。
PWMA_IOAUX:通过 ORL A, #40H 设置累加器A中的 40H 对应的位。
PWMA_BKR:通过 ORL A, #80H 设置累加器A中的 80H(二进制:10000000)对应的位,启用OC输出。
PWMA_SR1:通过 ANL A, #NOT 11H 清除累加器A中的 11H 对应的位,清除中断标志。
这些设置配置了PWM模块的工作模式、周期、频率、中断等参数,以及I/O端口的功能,以实现特定的PWM输出。

联系我请点击左下角的【回复】按钮,否则我收不到消息提
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:452
  • 最近打卡:2025-05-01 06:20:50
已绑定手机

13

主题

1257

回帖

2971

积分

金牌会员

积分
2971
发表于 2024-12-9 23:02:43 | 显示全部楼层
VC*** 发表于 2024-12-9 22:39
给你翻译完了,你看看呗

这是人工只能翻译的吧?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:123
  • 最近打卡:2025-04-19 16:12:35
已绑定手机

60

主题

777

回帖

4001

积分

论坛元老

自定义头衔

积分
4001
发表于 2024-12-9 23:10:21 | 显示全部楼层
21cns*** 发表于 2024-12-9 23:02
这是人工只能翻译的吧?

当然了,这样才要用引用框算起来
联系我请点击左下角的【回复】按钮,否则我收不到消息提
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:172
  • 最近打卡:2025-05-01 10:06:01

44

主题

124

回帖

1437

积分

金牌会员

积分
1437
发表于 2024-12-9 23:10:47 | 显示全部楼层

终于搞清楚了。 初始化部分,使能计数器对应的bit位之后,没有写回寄存器PWMA_CR1。

但配置PWM输出过程也太麻烦了,是不是有些配置对于PWM输出是没有用的?

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2024-12-10 22:12:51 | 显示全部楼层
请参考厂家代码,初始化一路PWM就是十几行C代码。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 02:46 , Processed in 0.115261 second(s), 87 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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