数码之家

 找回密码
 立即注册
搜索
查看: 7456|回复: 42

初学C,数码管编程问题求教

[复制链接]
发表于 2021-9-9 11:19:30 | 显示全部楼层 |阅读模式
程序勉强可以工作了,总感觉这个程序很low,出现的问题在注释后已经标注,请大家指点一下
直接复制源码后面的注释是乱码,后面截图再发一遍
#include<intrins.h>  //°üº¬"intrins.h"ºó,²»ÓÃÁíÍâÔÙ°üº¬"REG51.H"
#include<stc15w.h>

sbit DA=P1^4;                        //ÊýÂë¹ÜÒý½Åa,½Óµ¥Æ¬»ú3½Å£¬P1.4
sbit DB=P1^3;                        //ÊýÂë¹ÜÒý½Åb,½Óµ¥Æ¬»ú2½Å£¬P1.3
sbit DC=P3^1;                        //ÊýÂë¹ÜÒý½Åc,½Óµ¥Æ¬»ú10½Å£¬P3.1
sbit DD=P3^3;                        //ÊýÂë¹ÜÒý½Åd,½Óµ¥Æ¬»ú12½Å£¬P3.3
sbit DE=P3^2;                        //ÊýÂë¹ÜÒý½Åe,½Óµ¥Æ¬»ú11½Å£¬P3.2
sbit DF=P1^5;                        //ÊýÂë¹ÜÒý½Åf,½Óµ¥Æ¬»ú4½Å£¬P1.5
sbit DG=P5^4;                        //ÊýÂë¹ÜÒý½Åg,½Óµ¥Æ¬»ú5½Å£¬P5.4
sbit DP=P2^3;                        //ÊýÂë¹ÜÒý½Ådp,δ½Ó

sbit B1=P5^5;                        //µÚÒ»¸öÊýÂë¹Ü¹«¹²½Å,½Óµ¥Æ¬»ú7½Å£¬P5.5                        
sbit B2=P1^2;                        //µÚ¶þ¸öÊýÂë¹Ü¹«¹²½Å,½Óµ¥Æ¬»ú1½Å£¬P1.2
sbit B3=P3^6;                        //µÚÈý¸öÊýÂë¹Ü¹«¹²½Å,½Óµ¥Æ¬»ú13½Å£¬P3.6
sbit B4=P3^0;                        //µÚËĸöÊýÂë¹Ü¹«¹²½Å,½Óµ¥Æ¬»ú9½Å£¬P3.0

unsigned char Data[4]={0,0,0,0};     //µÚ1-4¸öÊýÂë¹ÜÒªÏÔʾµÄÊýÖµ
unsigned char display_time;          //¶¨Òå±äÁ¿ÓÃÓÚÏÔʾ´ÎÊý
unsigned char start;                  //¹¤×÷Èí¿ª¹Ø£¬µ±¼ì²âµ½ADCÖµ²»ÔÚÖ¸¶¨·¶Î§Ê±ÖÃ1£¬ÔÊÐíµç»ú¶¯×÷
unsigned int adc;                    //ADת»»¼ÆËã

//unsigned int temp1,temp2;
unsigned char max,min;   
unsigned char  repeat_time;
sbit rotatory  = P1^0;                      //Âö³å,STC15W408ASµÄ15½Å
sbit direction = P3^7;                      //·½Ïò,STC15W408ASµÄ14½Å

void Delay10us()                     //@12.000MHz
{
        unsigned char i;
        _nop_();
        _nop_();//ÑÓʱһ¸ö»úÆ÷ÖÜÆÚ 12M¾§ÕñÊÇ1us ÕâÑù×ö¿ÉÒԵõ½¸ü¾«È·µÄÑÓʱ
        i = 24;
        while (--i);
}

void delay_n_10us(unsigned int n)//ÑÓʱn¸ö10usµÄº¯Êý
{
        while(n)         
        {
            Delay10us();
            n=n-1;//ÿѭ»·Ò»´În¼õС1
        }
}

