⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 20061219 led.c

📁 51单片机的
💻 C
字号:
//ICC-AVR application builder : 2006-12-16 0:17:05    2006-12-18 20:04
// Target : M16
// Crystal: 16.000Mhz //注册大小写识别   开始必须为字母

#include <iom16v.h>
#include <macros.h>
#include "led.h"
//           值       1    2                                            10    11  12
//                    0    1    2    3    4     5   6    7    8   9     d     f            
uchar LED_DATA[13]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0Xa1,0X0e,0x00}; //11 FOR "d"
uchar JS_001=0;
uchar JS_002=0;
uchar JS_003=0;
uchar JS_004=0;
uchar JS_005=0;
uchar JS_006=0;
uchar JS_007=0;
uchar JS_008=0;
uchar  LED_DISPLAY_V1=10;         // 初始值  显示 为 d001
uchar  LED_DISPLAY_V2=0;
uchar  LED_DISPLAY_V3=0;
uchar  LED_DISPLAY_V4=1;
uchar  LED_DISPLAY_V5=12;

uchar KEY_BANK=0;
uchar KEY_PAN_MODE_1=0;
uchar KEY_PAN_MODE_2=0;
uchar KEY_PAN_MODE_3=0;
uchar KEY_PAN_3=0;
uchar KEY_PAN_4=0;
uchar KEY_PAN_5=0;
uchar KEY_PAN_6=0;
uchar KEY_PAN_7=0;
uchar KEY_PAN_8=0;

uchar N_001=1,SUM=0;

// 共阳极用 
void port_init(void)
{
 PORTA = 0xFF;
 DDRA  = 0xFF;
 PORTB = 0x0F;
 DDRB  = 0x0F;
 PORTC = 0x1F; //m103 output only
 DDRC  = 0x10;
 PORTD = 0x00;
 DDRD  = 0x00;
}

//Watchdog initialize
// prescale: 16K 
//void watchdog_init(void)
//{
 //WDR(); //this prevents a timout on enabling
 //WDTCR = 0x08; //WATCHDOG ENABLED - dont forget to issue WDRs
//}       
//Watchdog initialize
// prescale: 2048K
void watchdog_init(void)
{
 WDR(); //this prevents a timout on enabling
 WDTCR = 0x0F; //WATCHDOG ENABLED - dont forget to issue WDRs
}
#pragma interrupt_handler eeprom_ready_isr:16
void eeprom_ready_isr(void)
{
 //eeprom ready event
}

/*
//TIMER0 initialize - prescale:64
// WGM: Normal
// desired value: 1mSec
// actual value:  1.000mSec (0.0%)
void timer0_init(void)
{
 TCCR0 = 0x00; //stop
 TCNT0 = 0x06; //set count
 OCR0  = 0xFA;  //set compare
 TCCR0 = 0x03; //start timer
 }
 */
/////////////////////////TIMER0/////////////////////////////////////////////////////////////
//TIMER0 initialize - prescale:8
// WGM: Normal
// desired value: 100uSec
// actual value: 100.000uSec (0.0%)
void timer0_init(void)
{
 TCCR0 = 0x00; //stop
 TCNT0 = 0xCE; //set count
 OCR0  = 0x32;  //set compare
 TCCR0 = 0x02; //start timer
}

#pragma interrupt_handler timer0_ovf_isr:10
void timer0_ovf_isr(void)
{
 TCNT0 = 0xCE; //reload counter value
/*}

#pragma interrupt_handler timer0_ovf_isr:10
void timer0_ovf_isr(void)
{
 TCNT0 = 0x06; //reload counter value  100us/times  */
 LED_SCAN(); 
 KEY_CHK();
}

/////////////////////////KEY_CHK/////////////////////////////////////////////////////////////

