Tuier 发表于 2024-2-27 22:10:52

芯片焊接牛B{:4_250:}

ly1350 发表于 2024-2-27 22:30:02

Tuier 发表于 2024-2-27 22:10
芯片焊接牛B
用 SKDIP28 封装的省事!或者买转接板。我那是没有条件,才这样焊的

zhudean11 发表于 2024-2-28 05:48:28

{:4_250:}简单实用

ly1350 发表于 2024-2-28 08:08:01

#include<STC8H.H>
#include<intrins.h>

#define   uchar         unsigned char
#define   uint       unsigned int

uchar dis={0,0,':',0,0};
uchar count=0,s=0,m=0,h=0;



void Led_Init()
{
           P2M0 |= 0x7f; P2M1 &= ~0x7f;       //设置P2.0-P2.6为推挽输出       
    P3M0 = (P3M0 & ~0x78) | 0x80; P3M1 &= ~0xf8; //设置P3.3-P3.6为高阻输入;p37为推挽输出

                                     
        P33=1;                                                 //DG1
        P34=1;                                                          //DG2
        P35=1;                                                          //DG3
        P36=1;                                                          //DG4
   



        P37=0;                                                          //Pd

        P20=0;                                                          //段A
        P21=0;                                                          //段B
        P22=0;                                                          //段C
        P23=0;                                                          //段D
        P24=0;                                                          //段E
        P25=0;                                                          //段F
        P26=0;                                                          //段G
}
void Delay1ms(void)        //@24.000MHz
{
        unsigned char data i, j;

        _nop_();
        i = 32;
        j = 40;
        do
        {
                while (--j);
        } while (--i);
}


void Delay10ms(void)        //@24.000MHz
{
        unsigned char data i, j;

        i = 234;
        j = 115;
        do
        {
                while (--j);
        } while (--i);
}


void Display(unsigned char val)       
{
        unsigned char i=0;
        for(i=0;i<5;i++)
        {
                switch(val)
                {
                        case 0 :
                                        P20=1;                                                          
                                        P21=1;                                                          
                                        P22=1;                                                       
                                        P23=1;                                                       
                                        P24=1;                                                       
                                        P25=1;                                                       
                      break;
                        case 1 :
                                  P21=1;                                                          
                            P22=1;
                                        break;
                        case 2 :
                                        P20=1;                                                          //段A
                                        P21=1;                                                          //段B
                                        P22=0;                                                          //段C
                                        P23=1;                                                          //段D
                                        P24=1;                                                          //段E
                                        P25=0;                                                          //段F
                                        P26=1;                                                          //段G
                                        break;
                        case 3 :
                                        P20=1;                                                          //段A
                                        P21=1;                                                          //段B
                                        P22=1;                                                          //段C
                                        P23=1;                                                          //段D
                                        P24=0;                                                          //段E
                                        P25=0;                                                          //段F
                                        P26=1;                                                          //段G
                                        break;
                        case4 :
                                        P20=0;                                                          //段A
                                        P21=1;                                                          //段B
                                        P22=1;                                                          //段C
                                        P23=0;                                                          //段D
                                        P24=0;                                                          //段E
                                        P25=1;                                                          //段F
                                        P26=1;                                                          //段G
                                        break;
                        case5 :
                                        P20=1;                                                          //段A
                                        P21=0;                                                          //段B
                                        P22=1;                                                          //段C
                                        P23=1;                                                          //段D
                                        P24=0;                                                          //段E
                                        P25=1;                                                          //段F
                                        P26=1;                                                          //段G
                                        break;
                        case6 :
                                        P20=1;                                                          //段A
                                        P21=0;                                                          //段B
                                        P22=1;                                                          //段C
                                        P23=1;                                                          //段D
                                        P24=1;                                                          //段E
                                        P25=1;                                                          //段F
                                        P26=1;                                                          //段G
                                        break;
                        case7 :               
                                        P20=1;                                                          //段A
                                        P21=1;                                                          //段B
                                        P22=1;                                                          //段C
                                        P23=0;                                                          //段D
                                        P24=0;                                                          //段E
                                        P25=0;                                                          //段F
                                        P26=0;                                                          //段G
                                        break;
                        case8 :
                                        P20=1;                                                          //段A
                                        P21=1;                                                          //段B
                                        P22=1;                                                          //段C
                                        P23=1;                                                          //段D
                                        P24=1;                                                          //段E
                                        P25=1;                                                          //段F
                                        P26=1;                                                          //段G
                                        break;
                        case 9 :
                                        P20=1;                                                          //段A
                                        P21=1;                                                          //段B
                                        P22=1;                                                          //段C
                                        P23=1;                                                          //段D
                                        P24=0;                                                          //段E
                                        P25=1;                                                          //段F
                                        P26=1;                                                          //段G
                                        break;
                        case 'a' :
                                        P20=1;                                                          //段A
                                        P21=1;                                                          //段B
                                        P22=1;                                                          //段C
                                        P23=0;                                                          //段D
                                        P24=1;                                                          //段E
                                        P25=1;                                                          //段F
                                        P26=1;                                                          //段G
                                        break;
                        case 'b' :
                                        P20=0;                                                          //段A
                                        P21=0;                                                          //段B
                                        P22=1;                                                          //段C
                                        P23=1;                                                          //段D
                                        P24=1;                                                          //段E
                                        P25=1;                                                          //段F
                                        P26=1;                                                          //段G
                                        break;
                        case 'c' :
                                        P20=1;                                                          //段A
                                        P21=0;                                                          //段B
                                        P22=0;                                                          //段C
                                        P23=1;                                                          //段D
                                        P24=1;                                                          //段E
                                        P25=1;                                                          //段F
                                        P26=0;                                                          //段G               
                                        break;
                        case 'd' :
                                        P20=0;                                                          //段A
                                        P21=1;                                                          //段B
                                        P22=1;                                                          //段C
                                        P23=1;                                                          //段D
                                        P24=1;                                                          //段E
                                        P25=0;                                                          //段F
                                        P26=1;                                                          //段G
                                        break;
                        case 'e' :
                                        P20=1;                                                          //段A
                                        P21=0;                                                          //段B
                                        P22=0;                                                          //段C
                                        P23=1;                                                          //段D
                                        P24=1;                                                          //段E
                                        P25=1;                                                          //段F
                                        P26=1;                                                          //段G
                                        break;
                        case 'f' :
                                        P20=1;                                                          //段A
                                        P21=0;                                                          //段B
                                        P22=0;                                                          //段C
                                        P23=0;                                                          //段D
                                        P24=1;                                                          //段E
                                        P25=1;                                                          //段F
                                        P26=1;                                                          //段G
                                        break;
                       
                  case ':' : P37=1;break;
                        default : P26=1;                                                          //段G
                }
                switch(i)
                {
                  case 0 :   P33=0;break;
                        case 1 :   P34=0;break;
                        case 2 :   P34=0;break;
                        case 3 :   P35=0;break;
                        case 4:               P36=0;break;
                }
               Delay1ms();
               Led_Init();
        }
}