void Delay50us()                //@12.000MHz //ADת»»µÈ´ýʱ¼ä£¬ÉÙÓÚ¸öʱ¼ä£¬ADת»»½á¹û¿ÉÄܲ»×¼È·ÉõÖÁ²»ÄÜÍê³É
{
        unsigned char i, j;
        i = 1;
        j = 146;
        do
        {
                while (--j);
        } while (--i);
}

void display_SEG(unsigned char x)//¿ØÖÆÊýÂë¹ÜÏÔʾÄÚÈݵĺ¯Êý
{

             /*
        if(x==0){P1=0x38;P3=0x0e;P5=0x00;} //ÏÔʾ"0"        //ÕâÖÖ¸³Öµ·½·¨ÊýÂë¹ÜÏÔʾʱÉÁ˸ºÜÀ÷º¦
        if(x==1){P1=0x08;P3=0x02;P5=0x00;} //ÏÔʾ"1"        
        if(x==2){P1=0x30;P3=0x0c;P5=0x10;} //ÏÔʾ"2"        
        if(x==3){P1=0x18;P3=0x0a;P5=0x10;} //ÏÔʾ"3"
        if(x==4){P1=0x28;P3=0x02;P5=0x10;} //ÏÔʾ"4"        
        if(x==5){P1=0x30;P3=0x0a;P5=0x10;} //ÏÔʾ"5"        
        if(x==6){P1=0x30;P3=0x0e;P5=0x10;} //ÏÔʾ"6"        
        if(x==7){P1=0x30;P3=0x02;P5=0x00;} //ÏÔʾ"7"        
        if(x==8){P1=0x38;P3=0x0e;P5=0x10;} //ÏÔʾ"8"        
        if(x==9){P1=0x38;P3=0x0a;P5=0x10;} //ÏÔʾ"9"
             */   

             //ÅжÏxµÄÖµÀ´¾ö¶¨ÏÔʾʲô
        if(x==0){DA=1;DB=1;DC=1;DD=1;DE=1;DF=1;DG=0;DP=0;} //ÏÔʾ"0"        
        if(x==1){DA=0;DB=1;DC=1;DD=0;DE=0;DF=0;DG=0;DP=0;} //ÏÔʾ"1"        
        if(x==2){DA=1;DB=1;DC=0;DD=1;DE=1;DF=0;DG=1;DP=0;} //ÏÔʾ"2"        
        if(x==3){DA=1;DB=1;DC=1;DD=1;DE=0;DF=0;DG=1;DP=0;} //ÏÔʾ"3"
        if(x==4){DA=0;DB=1;DC=1;DD=0;DE=0;DF=1;DG=1;DP=0;} //ÏÔʾ"4"        
        if(x==5){DA=1;DB=0;DC=1;DD=1;DE=0;DF=1;DG=1;DP=0;} //ÏÔʾ"5"        
        if(x==6){DA=1;DB=0;DC=1;DD=1;DE=1;DF=1;DG=1;DP=0;} //ÏÔʾ"6"        
        if(x==7){DA=1;DB=1;DC=1;DD=0;DE=0;DF=0;DG=0;DP=0;} //ÏÔʾ"7"        
        if(x==8){DA=1;DB=1;DC=1;DD=1;DE=1;DF=1;DG=1;DP=0;} //ÏÔʾ"8"        
        if(x==9){DA=1;DB=1;DC=1;DD=1;DE=0;DF=1;DG=1;DP=0;} //ÏÔʾ"9"
                                
        if(x==10){DA=1;DB=1;DC=1;DD=1;DE=1;DF=1;DG=0;DP=1;} //ÏÔʾ"0"´øÐ¡Êýµã        
        if(x==11){DA=0;DB=1;DC=1;DD=0;DE=0;DF=0;DG=0;DP=1;} //ÏÔʾ"1"´øÐ¡Êýµã        
        if(x==12){DA=1;DB=1;DC=0;DD=1;DE=1;DF=0;DG=1;DP=1;} //ÏÔʾ"2"´øÐ¡Êýµã        
        if(x==13){DA=1;DB=1;DC=1;DD=1;DE=0;DF=0;DG=1;DP=1;} //ÏÔʾ"3"´øÐ¡Êýµã
        if(x==14){DA=0;DB=1;DC=1;DD=0;DE=0;DF=1;DG=1;DP=1;} //ÏÔʾ"4"´øÐ¡Êýµã        
        if(x==15){DA=1;DB=0;DC=1;DD=1;DE=0;DF=1;DG=1;DP=1;} //ÏÔʾ"5"´øÐ¡Êýµã        
        if(x==16){DA=1;DB=0;DC=1;DD=1;DE=1;DF=1;DG=1;DP=1;} //ÏÔʾ"6"´øÐ¡Êýµã
        if(x==17){DA=1;DB=1;DC=1;DD=0;DE=0;DF=0;DG=0;DP=1;} //ÏÔʾ"7"´øÐ¡Êýµã        
        if(x==18){DA=1;DB=1;DC=1;DD=1;DE=1;DF=1;DG=1;DP=1;} //ÏÔʾ"8"´øÐ¡Êýµã
        if(x==19){DA=1;DB=1;DC=1;DD=1;DE=0;DF=1;DG=1;DP=1;} //ÏÔʾ"9"´øÐ¡Êýµã
}
void display_ADC(unsigned char i,unsigned char x)//ÏÔʾ³ÌÐòÄ£¿é»¯£¬°ÑxÏÔʾÔÚµÚ¸öÊýÂë¹ÜÉÏ                                                                                                                 
    {
                                B1=1;B2=1;B3=1;B4=1; DA=0;DB=0;DC=0;DD=0;DE=0;DF=0;DG=0;DP=0;                      //¹Ø±ÕËùÓÐÊýÂë¹ÜÏÔʾ
                                display_SEG(x);                        //·¢ËÍÊý¾Ý
                                                        if(i==0 && x>0 )//µÚ0´ÎÏÔʾµÚÒ»¸öÊýÂë¹Ü
                    {
                        B1=0;                                      //¿ªµÚ1λ¹«¹²¶ËÒÔÏÔʾµÚ1λÊý
                                                  }               
              if(i==1)//µÚ1´ÎÏÔʾµÚ¶þ¸öÊýÂë¹Ü
                    {                       
                        B2=0;                                      //¿ªµÚ2λ¹«¹²¶ËÒÔÏÔʾµÚ2λÊý
                    }               
              if(i==2)//µÚ2´ÎÏÔʾµÚÈý¸öÊýÂë¹Ü
                    {
                                                                                          B3=0;                                      //¿ªµÚ3λ¹«¹²¶ËÒÔÏÔʾµÚ3λÊý
                    }               
              if(i==3)//µÚ3´ÎÏÔʾµÚËĸöÊýÂë¹Ü
                    {
                        B4=0;                                      //¿ªµÚ4λ¹«¹²¶ËÒÔÏÔʾµÚ4λÊý
                    }                                                  
                }
