久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

七彩燈綜合C程序(我第一個案子)

作者:佚名   來源:本站原創   點擊數:  更新時間:2012年07月20日   【字體:

/*此程序是一款普通的彩燈,它的功能主要有四種模式:
第一種模式:開機四種顏色以0.5秒速度循環1次,然后
在白顏色上停止循環,即顯示白光
第二種模式:按下功
能鍵后,它以1秒速度四種顏色不停的循環
第三種模式:
當按鍵按下后,它會記住第二種模式的顏色,比如第二種
模式現在亮得是綠色,你按下按鍵時,它會先閃一下,然
后在綠顏色上停下來
第四模式:當你再按下開關時,它
自動回到模式一下,(當然還可以寫出三種顏色)
 本程序是第一個版本,第二版功能更強大參見:
http://www.zg4o1577.cn/mcu/1531.html  */

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit RJ=P2^5;//紅燈IO口
sbit GJ=P2^6;//綠燈IO口
sbit BJ=P2^7;//蘭燈IO口
sbit key=P1^4;//按鍵IO口
uchar ding3,yin,x;//分別為定時器變量,標志位變量,以及顏色標志位變量
bit a=1,b,c;//分別為模式1.2.3標志位
/*******************************/
/***********延時子程序***********/
/*******************************/
void delay(uint z)
{
 uint x,y;
 for(x=100;x>0;x--)
 for(y=z;y>0;y--);
}
/*******************************/
/********按鍵處理子程序********/
/*******************************/
void sk()
{
 switch(yin)//執行一鍵多功能程序
 {
  case 0:if(key==0)//如果0與yin比較相等,則執行break前的所有內容
  {
   delay(100);//延時
   if(key==0)//再次確認是否有按下
   {
    yin++;//將變量加1,此句很重要,作用是以使下次按下時好執行下一開關語句
    a=0;//將a變為0
    c=0;
    b=1;//將b變為1,即打開按鍵程序中的第二段程序
    x=0;//清掉顏色計數變量,以便它從紅色開始循環
    while(!key);//按鍵放開了嗎?
   }
  }
  break;//退出開關語句
  case 1: if(key==0)//如果1與yin比較相等,則執行大括號內容
  {
   delay(100);//延時
   if(key==0)//再次確認是否有按下
   {
    yin++;//將變量加1,此句很重要,作用是以使下次按下時好執行下一開關語句
    b=0;
    c=1;//打開第三種模式標志位,即鎖定狀態
    a=0;
    x=0;//清掉顏色計數變量,以便它從紅色開始循環
    while(!key);//按鍵放開了嗎?
   }
  }
  break;//退出開關語句
  case 2: if(key==0)//如果2與yin比較相等,則執行大括號內容
  {
   delay(100);//延時
   if(key==0)//再次確認是否有按下
   {
    b=0;//將b變為0,即關閉上一次功能
    c=0;//關閉上前面的功能
    a=1;//打開第1次功能,即0.5秒循環閃爍
    yin=0;
    x=0;//清掉顏色計數變量,以便它從紅色開始循環
    while(!key);//按鍵放開了嗎?
   } 
  }
  break;//退出開關語句
 }
}
/*******************************/
/*******三種模式顯示子程序******/
/*******************************/
void xian()
{
 uchar m;//模式3變量
 if(a!=0)//第一種模式以0.5秒速度循環閃爍一次,然后在白光處停下來
 {
  if(ding3>=10)//定時器到了0.5秒嗎?
  {
   ding3=0;
   x++;//將標志位加1,以便進入下一種顏色
   switch(x)
   {
    case 1:RJ=1;GJ=0;BJ=0;//亮紅光  
    break;
    case 2:RJ=0;GJ=1;BJ=0;//亮綠光  
    break;
    case 3:RJ=0;GJ=0;BJ=1;//亮蘭光  
    break;
    case 4:RJ=1;GJ=1;BJ=1;a=0;//亮白光,//將標志位a清0,以便再次循環  
    break;
   }

  }
 }
 if(b!=0)//第二種模式以1秒速度一直循環閃爍。
 {
  if(ding3>=20)
  {
   ding3=0;
   x++;
   switch(x)
   {
    case 1:RJ=1;GJ=0;BJ=0;m=x;//將x變量內給m保存起來,以便進入模式三時能準確的鎖定一種狀態
    break;
    case 2:RJ=0;GJ=1;BJ=0;m=x;
    break;
    case 3:RJ=0;GJ=0;BJ=1;m=x;
    break;
    case 4:RJ=1;GJ=1;BJ=1;m=x;x=0;
    break;
   }
  }
 }
 if(c!=0)//第三種模式記住模式二時按鍵按下的顏色,然后鎖定。
 {
  RJ=0;GJ=0;BJ=0;
  delay(550);
  switch(m)//判斷上一次模式三的狀態,然后確定顯示哪種顏色
  {
   case 1:RJ=1;GJ=0;BJ=0;
   break;
   case 2:RJ=0;GJ=1;BJ=0;
   break;
   case 3:RJ=0;GJ=0;BJ=1;
   break;
   case 4:RJ=1;GJ=1;BJ=1;
   break;
  }
  c=0;//將標志位清0,以便再次循環
 }
}
/*******************************/
/*************主程序************/
/*******************************/
void main()
{
 RJ=0;//將R LED關閉
 GJ=0;//將G LED關閉
 BJ=0;//將B LED關閉
 TMOD=0X01;//寄存器工作方式
 EA=1;//開總中斷
 TR0=1;//開定時器
 ET0=1;//開定時器中斷
 TH0=(65536-50000)/256;//賦值給高位
 TL0=(65536-50000)%256;//賦值給低位
 while(1)
 {
  sk();//調用按鍵子程序
  xian();//調用顯示子程序
 }   
}
void zhong() interrupt 1//T1中斷服務程序
{
 TH0=(65536-50000)/256;//賦值給高位
 TL0=(65536-50000)%256;//賦值給低位
 ding3++;//將按鍵計數器加1
}

關閉窗口

相關文章

主站蜘蛛池模板: 亚洲欧美国产一区二区三区 | 中文字幕视频在线 | 亚洲欧美日韩精品久久亚洲区 | 中文字幕亚洲欧美 | 精品一区二区久久久久久久网站 | 成人在线看片 | av片毛片| 精品久久久久久亚洲综合网站 | 日韩国产欧美视频 | 午夜a级理论片915影院 | 曰批视频在线观看 | 日本韩国欧美在线观看 | 亚洲天堂免费在线 | 最新中文字幕一区 | www.日韩 | 黄网站在线播放 | 久久不射电影网 | 亚洲综合视频 | 一区日韩 | 亚洲国产精品久久 | 欧美亚洲高清 | 天堂精品视频 | 中文字幕一区二区三区精彩视频 | 九九热在线视频观看这里只有精品 | 国产精品视频导航 | 午夜在线免费观看视频 | 久久高清亚洲 | 中国一级毛片免费 | 日韩视频在线一区 | 爽爽免费视频 | 久99久视频 | 亚洲免费视频在线观看 | 亚洲精品粉嫩美女一区 | 欧美午夜精品久久久久免费视 | 日韩中文字幕在线播放 | 亚洲欧美综合精品久久成人 | 日本特黄a级高清免费大片 成年人黄色小视频 | 成人免费视频网 | 羞羞色网站| 国产免费一区二区 | 国产午夜精品一区二区三区嫩草 |