神农鼎 发表于 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

不错,花小钱办大事
页: 1 [2] 3 4 5 6 7 8
查看完整版本: 全部直插,洞洞板飞线,5个外围元件的8H8K64U实验板(原理图,程序代码))