void output_pulse(repeat_time)
                {
                        if (repeat_time==3) //ÿ3¸ö¼ÆÊýµ¥Î»Êä³öµçƽ±ä»¯Ò»´Î
                                 {
                                         if( rotatory==0)//Çл»¸ßµÍµçƽÒÔÊä³öÂö³åÈõç»úת¶¯
                                                   {
                                                           rotatory=1; //Êä³ö¸ßµçƽ
                                                         }      
                                         else
                                                         {        
                                                                 rotatory=0;        //Êä³öµÍµçƽ                                                        
                                                         }
                                         repeat_time=0;//¼ÆÊý¹é0£»
                                 }                                         
                }
main()
{
    //P1M0=0x38;                //ÐèÒª¸ßµçƽ´óµçÁ÷µÄÒý½Å 1.3¡¢1.4¡¢1.5£¬ÌîÈëÊýÖµ0011 1000
    //P3M0=0x0e;                //ÐèÒª¸ßµçƽ´óµçÁ÷µÄÒý½Å 3.1¡¢3.2¡¢3.3£¬ÌîÈëÊýÖµ0000 1110  
          //P5M0=0x10;                //ÐèÒª¸ßµçƽ´óµçÁ÷µÄÒý½Å 5.4£¬ÌîÈëÊýÖµ0001 0000                 
         
          display_time=0;
          rotatory=0;
          direction=0;
          max=180;
          min=180;
    while(1)
    {           
       delay_n_10us(20);
       ADC_CONTR=0x88+1;    //¿ªÊ¼P1.1Òý½Åת»»£¬P1.1Òý½ÅÍâ½Óµç³Ø
       Delay50us();         //µÈ´ýADת»»Íê³É
                   adc=ADC_RES;         //¶Áȡת»»½á¹û        adc2±£´æP1.7Òý½Åת»»½á¹û                                    
                   adc=adc*1;           //У׼²âÁ¿½á¹û                        
                         if(adc>max || adc<min )
                         {
                                 start=1;
                         }                        
                         if(start==1)         //start=1ÔÊÐí¹¤×÷
                         {
                           repeat_time++;
                                 if(adc>max)         //¸ß,Ͻµ
                             {
                                     direction=0;       //µç»úÕýת
                                           //output_pulse(repeat_time);//´úÌæÏÂÃæÕâ¶Î²úÉúÂö³å£¬Ê¹Óúóµç»ú²»¶¯
                                                  
                                                 if (repeat_time==3) //ÿ3¸ö¼ÆÊýµ¥Î»Êä³öµçƽ±ä»¯Ò»´Î
                                           {
                                                    if( rotatory==0)//Çл»¸ßµÍµçƽÒÔÊä³öÂö³åÈõç»úת¶¯
                                                    {
                                                           rotatory=1; //Êä³ö¸ßµçƽ
                                                          }      
                                                          else
                                                          {        
                                                                 rotatory=0;        //Êä³öµÍµçƽ                                                        
                                                          }
                                                          repeat_time=0;//¼ÆÊý¹é0£»
                                           }                                                
                             }
                                 if(adc<min)         //µÍ,ÉÏÉý
                             {         
                               direction=1;        //µç»ú·´×ª
                                                 //output_pulse(repeat_time);
                                           if (repeat_time==3)//ÿ3¸ö¼ÆÊýµ¥Î»Êä³öµçƽ±ä»¯Ò»´Î
                                           {
                                                    if( rotatory==0)//Çл»¸ßµÍµçƽÒÔÊä³öÂö³åÈõç»úת¶¯
                                                    {
                                                            rotatory=1;//Êä³ö¸ßµçƽ
                                                          }      
                                                          else
                                                          {        
                                                                  rotatory=0;//Êä³öµÍµçƽ        
                                                          }
                                                          repeat_time=0;//¼ÆÊý¹é0£»
                                           }
                             }
         if(adc>=min && adc<=max)         //µ½´ïÖ¸¶¨·¶Î§µç»úÍ£Ö¹
                             {
                                                        repeat_time=0;                        //¼ÆÊýʼÖÕΪ0£¬µçƽ²»·¢Éú±ä»¯£¬µ¼Öµç»úͣת           
                             }
                   }
              //8λADC£¬µÃµ½µÄÖµ×î´óΪ255
                                adc=adc;  //ת»»¼ÆËãʵ¼Êµçѹ                              
                                Data[0]=adc/1000;       //ǧλÊý¾Ý,adc³ýÒÔ1000£¬¾ÍµÃµ½ÁËǧλÊý¾ÝÔËËãÖнá¹ûֻȡÕûÊý²¿·Ö)
              Data[1]=adc%1000/100;                //°ÙλÊý¾Ý,adc³ýÒÔ1000È¡ÓàÊýºóÔÙ³ýÒÔ100£¬¾ÍµÃµ½Á˵Ú2λÊý
                                                        Data[2]=adc%100/10;     //ʮλÊý¾Ý,adcÕû³ý100Ö®ºóµÄÓàÊýÔÙ³ýÒÔ10£¬¾ÍµÃµ½Á˵Ú3λÊý
              Data[3]=Data3;          //¼Ó10£¬displayº¯ÊýÏÔʾµÄÊý×Ö»á´øÐ¡Êýµã
              Data[3]=adc%10/1;       //¸öλÊý¾Ý
                        
                                display_time=display_time+1;        //¼ÆÊý£¬Ã¿µ½Ö¸¶¨Êý×ÖÊä³ö½ÅµçÆ¿Çл»Ò»´ÎÒÔ²úÉúÂö³å£¨Ð§ÂʵÍÏ£©                                                
              if(display_time>3)
                  {
                        display_time=0;  //0¡¢1¡¢2¡¢3 ËĸöÑ­»·
                  }                                                         
                                                        //ÏÂÃæÕâ¶ÎÈõÚÒ»µ½µÚËĸöÊýÂë¹ÜÏÔʾÊý×Ö£¬¿É×ö³É×Ó³ÌÐò

                                                        if(display_time==0 && Data[0]>0 )//µÚ0´ÎÏÔʾµÚÒ»¸öÊýÂë¹Ü
                  {
                        B1=1;B2=1;B3=1;B4=1; DA=0;DB=0;DC=0;DD=0;DE=0;DF=0;DG=0;DP=0;  //¹Ø±ÕËùÓÐÊýÂë¹ÜÏÔʾ
                              display_SEG(Data[0]);                        //·¢Ë͵Ú1λÊý¾Ý
                        B1=0;                                      //¿ªµÚ1λ¹«¹²¶ËÒÔÏÔʾµÚ1λÊý
                                                }               
              if(display_time==1)//µÚ1´ÎÏÔʾµÚ¶þ¸öÊýÂë¹Ü
                  {
                        B1=1;B2=1;B3=1;B4=1; DA=0;DB=0;DC=0;DD=0;DE=0;DF=0;DG=0;DP=0;                      //¹Ø±ÕËùÓÐÊýÂë¹ÜÏÔʾ
                                                                                    display_SEG(Data[1]);                        //·¢Ë͵Ú2λÊý¾Ý
                        B2=0;                                      //¿ªµÚ2λ¹«¹²¶ËÒÔÏÔʾµÚ2λÊý
                  }               
              if(display_time==2)//µÚ2´ÎÏÔʾµÚÈý¸öÊýÂë¹Ü
                  {
                        B1=1;B2=1;B3=1;B4=1; DA=0;DB=0;DC=0;DD=0;DE=0;DF=0;DG=0;DP=0;                      //¹Ø±ÕËùÓÐÊýÂë¹ÜÏÔʾ
                                                                                    display_SEG(Data[2]);                        //·¢Ë͵Ú3λÊý¾Ý
                        B3=0;                                      //¿ªµÚ3λ¹«¹²¶ËÒÔÏÔʾµÚ3λÊý
                  }               
              if(display_time==3)//µÚ3´ÎÏÔʾµÚËĸöÊýÂë¹Ü
                  {
                        B1=1;B2=1;B3=1;B4=1; DA=0;DB=0;DC=0;DD=0;DE=0;DF=0;DG=0;DP=0;                      //¹Ø±ÕËùÓÐÊýÂë¹ÜÏÔʾ
                                                                                    display_SEG(Data[3]);                        //·¢Ë͵Ú4λÊý¾Ý
                        B4=0;                                      //¿ªµÚ4λ¹«¹²¶ËÒÔÏÔʾµÚ4λÊý
                  }                                                               
                                                        //display_ADC(display_time,Data[display_time]);        //°ÑData[display_time]µÄÊýÖµÏÔʾÔÚµÚdisplay_time¸öÊýÂë¹ÜÖÐ(ʧ°Ü£¬Êµ¼ÊÖ»ÏÔʾ×îºóһλ)
    }
}









