專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

燈光校驗(yàn)程序

作者:huqin   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2014年04月08日   【字體:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit SER = P2^0;
sbit SRCLK = P2^1;
sbit SRCLR = P2^2;
sbit RRCLK =  P2^3;
sbit E = P2^4;
sbit KEY1=P3^0;
sbit KEY2=P3^1;
sbit KEY3=P3^2;
sbit KEY4=P3^3;
uchar code table595[]={0x30,0x7e,0x29,0x2c,0x66,0xa4,0xa0,0x3e,0x20,0x24};
uchar code Table[]={0xee,0xdd,0xbb,0x77};//P1
uchar code Led[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //P0
uchar flag,flag1,tt,i,j; //flag為手動(dòng)、自動(dòng)轉(zhuǎn)換
char m;
void X74HC595(uchar a)
{
 uchar i,temp;
 E = 1;
 _nop_();
 _nop_();
 E = 0;
 SRCLR = 1;
 temp=table595[a];
 for(i=0;i<8;i++)
 {
  temp=_crol_(temp,1);
  SER = temp & 0x80; //SER連J9的1口
  SRCLK = 0;
  _nop_();
  SRCLK = 1; 
  _nop_();
  RRCLK= 0; 
  _nop_();
  RRCLK = 1;
  _nop_(); 
 }
}
void delay(uchar b)
{
 uchar x,y;
 for(x=110;x>0;x--)
  for(y=b;y>0;y--);
}
void X74HC573(uchar c,uchar d)
{
  P1=Table[c];
 P0=Led[d];
 delay(5);
}
void init()
{
 EA=1;
 ET0=1;
 TMOD=0x01;
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 tt=0;
 flag=0; //默認(rèn)自動(dòng)
 TR0=1; //啟動(dòng)定時(shí)器0
 flag1=0;//自動(dòng)時(shí)正常運(yùn)行
 X74HC595(m);
 X74HC573(0,0);
}
void exter()
{
 flag=!flag;
 TR0=!TR0;
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
}
void time() interrupt 1
{
 tt++;
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
}
void key()
{
 if(KEY1==0||KEY2==0||KEY3==0||KEY4==0)
 {
  delay(5);
  if(KEY1==0)
  {
   exter();
   while(!KEY1);
  }
  else if(KEY2==0&&flag==1)
  {
   if(i==3&&j==7)
   {
    i=0;
    j=0;
    X74HC573(0,0);
   }
   else if(j!=7)
    X74HC573(i,++j);
   else
    X74HC573(++i,0);
   X74HC595(++m);
   while(!KEY2);
  }
  else if(KEY3==0&&flag==0)
  { 
   flag1=!flag1;
   TR0=!TR0;
   while(!KEY3);
  }
  else if(KEY4==0&&flag==1)
  {
   if(i==0&&j==0)
   { 
    i=3;
    j=7;
    X74HC573(3,7);
   }
   else if(j!=0)
    X74HC573(i,--j);
   else
   {
    j=0;
    X74HC573(--i,0);
   }
   X74HC595(--m);
   while(!KEY4);
  }    
 }
}
void main()
{
 init();
 while(1)
 {
  if(m>0&&m<9) 
   key();
  else if(m==0)
  {
   if(KEY4==0)
    m=10;
   key();
  }
  else if(m==9)
  {
   if(KEY2==0)
    m=-1;
   key();
  }
  if(tt==30&&flag==0)
  {
   tt=0;
   TH0=(65536-50000)/256;
   TL0=(65536-50000)%256;
   if(i==3&&j==7)
   {
    i=0;
    j=0;
    X74HC573(0,0);
   }
   else if(j!=7)
    X74HC573(i,++j);
   else
   {
    j=0;
    X74HC573(++i,0);
   }
   if(m<9)
    X74HC595(++m);
   else if(m==9)
   {
    m=0;
    X74HC595(m);
   }  
  } 
   }
}
關(guān)閉窗口

相關(guān)文章