BSP中期训练

目录

1.Display:在数码管指定位置显示指定内容

2.蜂鸣器:开机后发出指定频率的声音

3.开机后A调,每分钟100拍,播放1、2、3、4、5

4.步进电机。2号电机正转100步(速度:每秒十步)

 5.按键。按下k1,数码管灯显示“H”,松开后灭掉。

6.震动:震动后,蜂鸣器发出HZ频率声音

7.霍尔:磁场接近时,4个LED向左流水

8.AD:左右导航按键调节初始状态在中间2个LED位置

9.秒表:数码管显示分秒毫秒

10.光照值小于20,蜂鸣器发1.2khz频率声音。光照值大于100,蜂鸣器发2khz频率声音

扫描二维码关注公众号,回复: 16500881 查看本文章

1.Display:在数码管指定位置显示指定内容

编写程序,在数码管显示" 12HL-21"

0x3f , 0x06 , 0x5b , 0x4f , 0x66 , 0x6d , 0x7d , 0x07 , 0x7f , 0x6f,

0 1 2 3 4 5 6 7 8 9

0x77 , 0x7c , 0x39 , 0x5e , 0x79 , 0x71 , 0x3d ,

a b c d e f g

0x76 , 0x0f , 0x0e , 0x75 , 0x38 , 0x37, 0x54

h i j k l m n

0x5c , 0x73 , 0x67 , 0x31 , 0x49 , 0x78

o p q r s t

0x3e , 0x1c , 0x7e , 0x64 , 0x6e , 0x59

u v w x y z
#include "STC15F2K60S2.H"        //±ØÐë¡£
#include "sys.H"                 //±ØÐë¡£
#include "displayer.H" 
​
code unsigned long SysClock=11059200;         //±ØÐë¡£¶¨Òåϵͳ¹¤×÷ʱÖÓƵÂÊ(Hz)£¬Óû§±ØÐëÐ޸ijÉÓëʵ¼Ê¹¤×÷ƵÂÊ£¨ÏÂÔØʱѡÔñµÄ£©Ò»ÖÂ
#ifdef _displayer_H_                          //ÏÔʾģ¿éÑ¡ÓÃʱ±ØÐë¡££¨ÊýÂë¹ÜÏÔʾÒëÂë±í£¬ÓÑô¿ÉÐ޸ġ¢Ôö¼ÓµÈ£© 
code char decode_table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x76,0x38,0x40, 0x5b, 0x06, 
                  /* ÐòºÅ:   0   1    2    3    4       5    6    7   8    9     10    11       12   13    14     15     */
                /* ÏÔʾ:   0   1    2    3    4     5    6    7   8    9  (ÎÞ)   ÏÂ-  ÖÐ-  ÉÏ-  ÉÏÖÐ-  ÖÐÏÂ-   */  
                           0x3f|0x80,0x06|0x80,0x5b|0x80,0x4f|0x80,0x66|0x80,0x6d|0x80,0x7d|0x80,0x07|0x80,0x7f|0x80,0x6f|0x80 };  
             /* ´øСÊýµã     0         1         2         3         4         5         6         7         8         9        */
#endif
​
void my100mS_callback()
{ 
    unsigned char a;
    if( a != 0) a=a<<1;
      else a=0x01;
    LedPrint(a);
}
void main() 
{ 
    DisplayerInit();  
    SetDisplayerArea(0,7);  
  Seg7Print(10,1,2,11,12,13,2,1);   
    //SetEventCallBack(enumEventSys100mS, my100mS_callback);
  MySTC_Init();     
    while(1)                
        { MySTC_OS();    
        }                
}               

2.蜂鸣器:开机后发出指定频率的声音

开机后发出1.2kHZ 1.8s的声音

(1) BeepInit():蜂鸣器模块驱动函数

(2) Set_Beep(unsigned int Beep_freq, unsigned char Beep_time):控制蜂鸣器发声,非阻塞型;

函数参数:

Beep_freq:指定发声频率,单位Hz。小于<10 Hz, 不发音

Beep_time:指定发声时长。发声时长=10*Beep_time (mS) ,最长 655350mS

#include "STC15F2K60S2.H"        //±ØÐë¡£
#include "sys.H"                 //±ØÐë¡£
#include "displayer.H" 
#include "key.H" 
#include "beep.H" 
​
code unsigned long SysClock=11059200;         
​
​
void main() 
{ 
​
    BeepInit();
    SetBeep(1200,180);
    
  MySTC_Init();     
    while(1)                
        { MySTC_OS();    
        }                
}           

3.开机后A调,每分钟100拍,播放1、2、3、4、5