本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
发表于 2021-9-9 11:32:48 来自手机浏览器 | 显示全部楼层
用一组完整引脚做段不好么,搞这么复杂
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-9 11:43:26 | 显示全部楼层
ploestar 发表于 2021-9-9 11:32
用一组完整引脚做段不好么,搞这么复杂

不是很方便呀,画板时那个引脚顺手用哪个,最后就成了这样

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复 支持 反对

使用道具 举报

发表于 2021-9-9 12:16:37 来自手机浏览器 | 显示全部楼层
iritwq 发表于 2021-9-9 11:43
不是很方便呀,画板时那个引脚顺手用哪个,最后就成了这样

这程序确实有点low,不过能运行,不需要时间限制也可以。别人写的不一定比你写高级。等会儿给你发一个简单点的。
回复 支持 反对

使用道具 举报

发表于 2021-9-9 12:28:26 | 显示全部楼层
iritwq 发表于 2021-9-9 11:43
不是很方便呀,画板时那个引脚顺手用哪个,最后就成了这样

画板的时候,也是先画原理图啊,也是直接用一组完整的。
然后布线的时候,就随便布通就行了。
回复 支持 反对

使用道具 举报

发表于 2021-9-9 12:58:53 | 显示全部楼层
编多了就不LOW啦
回复 支持 反对

