[STC单片机] STC单片机 啥情况

[复制链接]
775|7
 楼主 | 2019-7-15 11:58 | 显示全部楼层 |阅读模式
弄了一个开关 写了个程序实现3种效果,  仿真的时候没毛病烧写进去就不对,   ,上电读取IO状态 为0显示...为1显示...开关关闭显示1...打开显示2....再关闭则显示3
程序代码下边贴上

使用特权

评论回复
 楼主 | 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 | 显示全部楼层
  1. #define is_button_pressed() (SW==0)
  2. #define is_button_pressed() (SW==1)
  3. #define COMFIRM_TIME_SET 100
  4. #define DELAY_SET 10000

  5. volatile uint8_t key_counter=0;
  6. volatile uint8_t filter_acc=0;
  7. volatile uint16_t delay_acc=0;
  8. void key(uint8_t *state)
  9. {
  10.         switch((*state))
  11.         {
  12.         case 0:
  13.                 //防抖
  14.                 if(is_button_pressed()) filter_acc++;
  15.                 else filter_acc=0;
  16.                 //按钮按下
  17.                 if(filter_acc>COMFIRM_TIME_SET)
  18.                 {
  19.                         (*state)=1;
  20.                         key_counter++;
  21.                         filter_acc=0;
  22.                 }
  23.                 break;
  24.         case 1:
  25.                 //防抖
  26.                 if(is_button_released()) filter_acc++;
  27.                 else filter_acc=0;
  28.                 //按钮释放
  29.                 if(filter_acc>COMFIRM_TIME_SET)
  30.                 {
  31.                         (*state)=0;
  32.                         key_counter++;
  33.                         filter_acc=0;
  34.                 }
  35.                 break;
  36.         }
  37. }


  38. void play(uint8_t *state)
  39. {
  40.         switch((*state))
  41.         {
  42.         case 0:
  43.                 P10=0;P11=1;
  44.                 break;
  45.         case 1:
  46.                 P10=1;P11=1;
  47.                 break;
  48.         case 2:
  49.                 P10=0;P11=1;
  50.                 if(++delay_acc>DELAY_SET)
  51.                 {
  52.                         delay_acc=0;
  53.                         (*state)=3;
  54.                 }
  55.                 break;
  56.         case 3:
  57.                 P10=1;P11=0;
  58.                 if(++delay_acc>DELAY_SET)
  59.                 {
  60.                         delay_acc=0;
  61.                         (*state)=2;
  62.                 }
  63.                 break;
  64.         }
  65. }
复制代码
你这个play函数卡循环,导致卡循环,给你个程序模板,你看看吧。

使用特权

评论回复
| 2019-7-15 16:22 | 显示全部楼层
STC原厂,可以加QQ:2269694595

使用特权

评论回复
| 2019-7-16 15:12 | 显示全部楼层
需要什么设计方面的帮助么,QQ754647555

使用特权

评论回复
| 2019-7-18 23:05 | 显示全部楼层

淘宝有售

淘宝有售

淘宝有售

使用特权

评论回复
| 2019-7-20 23:50 | 显示全部楼层
编程的问题就说编程问题,不要往芯片上推

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

关闭

热门推荐上一条 /3 下一条

在线客服 快速回复 返回顶部 返回列表