#include "STC15F2K60S2.H"        //±ØÐë¡£
#include "sys.H"  
#include "music.H"
#include "beep.H"
#include "displayer.H" 
​
code unsigned long SysClock=11059200;         //±ØÐë¡£¶¨Òåϵͳ¹¤×÷ʱÖÓƵÂÊ(Hz)£¬Óû§±ØÐëÐ޸ijÉÓëʵ¼Ê¹¤×÷ƵÂÊ£¨ÏÂÔØʱѡÔñµÄ£Ò»ÖÂ
#ifdef _displayer_H_                          //??????????(????????,?????????) 
code char decode_table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x76,0x38,0x40, 0x5b, 0x06, 
                  /* ??:   0   1    2      3    4       5    6    7   8    9     10    11       12   13    14     15     */
                /* ??:   0   1    2    3    4     5    6    7   8    9  (?)   ?-  ?-  ?-  ??-  ??-   */  
                           0x3f|0x80,0x06|0x80,0x5b|0x80,0x4f|0x80,0x66|0x80,0x6d|0x80,0x7d|0x80,0x07|0x80,0x7f|0x80,0x6f|0x80 };  
             /* ????     0         1         2         3         4         5         6         7         8         9        */
#endif
unsigned char scale=0x21;
void my10mS_callback()
{ 
    PlayTone(0xfa, 100 ,scale, 0x10);
    scale=scale+1;
    if(scale==0x26) scale=0x21;
}
void main() 
{ 
    DisplayerInit();
    BeepInit();
    MusicPlayerInit();
    SetDisplayerArea(0,7);  
    Seg7Print(10,10,10,10,10,10,10,10);
    LedPrint(0);
    SetEventCallBack(enumEventSys100mS, my10mS_callback);
  MySTC_Init();     
    while(1)                
        { MySTC_OS();
        }                
}

4.步进电机。2号电机正转100步(速度:每秒十步)

#include "STC15F2K60S2.H"        //±ØÐë¡£
#include "sys.H"                 //±ØÐë¡£
#include "displayer.H" 
#include "StepMotor.H"
//code unsigned long SysClock=11059200;         //±ØÐë¡£¶¨Òåϵͳ¹¤×÷ʱÖÓƵÂÊ(Hz)£¬Óû§±ØÐëÐ޸ijÉÓëʵ¼Ê¹¤×÷ƵÂÊ£¨ÏÂÔØʱѡÔñµÄ£©Ò»ÖÂ
code unsigned long SysClock=11059200;         //±ØÐë¡£¶¨Òåϵͳ¹¤×÷ʱÖÓƵÂÊ(Hz)£¬Óû§±ØÐëÐ޸ijÉÓëʵ¼Ê¹¤×÷ƵÂÊ£¨ÏÂÔØʱѡÔñµÄ£©Ò»ÖÂ
#ifdef _displayer_H_                          //ÏÔʾģ¿éÑ¡ÓÃʱ±ØÐë¡££¨ÊýÂë¹ÜÏÔʾÒëÂë±í£¬ÓÑô¿ÉÐ޸ġ¢Ôö¼ÓµÈ£© 
code char decode_table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x38,0x40,0x00, 0x5b, 0x06, 
                  /* ÐòºÅ:   0   1    2    3    4       5    6    7   8    9     10    11       12   13    14     15     */
                /* ÏÔʾ:   0   1    2    3    4     5    6    7   8    9  (ÎÞ)   ÏÂ-  ÖÐ-  ÉÏ-  ÉÏÖÐ-  ÖÐÏÂ-   */  
                           0x3f|0x80,0x06|0x80,0x5b|0x80,0x4f|0x80,0x66|0x80,0x6d|0x80,0x7d|0x80,0x07|0x80,0x7f|0x80,0x6f|0x80 };  
             /* ´øСÊýµã     0         1         2         3         4         5         6         7         8         9        */
#endif
​
void main() 
{ 
    DisplayerInit();
    
    StepMotorInit();
    SetDisplayerArea(0,7);  
  Seg7Print(10,10,10,10,10,10,10,10);   
    SetStepMotor(enumStepMotor2,0x0a,100);
    
  MySTC_Init();     
    while(1)                
        { MySTC_OS();    
        }                
}    

 5.按键。按下k1,数码管灯显示“H”,松开后灭掉。