使用道具 举报

发表于 2021-9-9 13:53:56 | 显示全部楼层
数码管显示怎么不建数组:doubt:
回复 支持 反对

使用道具 举报

发表于 2021-9-9 15:35:18 | 显示全部楼层
本帖最后由 慕名而来 于 2021-9-9 15:55 编辑

建议,使用STC单片机做板子的时候一定要设计一个4脚插针,连接V+、RXD、TXD、GND引脚,这样通过杜邦线将你的板子连接带有自动断电功能的STC串口下载线或USB下载线就可以直接在自己的板子上调试程序了,不但供电方便调试也方便只要勾选了STC-ISP软件的右下角的选项,每次修改程序并编译成功就自动下载一次代码很方便的,这也是我一直在玩STC单片机的原因,另外P3.0(RXD)、P3.1(TXD)尽量不做其他用途。
修改了一个函数仅供参考:

  1. void display_SEG(unsigned char x,unsigned char  e)//小数点是否显示由给定参数e=0、1来决定
  2. {
  3. DP=e;
  4.         if(x==0){DA=1;DB=1;DC=1;DD=1;DE=1;DF=1;DG=0;}  
  5.         if(x==1){DA=0;DB=1;DC=1;DD=0;DE=0;DF=0;DG=0;}      
  6.         if(x==2){DA=1;DB=1;DC=0;DD=1;DE=1;DF=0;DG=1;}      
  7.         if(x==3){DA=1;DB=1;DC=1;DD=1;DE=0;DF=0;DG=1;}
  8.         if(x==4){DA=0;DB=1;DC=1;DD=0;DE=0;DF=1;DG=1;}      
  9.         if(x==5){DA=1;DB=0;DC=1;DD=1;DE=0;DF=1;DG=1;}         
  10.         if(x==6){DA=1;DB=0;DC=1;DD=1;DE=1;DF=1;DG=1;}      
  11.         if(x==7){DA=1;DB=1;DC=1;DD=0;DE=0;DF=0;DG=0;}        
  12.         if(x==8){DA=1;DB=1;DC=1;DD=1;DE=1;DF=1;DG=1;}         
  13.         if(x==9){DA=1;DB=1;DC=1;DD=1;DE=0;DF=1;DG=1;}
  14. }
