打印
[STC单片机]

STC单片机 啥情况

[复制链接]
1123|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
YO拉里多|  楼主 | 2019-7-15 11:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
弄了一个开关 写了个程序实现3种效果,  仿真的时候没毛病烧写进去就不对,   ,上电读取IO状态 为0显示...为1显示...开关关闭显示1...打开显示2....再关闭则显示3
程序代码下边贴上

使用特权

评论回复

相关帖子

沙发
YO拉里多|  楼主 | 2019-7-15 11:59 | 只看该作者

#include <STC12C5A60S2.H>
#include <intrins.h>

#define uchar unsigned char
#define uint unsigned int



sbit SW=P1^3;
uint m;  //¿ª¹Ø´ÎÊý
uint n,q;
void delay(uint i)
{
uint j,k;
for(j=0;j<i;j++)
  for(k=0;k<1120;k++);
}

void play1()
{
  P10=0;
  P11=1;
}
void play2()
{
  P10=1;
  P11=0;
}
void play()
{
while ((SW==0)&&(m==3))
{
  P11=1;
  P10=0;
  delay(100);
  
  P11=0;
  P10=1;
  delay(100);
}
while ((SW==1)&&(m==6))
{
  P11=1;
  P10=0;
  delay(100);
  
  P11=0;
  P10=1;
  delay(100);
}

  
}

void key()
{
  if ((SW==0)&&(m==1))
  {
   m=1;
  }
  if ((SW==1)&&(m==1))
  {
   m=2;
  }
  if ((SW==0)&&(m==2))
  {
   m=3;
  }        
  if ((SW==1)&&(m==3))
  {
   m=4;n=1;
  }   
  if ((SW==0)&&(n==1))
  {
   m=5;n=2;
  }  
  if ((SW==1)&&(n==2))
  {
   m=6;n=3;
  }
  if ((SW==0)&&(n==3))
  {
   m=1;n=0;
  }  
}








void main()
{
  m=1;  
  P1M1=0X00;
  P1M0=0XFF;   
while(1)
{
  
  key();
  switch (m)
  {
   case 1: play1();break;
   case 2: play2();break;              
   case 3: play();break;
   
   case 4: play1();break;
   case 5: play2();break;              
   case 6: play();break;
   //default :m=1;
  }      
}
}

使用特权

评论回复
板凳
牧天尊| | 2019-7-15 14:03 | 只看该作者
仿真不等于实际状况

使用特权

评论回复
地板
叶春勇| | 2019-7-15 14:03 | 只看该作者
#define is_button_pressed() (SW==0)
#define is_button_pressed() (SW==1)
#define COMFIRM_TIME_SET 100
#define DELAY_SET 10000

volatile uint8_t key_counter=0;
volatile uint8_t filter_acc=0;
volatile uint16_t delay_acc=0;
void key(uint8_t *state)
{
        switch((*state))
        {
        case 0:
                //防抖
                if(is_button_pressed()) filter_acc++;
                else filter_acc=0;
                //按钮按下
                if(filter_acc>COMFIRM_TIME_SET)
                {
                        (*state)=1;
                        key_counter++;
                        filter_acc=0;
                }
                break;
        case 1:
                //防抖
                if(is_button_released()) filter_acc++;
                else filter_acc=0;
                //按钮释放
                if(filter_acc>COMFIRM_TIME_SET)
                {
                        (*state)=0;
                        key_counter++;
                        filter_acc=0;
                }
                break;
        }
}


void play(uint8_t *state)
{
        switch((*state))
        {
        case 0:
                P10=0;P11=1;
                break;
        case 1:
                P10=1;P11=1;
                break;
        case 2:
                P10=0;P11=1;
                if(++delay_acc>DELAY_SET)
                {
                        delay_acc=0;
                        (*state)=3;
                }
                break;
        case 3:
                P10=1;P11=0;
                if(++delay_acc>DELAY_SET)
                {
                        delay_acc=0;
                        (*state)=2;
                }
                break;
        }
}
你这个play函数卡循环,导致卡循环,给你个程序模板,你看看吧。

使用特权

评论回复
5
oufuqiang| | 2019-7-20 23:50 | 只看该作者
编程的问题就说编程问题,不要往芯片上推

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

72

帖子

1

粉丝