void Timer1_Init(void)                //1毫秒@24.000MHz
{
        AUXR |= 0x40;                        //定时器时钟1T模式
        TMOD &= 0x0F;                        //设置定时器模式
        TL1 = 0x40;                                //设置定时初始值
        TH1 = 0xA2;                                //设置定时初始值
        TF1 = 0;                                //清除TF1标志
        TR1 = 1;                                //定时器1开始计时
        ET1=1;
        EA=1;
}





void main()
{
        uchar i=0,f=0;
        P3M0 &= ~0x04; P3M1 &= ~0x04;         //设置P32为标准io口
        EX0=0;
        P32=1;
        Timer1_Init();

        while(1)
        {


          if(P32==0)
          {       
                Delay10ms();
                if(P32==0)
                {
                       f++;
                        while(!P32);
                  
                }
          }
          if(f>=3) f=0;




          if(count>=100)
          {
                  count=0        ;
                s+=1;
          }
          if(s>=60)
          {
                   s=0;
                m++;
          }
          if(m>=60)
          {
                m=0;
                h++;
          }
          if(h>=24)h=0 ;
          switch(f)
          {

                case 0 :
                       dis=s/10;
                          dis=s%10;
                          dis=count/10;
                          dis=count%10;
                        break;
                  case 1 :
                       dis=h/10;
                          dis=h%10;
                          dis=m/10;
                          dis=m%10;
                        break;
                case 2 :
                       dis=m/10;
                          dis=m%10;
                          dis=s/10;
                          dis=s%10;
                        break;
                default : break;
          }
        }
}

void Timer1_Isr() interrupt 3
{
        Display(dis);
        count++;
}

ly1350 发表于 2024-2-28 08:10:46

以上是完整的代码。但是,一按按键就停止计数了。要去掉第255行的                Delay10ms();   
就运行正常,就是视频的效果。

ly1350 发表于 2024-2-28 09:38:53

目前我自己的解决方法是:
设置一个变量temp,记录两次按键端口检测为低之间的时间,如果大于20ms,就认定不是抖动。经测试,去抖问题解决了。
但是,我的疑问还在,为什么用软件延时,程序就死机呢?还是没搞明白

ly1350 发表于 2024-2-28 09:39:32

程序修改部分:
void main()
{
        uchar i=0,f=0,temp=0;
        P3M0 &= ~0x04; P3M1 &= ~0x04;         //设置P32为标准io口
        P32=1;
        Timer1_Init();

        while(1)
        {


          if((P32==0)&&(temp==0))                 
                temp=count;
                else if((P32==0)&&(count-temp)>20)
                {
                       f++;
                        while(!P32);
                  
                }

ly1350 发表于 2024-2-28 09:43:31

本帖最后由 ly1350 于 2024-2-28 09:45 编辑

测试效果:貌似没有问题了。。。{:biggrin:}
下一步准备完善时间的设置问题。

ly1350 发表于 2024-2-28 09:44:08

70

dnajx 发表于 2024-3-9 07:49:07

学习中,我们一起加油!{:smile:}
页: 1 2 3 4 5 6 7 8 [9] 10 11 12 13 14
查看完整版本: 最简陋的8H8K64U学习板!只用5个外围元件!