复制代码



回复 支持 反对

使用道具 举报

发表于 2021-9-9 15:40:30 | 显示全部楼层
所以现在显示正常了吗?
回复 支持 反对

使用道具 举报

发表于 2021-9-9 15:50:47 | 显示全部楼层
在这里使用#include<intrins.h> 不是为了包含REG51.H,而是为了在延时函数可以使用_nop_();函数,使用STC单片机只要声明了STC***.h就不用考虑那些51的头文件了,而且在使用STC官网的例程的时候也可以直接删掉程序中的那些sfr ***的宏定义了。



https://www.mydigit.cn/thread-275375-1-1.html

回复 支持 反对

使用道具 举报

发表于 2021-9-9 16:33:33 | 显示全部楼层
我居然看完了
没流程图看起来就是费劲
然后看到原作,没乱码看着还舒服点
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-9 16:57:58 | 显示全部楼层
广东七色桥 发表于 2021-9-9 13:53
数码管显示怎么不建数组

不会呀,怎么用数组?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-9 16:59:52 | 显示全部楼层
慕名而来 发表于 2021-9-9 15:50
在这里使用#include 不是为了包含REG51.H,而是为了在延时函数可以使用_nop_();函数,使用STC单片机只要声 ...

谢谢指导
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-9 17:00:24 | 显示全部楼层
1065307738 发表于 2021-9-9 12:16
这程序确实有点low,不过能运行,不需要时间限制也可以。别人写的不一定比你写高级。等会儿给你发一个简 ...

