<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        M8單片機驅動繼電器,1602液晶,按鍵程序

        作者:huqin   來源:本站原創   點擊數:  更新時間:2014年02月21日   【字體:


        #include <iom8v.h>
        #include <macros.h>
        #define  uchar unsigned char
        #define  uint unsigned int
        ///////////////////////////////////////////////////////////////
        #define  rs_L     PORTD&=~BIT(0)
        #define  rs_H     PORTD|=BIT(0)
        #define  rs_out   DDRD|=BIT(0)

        #define  rw_L     PORTD&=~BIT(1)
        #define  rw_H     PORTD|=BIT(1)
        #define  rw_out   DDRD|=BIT(1)

        #define  en_L     PORTD&=~BIT(2)
        #define  en_H     PORTD|=BIT(2)
        #define  en_out   DDRD|=BIT(2)

         

        #define  s1_L     PORTD&=~BIT(4)
        #define  s1_H     PORTBD|=BIT(4)
        #define  s1_out   DDRD|=BIT(4)

        #define  s2_L     PORTD&=~BIT(5)
        #define  s2_H     PORTD|=BIT(5)
        #define  s2_out   DDRD|=BIT(5)

        #define  s3_L     PORTD&=~BIT(6)
        #define  s3_H     PORTD|=BIT(6)
        #define  s3_out   DDRD|=BIT(6)

        #define  s4_L     PORTD&=~BIT(7)
        #define  s4_H     PORTD|=BIT(7)
        #define  s4_out   DDRD|=BIT(7)
        uchar miu=0;
        signed char t,tt,z,zz,a,b,c,d,e,f,g;
        uchar table1[]="<Himetech>~00~00";
        uchar table2[]="Z00~X00~z00~x0  ";
        /////////////////////////////////////////////////////////////////
        const table3[10]={20,40,60,80,100,120,140,160,180,200};
        /////////////////////////////////////////////////////////////
        void delay(uint ms)//yan shi han shu
        {
        uchar a;
        uint b;
        for(a=0;a<ms;a++)
        for(b=0;b<1141;b++);
        }
        ///////////////////////////////////////////////////////////////
        uchar key_press()//pan dan an jian shi fu an xia
        {
            uchar j;
            DDRC|=0X0f;
        PORTC|=0X0f;
        DDRC&=0XF0;
        j=PINC;
        j=j&0X0F;//00001111
        if(j==0X0F)
        {
         return 0;
        }
        else
        {
        return 1;
        }
        }

        //////////////////////////////////////////////////////////
        void key_scan()//pan dan an xia de  jian
        {   
            uchar key;
            delay(10);
        if(key_press())
        {
        key=PINC;
        key&=0X0F;
        switch(key)
        {
          case 0X0E: //guang biao zuo yi
              {
             zhilin(0x0f);
             miu--;
                      if(miu==1){zhilin(0x80+11);}
             if(miu==2){zhilin(0x80+12);}
         if(miu==3){zhilin(0x80+14);}
         if(miu==4){zhilin(0x80+15);}
         
                 if(miu==5){zhilin(0x80+0x40+1);}
             if(miu==6){zhilin(0x80+0x40+2);}
         if(miu==7){zhilin(0x80+0x40+5);}
         if(miu==8){zhilin(0x80+0x40+6);}
         if(miu==9){zhilin(0x80+0x40+9);}
         if(miu==10){zhilin(0x80+0x40+10);}
         if(miu==11){zhilin(0x80+0x40+13);}
         if(miu==-1){miu=12;}
          }break;
         
         
          case 0X0B: //guang biao you yi
              {
             zhilin(0x0f);
             miu++;
                      if(miu==1){zhilin(0x80+11);}
             if(miu==2){zhilin(0x80+12);}
         if(miu==3){zhilin(0x80+14);}
         if(miu==4){zhilin(0x80+15);}
         
                 if(miu==5){zhilin(0x80+0x40+1);}
             if(miu==6){zhilin(0x80+0x40+2);}
         if(miu==7){zhilin(0x80+0x40+5);}
         if(miu==8){zhilin(0x80+0x40+6);}
         if(miu==9){zhilin(0x80+0x40+9);}
         if(miu==10){zhilin(0x80+0x40+10);}
         if(miu==11){zhilin(0x80+0x40+13);}
         if(miu==12){miu=0;}
          }break;
         
         
          case 0X0D://dui guang biao suo zai xiang, jin xin jia shu
              {
             
         if(miu==1){t++;if(t==2)t=0;zhilin(0x0c);dizhishujv((0x80+11),(0x30+t));}
             if(miu==2){tt++;if(tt==10)tt=0;zhilin(0x0c);dizhishujv((0x80+12),(0x30+tt));}
         if(miu==3){z++;if(z==2)z=0;zhilin(0x0c);dizhishujv((0x80+14),(0x30+z));}
         if(miu==4){zz++;if(zz==2)zz=0;zhilin(0x0c);dizhishujv((0x80+15),(0x30+zz));}  
             if(miu==5){a++;if(a==2)a=0;zhilin(0x0c);dizhishujv((0x80+0x40+1),(0x30+a));}
             if(miu==6){b++;if(b==10)b=0;zhilin(0x0c);dizhishujv((0x80+0x40+2),(0x30+b));}
             if(miu==7){c++;if(c==2)c=0;zhilin(0x0c);dizhishujv((0x80+0x40+5),(0x30+c));}
             if(miu==8){d++;if(d==10)d=0;zhilin(0x0c);dizhishujv((0x80+0x40+6),(0x30+d));}
             if(miu==9){e++;if(e==2)e=0;zhilin(0x0c);dizhishujv((0x80+0x40+9),(0x30+e));}
         if(miu==10){f++;if(f==10)f=0;zhilin(0x0c);dizhishujv((0x80+0x40+10),(0x30+f));}
             if(miu==11){g++;if(g==2)g=0;zhilin(0x0c);dizhishujv((0x80+0x40+13),(0x30+g));}
                   }break;
             
         
          case 0X07:
              {
          DDRC&=~BIT(4);
          PORTC|=BIT(4);
          //ji qi shi xv
                   if(t)PORTD|=BIT(6);else PORTD&=~BIT(6);//qi
        //////////////////////////////////////////////////////////////// 
                 if(z)PORTD|=BIT(7);else PORTD&=~BIT(7);//zhu zhou
                  
        /////////////////////////////////////////////////////////////////////  
                   if(a){PORTD|=BIT(4); }else PORTD&=~BIT(4);//z  zou en
                    delay(table3[b]);
        ////////////////////////////////////////////////////////////
                   if(c)PORTD|=BIT(5);else PORTD&=~BIT(5);   //x zou en
                   while(PINC&0x10);
                   delay(table3[d]);
        ///////////////////////////////////////////////////////////////
                   if(e)PORTD&=~BIT(4);else PORTD|=BIT(4);  //z shou en
          PORTD&=~BIT(7);
                   delay(table3[f]);
          PORTD&=~BIT(6);
          delay(table3[tt]);
        ///////////////////////////////////////////////////////////
                   if(g)PORTD&=~BIT(5);else PORTD|=BIT(5);  // x shou  en
                  
          } 
          break;
         
          
          default: 
              key=0;      
        }
         while(key_press());
        }
        }
        /////////////////////////////////////////////////////////////////////
        void zhilin(uchar zhi)
        {
        rs_H; rw_H; en_L;
        rs_L; rw_L;
        PORTB=zhi;
        delay(1);
        en_H;
        delay(1);
        en_L;
        }
        ////////////////////////////////////////////////////////////////
        void shujv (uchar shu)
        {
        rs_L; rw_H; en_L;
        rs_H; rw_L;
        PORTB=shu;
        delay(1);
        en_H;
        delay(1);
        en_L;
        }
        ///////////////////////////////////////////////////////////////////
        void init_lcd (void)
        {
        uchar e;
        DDRB=0xff;  PORTB=0xff;
        rs_out;     rw_out;     en_out;

        delay(1);
        zhilin(0x38);
        delay(1);
        zhilin(0x38);
        delay(1);
        zhilin(0x38);
        zhilin(0x38);

        zhilin(0x08);
        zhilin(0x01);
        zhilin(0x06);
        zhilin(0x0c);

        zhilin(0x80+0x00);

        for(e=0;e<16;e++)
             {
        shujv (table1[e]);
        delay(1);
        }
        zhilin(0x80+0x40);

        for(e=0;e<16;e++)
             {
        shujv (table2[e]);
        delay(1);

         
        }

        void dizhishujv(uchar dizhi,uchar shu)
        {
           zhilin(dizhi);
          shujv(shu);

        }

        void init_time(void) //din shi qi chu shi hua
        {
        TCCR1B=0X00;//wu fen pin
        TCNT1H=0X80;//chu zhi H
        TCNT1H=0X80;//chu zhi L
        TIMSK|=BIT(2);//kai din shi qi 1 zhong dan
        SREG|=BIT(7);//kai zong zhong dan

        }

        /////////////////////////////////////////////////////////////////////////////
        void main (void)                  
        {
           init_lcd ();
           init_time();
           DDRD|=0xf0;
            while(1)
        {
              key_scan();                            
            }                                        
        }                                           

        #pragma interrupt_handler timer1:9
        void timer1(void)//din shi qi 1 zhong dan
        {
        TCNT1H=0X80;
        TCNT1H=0X80;
        }
         

        關閉窗口

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