#include "STC15F2K60S2.H"        //±ØÐë¡£
#include "sys.H"                 //±ØÐë¡£
#include "displayer.H" 
#include "key.H" 
#include "beep.H" 
​
code unsigned long SysClock=11059200;         //±ØÐë¡£¶¨Òåϵͳ¹¤×÷ʱÖÓƵÂÊ(Hz)£¬Óû§±ØÐëÐ޸ijÉÓëʵ¼Ê¹¤×÷ƵÂÊ£¨ÏÂÔØʱѡÔñµÄ£©Ò»ÖÂ
#ifdef _displayer_H_                          //ÏÔʾģ¿éÑ¡ÓÃʱ±ØÐë¡££¨ÊýÂë¹ÜÏÔʾÒëÂë±í£¬ÓÑô¿ÉÐ޸ġ¢Ôö¼ÓµÈ£© 
code char decode_table[]={0x76,0x76,0x76,0x76,0x76,0x76,0x76,0x76,0x76,0x6f,0x00,0x08,0x40,0x01, 0x41, 0x48, 
                  /* ÐòºÅ:   0   1    2    3    4       5    6    7   8    9     10    11       12   13    14     15     */
                /* ÏÔʾ:   0   1    2    3    4     5    6    7   8    9  (ÎÞ)   ÏÂ-  ÖÐ-  ÉÏ-  ÉÏÖÐ-  ÖÐÏÂ-   */  
                           0x3f|0x80,0x06|0x80,0x5b|0x80,0x4f|0x80,0x66|0x80,0x6d|0x80,0x7d|0x80,0x07|0x80,0x7f|0x80,0x6f|0x80 };  
             /* ´øСÊýµã     0         1         2         3         4         5         6         7         8         9        */
#endif
​
char a;
​
void myKey_callback()
{ 
char k;
    //SetBeep(1000,10);
    k=GetKeyAct(enumKey1);
    if( k == enumKeyPress ) 
    {
        SetDisplayerArea(0,7);  
    Seg7Print(10,10,10,10,10,10,10,8);
        //a |=0x01;
    }
    else if( k == enumKeyRelease ) Seg7Print(10,10,10,10,10,10,10,10);
    //k=GetKeyAct(enumKey2);
    //if( k == enumKeyPress ) a |=0x02;
    //  else if( k == enumKeyRelease ) a &=~0x02;
    //k=GetKeyAct(enumKey3);
    //if( k == enumKeyPress ) a |=0x04;
     // else if( k == enumKeyRelease ) a &=~0x04;
}
​
void my10mS_callback()
{ 
    LedPrint(a);
}
​
void main() 
{ 
    DisplayerInit();  
    
    
    KeyInit();
    //BeepInit();
    //SetEventCallBack(enumEventSys10mS, my10mS_callback);
    
    Seg7Print(10,10,10,10,10,10,10,10);
    SetEventCallBack(enumEventKey, myKey_callback);
  MySTC_Init();     
    while(1)                
        { MySTC_OS();    
        }                
}         

6.震动:震动后,蜂鸣器发出HZ频率声音

#include "STC15F2K60S2.H"
#include "displayer.h"
#include "Beep.h"
#include "Vib.h"
#include "sys.H"
​
code unsigned long SysClock = 11059200;
​
void VibEvent()
{
    if (GetVibAct() == enumVibQuake)
    {
        SetBeep(1000, 100);
    }
}
​
void main()
{
    VibInit();
    BeepInit();
    MySTC_Init();
    SetEventCallBack(enumEventVib, VibEvent);
    while (1)
    {
        MySTC_OS();
    }
}

7.霍尔:磁场接近时,4个LED向左流水

#include "STC15F2K60S2.H"
#include "displayer.h"
#include "hall.h"
#include "sys.H"
​
code unsigned long SysClock = 11059200;
​
char enableFlow = 0, ledOn = 0x01, ledOff = 0x00;
​
code char decode_table[] = {0x00};
​
void HallEvent()
{
    char event = GetHallAct();
    if (event == enumHallGetClose)
    {
        enableFlow = 1;
    }
    else if (event == enumHallGetAway)
    {
        enableFlow = 0;
    }
}
​
void flashLed()
{
    if (!enableFlow)
    {
        LedPrint(ledOff);
        return;
    }
    
    ledOn <<= 1;
    if (ledOn == 0x10)
    {
        ledOn = 0x01;
    }
    LedPrint(ledOn);
}
​
void main()
{
    DisplayerInit();
    HallInit();
    MySTC_Init();
    SetEventCallBack(enumEventHall, HallEvent);
    SetEventCallBack(enumEventSys100mS, flashLed);
    SetDisplayerArea(0, 7);
    Seg7Print(0, 0, 0, 0, 0, 0, 0, 0);
    LedPrint(ledOff);
    while (1)
    {
        MySTC_OS();
    }
}

8.AD:左右导航按键调节初始状态在中间2个LED位置

