找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5870|回复: 4
打印 上一主题 下一主题
收起左侧

求STC15W204S中断一键多功能实现方法

[复制链接]
跳转到指定楼层
楼主
ID:12312 发表于 2015-11-9 19:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现有产品需要一键多功能(两个功能即长按与短按各处一个功能)在中断口处理,请问大侠们有没有方法附上参考程序可否。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2015-11-9 19:59 | 只看该作者
回复

使用道具 举报

板凳
ID:79544 发表于 2015-11-10 17:54 | 只看该作者
  1. /****************************************************8
  2.                 功能  :单按键控制多个LED
  3.                 单片机:STC12C5608AD
  4.                 晶振  :12M
  5.                 使用矩阵按键小板测试
  6. ******************************************************/
  7. #include <reg52.H>   
  8. #define uchar unsigned char
  9. #define uint  unsigned int

  10. uchar ID=0;//定义按键的次数变量  
  11. sbit key=P3^1;
  12. sbit led1=P1^0;
  13. sbit led2=P1^1;
  14. sbit led3=P1^2;
  15. sbit led4=P1^3;
  16. sbit led5=P1^4;
  17. sbit led6=P1^5;
  18. sbit led7=P1^6;
  19. sbit led8=P1^7;
  20. uchar code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  21. uchar code tab1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,};

  22. //-----精确延时1ms----------------------
  23. void delay1ms(uint z)  
  24. {      
  25.         unsigned int a,b;     
  26.         for(a=z;a>0;a--)         
  27.         for(b=642;b>0;b--) ;            
  28. }          
  29. //---------延时20ms--------------------     
  30. void delay20ms(void)  
  31. {      
  32.         unsigned char a,b;   
  33.         for(b=215;b>0;b--)         
  34.         for(a=45;a>0;a--);
  35. }

  36. void liushui()
  37. {
  38.         unsigned char i;
  39.         for(i=0;i<8;i++)
  40.         {
  41.                 P1=tab[i];
  42.                 delay1ms(200);       
  43.         }

  44. }
  45. void liushui1()
  46. {
  47.         unsigned char i;
  48.         for(i=0;i<8;i++)
  49.         {
  50.                 P1=tab1[i];
  51.                 delay1ms(200) ;       
  52.         }

  53. }
  54. void liushui2()
  55. {
  56.         unsigned char i;
  57.         for(i=0;i<8;i++)
  58.         {
  59.                 P1=tab1[i];
  60.                 delay1ms(200) ;       
  61.         }
  62.         for(i=0;i<8;i++)
  63.         {
  64.                 P1=tab[i];
  65.                 delay1ms(200) ;       
  66.         }
  67. }
  68. void main(void)  
  69. {   
  70.        
  71.         while(1)      
  72.         {   
  73.                 if(key==0)            
  74.                 {   
  75.                         delay1ms(10);            
  76.                         if(key==0)            
  77.                          {                  
  78.                                 ID++;                 
  79.                                 if(ID==9)                 
  80.                                 {                     
  81.                                         ID=0;                  
  82.                                 }                 
  83.                                 while(key==0);              
  84.                          }         
  85.                 }         
  86.                 switch(ID)         
  87.                 {
  88.                         case 1:liushui();break;
  89.                         case 2:liushui1();break;         
  90.                         case 3:liushui2();break;
  91.                         case 4:P1=0xff;delay20ms();led4=0;delay20ms();break;
  92.                         case 5:P1=0xff;delay20ms();led5=0;delay20ms();break;
  93.                         case 6:P1=0xff;delay20ms();led6=0;delay20ms();break;         
  94.                         case 7:P1=0xff;delay20ms();led7=0;delay20ms();break;
  95.                         case 8:P1=0xff;delay20ms();led8=0;delay20ms();break;
  96.                         default: P1=0xff;break;
  97.                 }      
  98.         }  
  99. }
复制代码
就是一个按键控制多个LED的程序
回复

使用道具 举报

地板
ID:186299 发表于 2017-4-5 15:08 | 只看该作者
啊啊好
回复

使用道具 举报

5#
ID:186299 发表于 2017-4-5 15:10 | 只看该作者
/****************************************************8
                功能  :单按键控制多个LED
                单片机:STC12C5608AD
                晶振  :12M
                使用矩阵按键小板测试
******************************************************/
#include <reg52.H>   
#define uchar unsigned char
#define uint  unsigned int

uchar ID=0;//定义按键的次数变量  
sbit key=P3^1;
sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
sbit led4=P1^3;
sbit led5=P1^4;
sbit led6=P1^5;
sbit led7=P1^6;
sbit led8=P1^7;
uchar code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar code tab1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,};

//-----精确延时1ms----------------------
void delay1ms(uint z)  
{      
        unsigned int a,b;     
        for(a=z;a>0;a--)         
        for(b=642;b>0;b--) ;            
}         
//---------延时20ms--------------------     
void delay20ms(void)  
{      
        unsigned char a,b;   
        for(b=215;b>0;b--)         
        for(a=45;a>0;a--);
}

void liushui()
{
        unsigned char i;
        for(i=0;i<8;i++)
        {
                P1=tab[i];
                delay1ms(200);        
        }

}
void liushui1()
{
        unsigned char i;
        for(i=0;i<8;i++)
        {
                P1=tab1[i];
                delay1ms(200) ;        
        }

}
void liushui2()
{
        unsigned char i;
        for(i=0;i<8;i++)
        {
                P1=tab1[i];
                delay1ms(200) ;        
        }
        for(i=0;i<8;i++)
        {
                P1=tab[i];
                delay1ms(200) ;        
        }
}
void main(void)  
{   
        
        while(1)      
        {   
                if(key==0)            
                {   
                        delay1ms(10);            
                        if(key==0)            
                         {                  
                                ID++;                 
                                if(ID==9)                 
                                {                     
                                        ID=0;                  
                                }                 
                                while(key==0);              
                         }         
                }         
                switch(ID)         
                {
                        case 1:liushui();break;
                        case 2:liushui1();break;         
                        case 3:liushui2();break;
                        case 4:P1=0xff;delay20ms();led4=0;delay20ms();break;
                        case 5:P1=0xff;delay20ms();led5=0;delay20ms();break;
                        case 6:P1=0xff;delay20ms();led6=0;delay20ms();break;         
                        case 7:P1=0xff;delay20ms();led7=0;delay20ms();break;
                        case 8:P1=0xff;delay20ms();led8=0;delay20ms();break;
                        default: P1=0xff;break;
                }      
        }  
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表