期待您的回复
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-9 17:01:27 | 显示全部楼层
ww5223017240 发表于 2021-9-9 15:40
所以现在显示正常了吗?

是的,电机也可以做出正确的动作了,下来考虑组装起来试试
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-9 17:04:56 | 显示全部楼层
本帖最后由 iritwq 于 2021-9-9 17:07 编辑
慕名而来 发表于 2021-9-9 15:35
建议,使用STC单片机做板子的时候一定要设计一个4脚插针,连接V+、RXD、TXD、GND引脚,这样通过杜邦线将你 ...

板子上留了插针,不过我是电源V+,GND是一组,TXD,RXT是一组,放在不同的地方。另外您这个代码的确简洁多了,谢谢指导
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-9 17:12:59 | 显示全部楼层
本帖最后由 iritwq 于 2021-9-9 17:15 编辑
fryefryefrye 发表于 2021-9-9 12:28
画板的时候,也是先画原理图啊,也是直接用一组完整的。
然后布线的时候,就随便布通就行了。 ...

我这个是为了利用手边的限制数码管画的板子,可以2位,4位,6位,8位,10位等自由组合使用,数码管两侧的焊点就是为了组合方便设置的,下面的单片机是发现自己焊洞洞板太麻烦,就又在下边画了个单片机,走线就是按照洞洞板的接法画的。感觉有点亏欠立创EDA了,现在一个月有两次免费打板机会,被我全给用了
回复 支持 反对

使用道具 举报

发表于 2021-9-9 17:30:21 | 显示全部楼层
这个是我学习C语言时从书本例程那修改后在自己的STC15W408AS板上验证的程序,
按键计数在LED上显示出来。


  1.                  #include <STC15.h>

  2. sbit ADDR0 = P2^0;         //个位
  3. sbit ADDR1 = P2^3;         //十位
  4. sbit ADDR2 = P2^2;         //百位
  5. sbit ADDR3 = P2^1;         //千位
  6. sbit LED1 = P5^5;
  7. sbit SWEN = P2^4;           //按键选通
  8. sbit sw1 = P3^0;
  9. sbit sw2 = P3^1;
  10. sbit sw3 = P3^2;
  11. sbit sw4 = P3^3;
  12. sbit sw5 = P3^4;

  13.      unsigned char code LedChar[] = {
  14.       0x88,0xEE,0x92,0xC2,0xE4,0xC1,0x81,0xEA,
  15.       0x80,0xC0,0xA0,0x85,0x99,0x86,0x91,0xB1
  16.       };
  17.      unsigned char LedBuff[4] = {
  18.       0xFF,0xFF,0xFF,0xFF,
  19.       };
  20. unsigned char i = 0;        //这个i 是数码管个数
  21. unsigned int cnt = 0;   // 1ms计数到1秒
  22.   unsigned char flagls =0;
  23.   bit back1 = 1;
  24.   bit keysta = 1;
  25. void main()
  26. {
  27.          unsigned long sec = 0;  //秒计数


  28.          EA = 1; //中断使能
  29.         AUXR |= 0x80;                //定时器时钟1T模式
  30.     TMOD &= 0xF0;                //设置定时器模式
  31.         TL0 = 0xCD;                //设置定时初值           1ms
  32.         TH0 = 0xD4;                //设置定时初值
  33.     TR0  = 1;     //启动T0
  34.         ET0 = 1;     //启动T0中断

  35.         while (1)       //下面重复循环
  36.         {

  37.                                             //以下代码完成数码管动态扫描刷新
  38.     P3 = 0xFF;   //显示消隐
  39.         SWEN =1;
  40.        
  41.     switch (i)
  42.                   {
  43.                case 0: ADDR3=1; ADDR2=1; ADDR1=1; ADDR0=0; i++; P3=LedBuff[0]; break;        //显示个位

  44.            case 1: ADDR3=1; ADDR2=1; ADDR1=0; ADDR0=1; i++; P3=LedBuff[1]; break;        //显示十位

  45.            case 2: ADDR3=1; ADDR2=0; ADDR1=1; ADDR0=1; i++; P3=LedBuff[2]; break;         //显示百位
  46.                   
  47.            case 3: ADDR3=0; ADDR2=1; ADDR1=1; ADDR0=1; i=0; P3=LedBuff[3]; break;        //显示千位
  48.                    default:break;
  49.                         }


  50.           if (back1 != keysta)                //        判断与前一次是否相等
  51.          {
  52.           if (back1 == 0)
  53.           {sec++;                         //每按下一次就计数一次
  54.            LED1 = ~LED1;
  55.            if (sec>=1000)
  56.            {sec = 0;
  57.            }
  58.             
  59.            }
  60.            keysta = back1;
  61.                 }
  62.                     LedBuff[0] = LedChar[sec%10];
  63.                 LedBuff[1] = LedChar[sec/10%10];
  64.                 LedBuff[2] = LedChar[sec/100%10];
  65.                 LedBuff[3] = LedChar[sec/1000%10];
  66.                                 }
  67.                                 }
  68.                                
  69. /* 定时器0中断服务函数 */
  70. void InterruptTimer0() interrupt 1
  71. {
  72.    static unsigned char keybuf =0xff;
  73.    P3 = 0xFF;                 //显示扫描全部置高位
  74.    ADDR0 = 1;
  75.    ADDR1 = 1;
  76.    ADDR2 = 1;
  77.    ADDR3 = 1;
  78.    SWEN = 0;
  79.    keybuf = (keybuf<<1)| sw5;

  80.    if (keybuf == 0x00)
  81.    {
  82.     back1 = 0;
  83.    
  84.         }
  85.         if (keybuf == 0xff)
  86.         {
  87.          
  88.     back1 = 1;
  89.         }
  90.                          }
复制代码
回复 支持 反对

使用道具 举报

发表于 2021-9-9 19:40:00 | 显示全部楼层
iritwq 发表于 2021-9-9 16:57
不会呀,怎么用数组?

先初始化这样一个数组。


//0-9数字所对应数组
bool DIGITAL_DISPLAY[10][7] = {
        //1,2,3,4,5,6,7
        { 1,1,1,1,1,1,0 }, // = 0
        { 0,0,1,1,0,0,0 }, // = 1
        { 0,1,1,0,1,1,1 }, // = 2
        { 0,1,1,1,1,0,1 }, // = 3
        { 1,0,1,1,0,0,1 }, // = 4
        { 1,1,0,1,1,0,1 }, // = 5
        { 1,1,0,1,1,1,1 }, // = 6
        { 0,1,1,1,0,0,0 }, // = 7
        { 1,1,1,1,1,1,1 }, // = 8
        { 1,1,1,1,1,0,1 }, // = 9
};


假设数码管接在P0口的8个引脚上,想显示5,就直接赋值  P0 = DIGITAL_DISPLAY[5]。

代码不是很严谨,大概就是这个原理。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-10 08:26:40 | 显示全部楼层
fryefryefrye 发表于 2021-9-9 19:40
先初始化这样一个数组。

可是我的数码管没有接在同一组IO口上,是这样接的,应该怎么用?

单片机是这样的,每组口都不全,而且需要把有ADC功能的口预留出来


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-2 06:37 , Processed in 0.187200 second(s), 9 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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