求一个单片机课设的编程程序!急求

8个LED灯,设置一个控制按键,短按按键控制单灯循环左移、循环右移、双灯循环左移和循环右移,长按按键控制奇数灯以不同频率闪烁、偶数灯以不同频率闪烁、奇数双灯闪烁、偶数双灯闪烁。

/******************************************************
*程序:吴鉴鹰数字电子钟的设计                                                           
** è¿™ä¸€è®²çš„主要内容: æ•°å­—电子钟的设计原理和程序                                                                                
** åŠŸèƒ½æè¿°:  
** è¾“ 入:         
** å†…容:     
** è¾“ 出: 
**         
** å…¨å±€å˜é‡:
** è°ƒç”¨æ¨¡å—: 
**
** ä½œã€€è€…:    å´é‰´é¹°
** æ—¥ã€€æœŸ:     14.02.17备注:有什么错误的地方,欢迎各大烧友指正O(∩_∩)O~
*******************************************************/
//变量定义和头文件的调用
//定义头文件和各个输入管脚以及变量声明
#include<reg52.h>
#include<absacc.h>
#define  uint unsigned int
#define  uchar  unsigned char
/*定义字型字位口*/
#define  DIGPORT  XBYTE  [0X8000]
#define  WORDPORT  XBYTE [0X4000]/*定义P1口各管脚*/
sbit  K0 = P1^0;
sbit  K1 = P1^1;
sbit  K2 = P1^2;
sbit  BEEP = P1^3;
sbit  L0 = P1^4;
sbit  L1 = P1^5
sbit  L2 = P1^6;
sbit  L3 = P1^7;uchar  data  BUFFER[2]  = {0,0};  //显示的缓存数组,依次为低位、高位
uchar  data  CLOCK[4] = {0,0,0,0};
uchar  data  SECOND[2] = {0,0};/*定义运行状态*/
uchar  data  STATE = 0;
/*STATE = 0;秒表*/
/*STATE = 4,或者7,时钟运行*/
/* STATE = 6,时钟时调整 */bit  bdata  SND = 0;    /*  ç§’表START(开始)  */
bit  bdata  RST = 0;     /*秒表RESET(复位)*//*数码管显示编码“0”-“9”,"A","-"*/
uchar  code  TABLE[] = {0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X77,0X40};/******************************************************
*程序:主程序                                                                                                                         
** åŠŸèƒ½æè¿°: ä¸»å¹²ç¨‹åº 
** è¾“ 入:         
** å†…容:     
** è¾“ 出: 
**         
** å…¨å±€å˜é‡:
** è°ƒç”¨æ¨¡å—: 
**
** ä½œã€€è€…:    å´é‰´é¹°
** æ—¥ã€€æœŸ:     14.02.17备注:有什么错误的地方,欢迎各大烧友指正O(∩_∩)O~
*******************************************************/
void  main()
{
      uchar   stabak;
          P1 = 0X0F;
      EA = 1;
      IT1 = 1;
      ET0 = 1;
      TMOD = 0X61;
      TH0 = -5000/256;
      TL0 = -5000%256;
      TH1 = 0XFF;
      TL1 = 0XFF;
      T2CON = 0;
      TH2 = -5000/256;
      TL2 = -5000%256;       K0 = 1;
       K1 = 1;
       K2 = 1;
       STATE = P1&0X07;
       stabak = STATE;      for(;;)
    {
           switch(STATE)
        {
                case 0:
                {
                    EX1 = 0;
                    ET1 = 1;
                    ET2 = 1;
                    TR1 = 1;
                    SND = 1;
                    L1 = 1;    
                    L0 = 0;
                    L2 = 0;
                    SECOND[0] = 0;
                    SECOND[1] = 0;
                }break;                 case   5:
                {
                          IE1 = 0;
                          EX1 = 1;
                          ET1 = 0;
                          ET2 = 0;
                          TR0 = 0;
                          L0 = 1;
                          L1 = 0;
                          L2 = 0;
                }break;                case  6:
               {
                    IE1 = 0;
                    EX1 = 1;
                    ET1 = 0;
                    ET2 = 1;
                    TR0 = 0;
               }break;                  default:
               {
                   EX1 = 0;
                   ET1 = 0;
                   ET2 = 1;
                   L1 = 0;
                                   L2 = 0;
               }        }
         while(STATE == stabak)
     {
         switch(STATE)
      {
         case 0:
      {
         BUFFER[0] = SECOND[0];
         BUFFER[1] = SECOND[1];
      }break;
      
      case 5:
      {
          BUFFER[0] = CLOCK[2];
          BUFFER[1] = 101;/*A-*/
      }break;
      
      case 6:
      {
          BUFFER[0] = 110;/*A-*/
          BUFFER[1] = CLOCK[3];
      }break;
      
      default:
      {
          BUFFER[0] = CLOCK[2];
          BUFFER[1] = CLOCK[3];
      }break;
      
      default:
      {
          BUFFER[0] = CLOCK[2];
          BUFFER[1] = CLOCK[3];
      }
      
      }
      
     //显示函数
     display();
     K0 = 1;
     K1 = 1;
     K2 = 1;
     STATE = P1&0X07;    
     }
     stabak = STATE;
    }
}/******************************************************
*程序:子函数(1):timer0(void)                                                                                                                         
** åŠŸèƒ½æè¿°:  ç”¨å®šæ—¶å™¨0实现24小时的时钟显示
** è¾“ 入:         
** å†…容:     
** è¾“ 出: 
**         
** å…¨å±€å˜é‡:
** è°ƒç”¨æ¨¡å—: 
**
** ä½œã€€è€…:    å´é‰´é¹°
** æ—¥ã€€æœŸ:     14.02.17备注:有什么错误的地方,欢迎各大烧友指正O(∩_∩)O~
*******************************************************/
void  timer0(void)   interrupt  1  using 1
{
    /*重置定时器初值*/
TH0 = -5000/256;
TL0 = -5000%256;
/*定时器处理*/
CLOCK[0] = CLOCK[0]+1;
if((CLOCK[0] == 50) && (STATE >= 4))
{
    L0 = !L0;
}if(CLOCK[0] == 100)
{
    if(STATE >= 4)  L0 = !L0;
    CLOCK[0] = 0;
    CLOCK[1] = CLOCK[1] + 1;
    
    if(CLOCK[1] == 60)
    {
       CLOCK[1] = 0;
    CLOCK[2] = CLOCK[2] + 1;
    if(CLOCK[2] == 60)
    {
        CLOCK[2] == 0;
     CLOCK[3] == CLOCK[3] + 1;
     if(CLOCK[3] == 24)
     {
        CLOCK[3] = 0;
     }
    }
    }
}
}/******************************************************
*程序:子函数(2):intsvr1(void)                                                                                                                        
** åŠŸèƒ½æè¿°:  å¯¹å¤–中断1的按键脉冲进行判断和计数,并完成对应的时间调整功能。
** è¾“ 入:         
** å†…容:     
** è¾“ 出: 
**         
** å…¨å±€å˜é‡:
** è°ƒç”¨æ¨¡å—: 
**
** ä½œã€€è€…:    å´é‰´é¹°
** æ—¥ã€€æœŸ:     14.02.17备注:有什么错误的地方,欢迎各大烧友指正O(∩_∩)O~
*******************************************************/
void intsvr1(void) interrupt  2  using 2  
{
   if(STATE == 5)
   {
       CLOCK[2] == CLOCK[2] + 1;
    if(CLOCK[2] == 60)  CLOCK[2] == 0;
   }
   if(STATE == 6)
   {
       CLOCK[3] == CLOCK[3] + 1;
    if(CLOCK[3] == 24)  CLOCK[3] = 0;
   }
}/******************************************************
*程序:子函数(3):display(void)                                                                                                                        
** åŠŸèƒ½æè¿°:  ç”¨åŠ¨æ€æ˜¾ç¤ºçš„方法,将当前的时间或秒表内容通过数码管显示。
** è¾“ 入:         
** å†…容:     
** è¾“ 出: 
**         
** å…¨å±€å˜é‡:
** è°ƒç”¨æ¨¡å—: 
**
** ä½œã€€è€…:    å´é‰´é¹°
** æ—¥ã€€æœŸ:     14.02.17备注:有什么错误的地方,欢迎各大烧友指正O(∩_∩)O~
*******************************************************/
void diplay(void)
{
   uchar i;
   uchar delay;
   uchar disp;
   uchar digit;
   digit = 0x08;
   for(i = 0;i < 2; i++)
   {
      if(BUFFET> 100)  
{
   disp = BUFFER%10 + 10;
}
   else  disp = BUFFER%10;
   
   DIGPORT = digit;
   WORDPORT = TABLE[disp];
   
   for(delay = 0;delay <= 200;delay ++);
   digit = digit >> 1;
   disp = BUFFER/10;
   
   DIGPORT = digit;
   WORDPORT = TABLE[disp];
   
   for(delay = 0;delay <= 200;delay ++);
   digit = digit >> 1;
   }
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-01-10
需要定真可以丘上说
我id
第2个回答  2015-01-10
你又不说是什么单片机?51?MSP430?STM32?AVR?追问

89C51

相似回答