#include "STC15F2K60S2.H"
#include "adc.h"
#include "displayer.h"
#include "Key.H"
#include "sys.H"
​
code unsigned long SysClock = 11059200;
​
char lPos = 4, rPos = 3;
​
code char decode_table[] = {0x00};
​
char change_bit(char i, char t, char c)
{
    char temp;
    temp = c;
    if (t == 0)
        temp &= ~(1 << i);
    else
        temp |= (1 << i);
    return temp;
}
​
void navigate()
{
    char l, r;
    l = GetAdcNavAct(enumAdcNavKeyLeft);
    r = GetAdcNavAct(enumAdcNavKeyRight);
    if (l == enumKeyPress)
    {
        lPos = (lPos + 1) % 8;
    }
    if (r == enumKeyPress)
    {
        rPos = rPos - 1;
        if (rPos < 0)
            rPos = 7;
    }
}
​
void displayLed()
{
    char led = 0x00;
    led = change_bit(lPos, 1, led);
    led = change_bit(rPos, 1, led);
    LedPrint(led);
}
​
void main()
{
    DisplayerInit();
    AdcInit(ADCincEXT);
    MySTC_Init();
    SetDisplayerArea(0, 7);
    Seg7Print(0, 0, 0, 0, 0, 0, 0, 0);
    LedPrint(0);
    SetEventCallBack(enumEventNav, navigate);
    SetEventCallBack(enumEventSys10mS, displayLed);
    while (1)
    {
        MySTC_OS();
    }
}

9.秒表:数码管显示分秒毫秒

#include "STC15F2K60S2.H"        //±ØÐë¡£
#include "sys.H"                 //±ØÐë¡£
#include "displayer.H" 
#include "ADC.H"
#include "Key.H"
code unsigned long SysClock=11059200;         //±ØÐë¡£¶¨Òåϵͳ¹¤×÷ʱÖÓƵÂÊ(Hz)£¬Óû§±ØÐëÐ޸ijÉÓëʵ¼Ê¹¤×÷ƵÂÊ£¨ÏÂÔØʱѡÔñµÄ£©Ò»ÖÂ
#ifdef _displayer_H_                          //ÏÔʾģ¿éÑ¡ÓÃʱ±ØÐë¡££¨ÊýÂë¹ÜÏÔʾÒëÂë±í£¬ÓÑô¿ÉÐ޸ġ¢Ôö¼ÓµÈ£© 
code char decode_table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x38,0x40,0x00, 0x5b, 0x80, 
	              /* ÐòºÅ:   0   1    2	   3    4	    5    6	  7   8	   9	 10	   11		12   13    14     15     */
                /* ÏÔʾ:   0   1    2    3    4     5    6    7   8    9  (ÎÞ)   ÏÂ-  ÖÐ-  ÉÏ-  ÉÏÖÐ-  ÖÐÏÂ-   */  
	                       0x3f|0x80,0x06|0x80,0x5b|0x80,0x4f|0x80,0x66|0x80,0x6d|0x80,0x7d|0x80,0x07|0x80,0x7f|0x80,0x6f|0x80 };  
             /* ´øСÊýµã     0         1         2         3         4         5         6         7         8         9        */
#endif
 
unsigned int m=0,s=0,ms=0;
void my1mS_callback()
{ 
	ms++;
	if(ms>=1000) 
	{
		ms=0;
		s++;
	}
	if(s>=60) 
	{
		s=0;
		m++;
	}
	Seg7Print(m,10,s/10,s%10,10,ms/100,(ms/10)%10,ms%10);

}	

void main() 
{ 
	
	DisplayerInit();  
	SetDisplayerArea(0,7);	
	LedPrint(0x0);
	SetEventCallBack(enumEventSys1mS, my1mS_callback);
	MySTC_Init();	
	while(1)             	
		{ MySTC_OS();    
		}	             
}   

10.光照值小于20,蜂鸣器发1.2khz频率声音。光照值大于100,蜂鸣器发2khz频率声音

#include "STC15F2K60S2.H"        //±ØÐë¡£
#include "sys.H"                 //±ØÐë¡£
#include "displayer.H" 
#include "ADC.H"
#include "beep.H"

void my10mS_callback()
{
	struct_ADC adc;
	adc=GetADC();
	

	if(adc.Rop<20)
	{
	  SetBeep(1200,180);
	}
	if(adc.Rop>100)
	{
	  SetBeep(1200,180);
	}
	
}
					
void main() 
{ 
	
	AdcInit(ADCincEXT);
	BeepInit();
	
	SetEventCallBack(enumEventSys10mS, my10mS_callback);
	
	MySTC_Init();	
	while(1)             	
		{ MySTC_OS();    
		}	             
}   

猜你喜欢

转载自blog.csdn.net/a45667/article/details/127156215
BSP