我这迟来的单片机编程挑战

简介:
看了挑战后,就想看看自己是否有60%了。但想好久都没有写,因c语言很久没用了,也因思路不清就放下了,看了下大虾们推荐的状态机,有了点思路。但最近要找实习单位就一直没写,今天突然想起就试试,调试下行了。哈哈。
       还有我最近一直纠结于是选PLC还是单片机发展。不知道该走那条路呀?选择单片机,下学期就要实习了,已没时间深入了。工作后··········


//----------------------------------------
//第一个按键按下去时候,第一个LED以10Hz频率闪烁,
//再次按下时候,熄灭,再次按下时候,闪烁,依次循环。
//第二个按键按下去等到放开时候,第二个LED以100hz频率闪烁。
//再次按下放开,熄灭,第三次按下放开,闪烁,依次循
//第三个按键按下去时候,第三个Led
//以50Hz频率闪烁,放开时候LED熄灭。
//---------------------------------------- 
#include<reg51.h>
#define uint unsigned  int
#define uchar unsigned  char
uint ky1=0; //按键1状态变量,初态为0
uint ky2=0; //按键2状态变量
uint ky3=0; //按键3状态变量
uint shi_ms=0; //计时变量
sbit led1=P3^0;//led灯
sbit led2=P3^1;
sbit led3=P3^2;
sbit key1=P1^0;//按键
sbit key2=P1^1;
sbit key3=P1^2;
bit ld1=0;//led1闪烁标志,为1时led1闪烁

bit ld2=0;//led2闪烁标志,为1时led2闪烁

bit ld3=0;//led3闪烁标志,为1时led3闪烁


void dingshi0_csh()         //定时器0初始化
{
EA=1;
ET0=1;
TR0=1;
TMOD = 0x01;          //设定时器0功能为计时
TH0=0xfc;                 //1ms中断一次
TL0=0x18;

}
void main()

  dingshi0_csh();//定时器0初始化
while(1)          //下面是按照状态机的思想编写的
{
   switch(ky1)        //按键1的状态处理
   {
    case 0:                //在初态中等待按键按下
     {
          if(0==key1)
          {ky1=1;}         //按键按下转状态1
     } break;
    case 1:                  //在状态1中消抖
     {
           //延时未写
           if(0==key1)        //消抖后按键是按下
           {                        
            ky1=2;                //状态转移
                ld1=~ld1;  //闪烁处理,原是熄灭,闪烁;原闪烁则熄灭
            led1=1;           //让灯熄灭,保证按下按键后灯是熄灭的
           }
           else                 //消抖后按键没有按下
           ky1=0;         //返回初状态
     }  break;
    case 2:                 //在状态2中等待按键释放
     {
           if(1==key1)
           {
           ky1=3;
           }
     }  break;
    case 3:                //判断按键是否释放
     {
            //延时
           if(1==key1) //按键释放,跳状态0等待下一次按键
           {
           ky1=0;
           }
           else                   //按键没释放,跳状态2等待按键释放
           ky1=2;
     } break;
   }
   switch(ky2)
   {
    case 0:
     {
          if(0==key2)
          {
           ky2=1;
          }
     } break;
    case 1:
     {
           if(0==key2)
          {
           ky2=2;
          }
          else
           ky2=0;
     }        break;
    case 2:
     {
          if(1==key2)
          {
           ky2=3;
          }
     }
    case 3:
     {
          if(1==key2)
          {
           ky2=0;
           ld2=~ld2;
           led2=1;
          }
          else
           ky2=2;
     } break;
   }
   switch(ky3)
   {
    case 0:
     {
          if(0==key3)
          {
           ky3=1;
          }
     } break;
    case 1:
     {
           if(0==key3)
          {
           ky3=2;
           ld3=1;
          }
          else
           ky3=0;
     }
    case 2:
     {
          if(1==key3)
          {
           ky3=3;
          }
     } break;
    case 3:
     {
        if(1==key3)
          {
           ky3=0;
           ld3=0;
           led3=1;
          }
          else
           ky3=2;
     } break;
   }


}

void Timer0Interrupt() interrupt 1
{
    TH0 = 0x0FC;
    TL0 = 0x18;
        shi_ms++;
        if(0==(shi_ms%100)&&ld1==1)//0.1s并来了led1标志位ld1为1
        {                                                   //led1以10HZ频率闪烁
           led1=~led1;
        }
    if(0==(shi_ms%10)&&ld2==1)//0.01s并来了led1标志位ld1为1
        {                                                   //led1以100HZ频率闪烁
           led2=~led2;
        }
         if(0==(shi_ms%20)&&ld3==1)//0.02s并来了led1标志位ld1为1
        {                                                   //led1以50HZ频率闪烁

           led3=~led3;
        }
        if(200==shi_ms)
        {
         shi_ms=0;
        }
}


搜狗截图_2012-05-18_21-55-24.png (27.44 KB, 下载次数: 4)

搜狗截图_2012-05-18_21-55-24.png

目录
相关文章
|
数据采集 数据处理 C语言
单片机:探索其原理、应用与编程实践
单片机:探索其原理、应用与编程实践
381 1
|
算法 定位技术 C语言
51单片机实现俄罗斯方块游戏编程
设计了一款基于AT89C51单片机的俄罗斯方块游戏机,使用LCD12864液晶显示,按键控制方块移动与变形。游戏中,7种不同形状的方块随机下落,填满一行得分,满屏则游戏结束。包含电源、单片机最小系统、LCD和按键模块的硬件电路通过Proteus进行了仿真,展示了游戏运行、得分和计时等。代码部分展示了检查碰撞和更新地图的函数。
386 1
|
传感器 人工智能 物联网
单片机:编程实践与应用探索
单片机:编程实践与应用探索
260 4
|
存储 传感器 数据处理
单片机编程入门与实践
单片机编程入门与实践
249 2
|
传感器 Windows
关于单片机编程里面调用sprintf死机的解决方法及原因分析
关于单片机编程里面调用sprintf死机的解决方法及原因分析
739 0
|
存储 C语言 内存技术
单片机原理与应用以及C51编程技术——data,idata,xdata,pdata,code
单片机原理与应用以及C51编程技术——data,idata,xdata,pdata,code
699 0
|
编译器 C语言
单片机原理与应用以及C51编程技术——C51扩展数据类型(bit、sbit、sfr、sfr16)
单片机原理与应用以及C51编程技术——C51扩展数据类型(bit、sbit、sfr、sfr16)
1086 0
单片机原理与应用以及C51编程技术——C51扩展数据类型(bit、sbit、sfr、sfr16)
|
存储 芯片
单片机原理与应用以及C51编程技术——硬件体系结构梳理(下)
单片机原理与应用以及C51编程技术——硬件体系结构梳理(下)
977 0
单片机原理与应用以及C51编程技术——硬件体系结构梳理(下)
|
存储 算法 内存技术
单片机原理与应用以及C51编程技术——硬件体系结构梳理(上)
单片机原理与应用以及C51编程技术——硬件体系结构梳理(上)
1354 0
单片机原理与应用以及C51编程技术——硬件体系结构梳理(上)
单片机:红外遥控实验(内含红外遥控介绍+硬件原理+软件编程+配置环境)
单片机:红外遥控实验(内含红外遥控介绍+硬件原理+软件编程+配置环境)
514 0
单片机:红外遥控实验(内含红外遥控介绍+硬件原理+软件编程+配置环境)