void KEY_CHK()
{

JS_002=++JS_002;                 //  ==2
//JS_003=++JS_003;               //  ==10
KEY_CHK_MODE();                  // 调用   KEY_CHK_MODE
KEY_CHK_MENU();                  // 调用   KEY_CHK_MENU
KEY_CHK_UP();                    // 调用   KEY_CHK_UP
KEY_CHK_DOWN();                  // 调用   KEY_CHK_DOWN		
}
//////////////////////////MODE///////////////////////////////////////////////////////////
void KEY_CHK_MODE()                   //100us /times
{
if (JS_002==1)
   {

    KEY_BANK=KEY_INPUT;               // 取PINC值
    KEY_BANK&=0X01;                  // 取mode 值
  if (KEY_BANK==0)
         KEY_PAN_MODE_1=1;    
  else 
         KEY_PAN_MODE_1=0;     
   }
else if (JS_002==2)
     {
       KEY_BANK=KEY_INPUT;      // 取PINC值
       KEY_BANK&=0X01;    
     if  (KEY_BANK==0)          // V1有按下
         KEY_PAN_MODE_2=1;
     else                       // V1没有按下  
         KEY_PAN_MODE_2=0;
     }
/*else if (JS_002==3)
     {
       KEY_BANK=KEY_INPUT;      // 取PINC值
       KEY_BANK&=0X01;    
     if  (KEY_BANK==0)          // V1有按下
         KEY_PAN_MODE_3=1;
     else                       // V1没有按下  
         KEY_PAN_MODE_3=0;
     }   */  
else 
    JS_002&=0;                 //js_002==0  reset
    
	
if (KEY_PAN_MODE_1==1,KEY_PAN_MODE_2==1)     //二个100us 都有按下 执行   
   {
   KEY_PRESS_CHECK_OFF();
   if (KEY_PAN_MODE_3==0)
               {
       JS_004=++JS_004;
       if (JS_004<=2)
                        {
  		 		  LED_DISPLAY_V1=11;
 	 			  LED_DISPLAY_V2=0;
  				  LED_DISPLAY_V3=0;
  				  LED_DISPLAY_V4=1;
  				  LED_DISPLAY_V5=2;
                        }
       else if (JS_004<=4)
                        {
             	  	          LED_DISPLAY_V1=10;
 	 	   	 	  LED_DISPLAY_V2=0;
  			 	  LED_DISPLAY_V3=0;
  			 	  LED_DISPLAY_V4=1;
                         }
	 
       else
      JS_004&=0;
                 } 
   } 
}

