神农鼎
发表于 2024-2-29 09:06:27
ly1350 发表于 2024-2-29 08:56
好的,马上改正。谢谢,指出错误!
这个特殊应用,相关的 I/O 用开漏模式就行了
ly1350
发表于 2024-3-6 17:24:30
终于有点时间继续学习了。重新写了电子钟的代码。用开关内部上拉电阻来点亮数码管。
ly1350
发表于 2024-3-6 17:28:24
用内部上拉电阻控制数码管:
87
ly1350
发表于 2024-3-6 17:29:20
相机拍出来有点闪烁。实际效果,眼睛是看不出来的
ly1350
发表于 2024-3-21 10:53:42
加焊5个led和一个1k限流电阻,准备学习PWM。。。
ly1350
发表于 2024-3-21 17:24:11
第一个pwm实验。控制led的亮度。
ly1350
发表于 2024-3-21 17:25:14
102
ly1350
发表于 2024-3-21 17:26:18
#include "stc8h.h"
#include "intrins.h"
#include "display.h"
#include "key.h"
#defineKeyP32 //按键定义在P32
#define PWM_T 1000 //设置周期值
typedef unsigned char u8;
typedef unsigned intu16;
typedef unsigned long u32;
void Update();
void Timer0_Init(void);
u16 duty=950;
void main()
{
P_SW2|=0x80; // 使能访问扩展寄存器
P1M0 |= 0x03; P1M1 &= ~0x03; //配置P10、p11为推挽输出模式
PWMA_PS|=0x00; //设置PWMA通道1p为p10,1n为p11
PWMA_CCER1|=0x00; // 关闭通道1
PWMA_CCMR1|=0x68; //配置通道1的输出模式;
PWMA_CCER1|=0x0f; // 打开通道1,设置1p、1n
PWMA_ARRH=(u8)(PWM_T>>8); // 写自动重装寄存器高8位
PWMA_ARRL=(u8)(PWM_T); // 写自动重装寄存器低8位
PWMA_ENO|= 0x03; //打开1p、1n输出
PWMA_BKR|= 0x80; // 打开主输出
PWMA_CR1|= 0x01; // 开始计数
P3M0 &= ~0x04; P3M1 &= ~0x04; //p32设为标准io
P3PU |= 0x04; //p32打开上拉电阻
Timer0_Init() ;
EA=1;
P32=1;
while(1)
{
Update();
w1=duty/100;
w2=duty/10%10;
w3=keymod;
w4=P32;
display();
keyscan();
};
}
void keypro()
{
if(keymod==1)
{
duty+=10;
if(duty>1000)duty=1000;
keymod=0;
}
if(keymod==2)
{
duty-=10;
if(duty<=700)duty=700;
keymod=0;
}
}
void Update()
{
PWMA_CCR1H=(u8)(duty>>8);
PWMA_CCR1L=(u8)(duty);
}
void Timer0_Isr(void) interrupt 1
{
dc++;
keycount++;
if(keycount>60000)keycount=0;
}
void Timer0_Init(void) //1毫秒@11.0592MHz
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0xCD; //设置定时初始值
TH0 = 0xD4; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; //使能定时器0中断
}
ly1350
发表于 2024-3-21 17:29:46
限流电阻只找到了1k的。用得小了,亮度调节的效果不明显。80%左右就基本全亮了
xxxevery
发表于 2024-3-22 15:19:09
不错,花小钱办大事