void KEY_PRESS_CHECK_OFF()
{
       KEY_BANK=KEY_INPUT;      // 取PINC值
       KEY_BANK&=0X01;    
     if  (KEY_BANK==0)          // V1有按下
         KEY_PAN_MODE_3=1;
     else                       // V1没有按下  
         KEY_PAN_MODE_3=0;
}
///////////////////////////////MENU/////////////////////////////////////////////////////////////////
void KEY_CHK_MENU() 
{
}
///////////////////////////////UP///////////////////////////////////////////////////////////////////////
void KEY_CHK_UP() 
{
}
////////////////////////////////DOWN/////////////////////////////////////////////////////////////////////////
void KEY_CHK_DOWN() 
{
if (JS_002==1)
   {

    KEY_BANK=KEY_INPUT;               // 取PINC值
    KEY_BANK=KEY_BANK>>3;
    KEY_BANK&=0X01;                  // 取DOWN 值
  if (KEY_BANK==0)
      {
         KEY_PAN_3=1;            
                                  //test
     		 		  //LED_DISPLAY_V1=11;  //f  11  0x0e
 	 			  //LED_DISPLAY_V2=11;
  				  //LED_DISPLAY_V3=0;
  				  //LED_DISPLAY_V4=3;
       }  
  else 
         {
         KEY_PAN_3=0;     
         }
   }
else if (JS_002==2)
     {
       KEY_BANK=KEY_INPUT;      // 取PINC值
       KEY_BANK=KEY_BANK>>3;       
       KEY_BANK&=0X01;    
     if  (KEY_BANK==0)          // V1有按下
         KEY_PAN_4=1;
     else                       // V1没有按下  
         KEY_PAN_4=0;
     }
else 
    JS_002&=0;                 //js_002==0  reset
    
	
if (KEY_PAN_3==1,KEY_PAN_4==1)     //二个100us 都有按下 执行   
   {
            JS_008=++JS_008;
    if (JS_008==1)
        {
  		 		  LED_DISPLAY_V1=10;
 	 			  LED_DISPLAY_V2=0;
  				  LED_DISPLAY_V3=0;
  				  LED_DISPLAY_V4=0;
  				  LED_DISPLAY_V5=2;
        }
     else if (JS_008==10)
        {
             	  	          LED_DISPLAY_V1=1;
 	 	   	 	  LED_DISPLAY_V2=3;
  			 	  LED_DISPLAY_V3=1;
  			 	  LED_DISPLAY_V4=4;
        }
	 
      else
      JS_008&=0;
      }  
}
////////////LED_DISPLAY_SCAN/////////////////////////////////////////////////////////////////////////////////////
void LED_SCAN()
{
   JS_001=++JS_001;
   
if (JS_001<=10)
   {
   HC573_CLK_PORTC|=HC573_CLK;     // PC4 =1
   LED_SCAN_PORTB|=0xff;
   LED_SCAN_PORTB&=~LED_V1;       //PB0=0
   LED_DATA_PORTA&=0X00;          //OUT LED_DATA
   LED_DATA_PORTA|=LED_DATA[LED_DISPLAY_V1];
   if (JS_001>=3)
       HC573_CLK_PORTC&=~HC573_CLK;     // PC4 =0
   else 
       HC573_CLK_PORTC|=HC573_CLK;     // PC4 =1
   }
else if (JS_001>10,JS_001<=20)
   {
   HC573_CLK_PORTC|=HC573_CLK;     // PC4 =0
   LED_SCAN_PORTB|=0xff;
   LED_SCAN_PORTB&=~LED_V2;       //PB1=0
   LED_DATA_PORTA&=0X00;
   LED_DATA_PORTA|=LED_DATA[LED_DISPLAY_V2];
   if (JS_001>=13)
       HC573_CLK_PORTC&=~HC573_CLK;     // PC4 =0
   else 
       HC573_CLK_PORTC|=HC573_CLK;     // PC4 =1
   }
else if (JS_001>20,JS_001<=30)
   {
   HC573_CLK_PORTC|=HC573_CLK;     // PC4 =1
   LED_SCAN_PORTB=0xff;
   LED_DATA_PORTA&=0X00;
   LED_DATA_PORTA|=LED_DATA[LED_DISPLAY_V3];
   LED_SCAN_PORTB&=~LED_V3;       //PB2=0
   if (JS_001>=23)
       HC573_CLK_PORTC&=~HC573_CLK;     // PC4 =0
   else 
       HC573_CLK_PORTC|=HC573_CLK;     // PC4 =1
   } 
else if (JS_001>30,JS_001<=40)
   {
   HC573_CLK_PORTC|=HC573_CLK;     // PC4 =1
   LED_SCAN_PORTB=0xff;
   LED_DATA_PORTA&=0X00;
   LED_DATA_PORTA|=LED_DATA[LED_DISPLAY_V4];
   LED_SCAN_PORTB&=~LED_V4;       //PB3=0
   if (JS_001>=33)
       HC573_CLK_PORTC&=~HC573_CLK;     // PC4 =0
   else 
       HC573_CLK_PORTC|=HC573_CLK;     // PC4 =1
   }     
else
   {
   
   HC573_CLK_PORTC|=HC573_CLK;     // PC4 =1
   LED_SCAN_PORTB=0xff;
   LED_DATA_PORTA&=0X00;
   LED_DATA_PORTA|=LED_DATA[LED_DISPLAY_V5];
   LED_SCAN_PORTB&=~LED_V5;       //PB4=0
   if (JS_001>=43)
       HC573_CLK_PORTC&=~HC573_CLK;     // PC4 =0
   else 
       HC573_CLK_PORTC|=HC573_CLK;     // PC4 =1
   if (JS_001==50)
       JS_001&=0; 
   }

}
////////////////////////////UART0//////////////////////////////////////////////////////////////////////

//UART0 initialize
// desired baud rate: 250000
// actual: baud rate:250000 (0.0%)
// char size: 9 bit
// parity: Odd
void uart0_init(void)
{
 UCSRB = 0x00; //disable while setting baud rate
 UCSRA = 0x03;
 UCSRC = BIT(URSEL) | 0x36;
 UBRRL = 0x07; //set baud rate lo
 UBRRH = 0x00; //set baud rate hi
 UCSRB = 0xFC;
}


#pragma interrupt_handler uart0_rx_isr:12
void uart0_rx_isr(void)
{
 //uart has received a character in UDR
}

#pragma interrupt_handler uart0_udre_isr:13
void uart0_udre_isr(void)
{
 //character transferred to shift register so UDR is now empty
}

#pragma interrupt_handler uart0_tx_isr:14
void uart0_tx_isr(void)
{
 //character has been transmitted
}

//call this routine to initialize all peripherals
void init_devices(void)
{
 //stop errant interrupts until set up
 CLI(); //disable all interrupts
 port_init();
//watchdog_init();
 timer0_init();
 uart0_init();

 MCUCR = 0x00;
 GICR  = 0x00;
 TIMSK = 0x01; //timer interrupt sources
 SEI(); //re-enable interrupts
 //all peripherals are now initialized
}

////////////////////////MAIN////////////////////////////////////////////////////////////////////
void main(void)
{
 init_devices();
 //insert your functional code here...
   
 while(N_001<=100)
 {
       N_001=N_001+SUM;
 }
 
 
 
 
 
  //insert your functional code here...
 
 
 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -