各位老師好,此程序一上電是最低位LED燈亮,按鍵按下去第二位LED燈亮,來回循環.我想把它改成上電第一個LED燈不亮,有按鍵按下才開始亮第一個LED燈,應怎么處理。
/************* 本程序功能說明 **************
單片機型號:適合STC8G系列型號單片機
晶振 :內部晶振11.0592或12MHz
復位 :復位腳為IO口,用內部自帶復位
注意:STC8全系列,初始化必須配置所有IO口,否則IO口不能正常使用
顯示效果: 演示移動點亮LED燈,采用位操作方法,查表方法實現
******************************************/
#include "STC8G.h" //包括了STC8G.H文件里面的內容
#define MAIN_Fosc 11059200L //定義主時鐘
typedef unsigned char u8; //為復雜的聲明定義簡單的別名
typedef unsigned int u16; //為復雜的聲明定義簡單的別名
typedef unsigned long u32; //為復雜的聲明定義簡單的別名
/******* IO口位定義 *******/
sbit LED_0 = P3^1;
sbit LED_1 = P3^2;
sbit LED_2 = P3^3;
sbit LED_3 = P3^4;
sbit LED_4 = P3^5;
sbit LED_5 = P3^6;
sbit LED_6 = P3^7;
sbit LED_7 = P1^0;
sbit K1 = P1^7;
/*------定義寄存器變量---------------*/
u8 ct;
/*------定義位寄存器變量---------------*/
u8 bdata led_bit; //把不在一組IO口,整合一組IO口,便于操作
sbit LED_00 = led_bit^0;
sbit LED_01 = led_bit^1;
sbit LED_02 = led_bit^2;
sbit LED_03 = led_bit^3;
sbit LED_04 = led_bit^4;
sbit LED_05 = led_bit^5;
sbit LED_06 = led_bit^6;
sbit LED_07 = led_bit^7;
void Delay1ms(u16 xms); //延時函數聲明
void IO_init_config(void); //IO口初始化函數
/*------LED來回14次顯示表--------------*/
u8 code led_dis[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,
0xbf,0xdf,0xef,0xf7,0xfb,0xfd};
/******************** 主函數 **************************/
void main(void)
{
IO_init_config(); //IO口初始化
ct=0;
while(1)
{
if(K1==0) //判斷按鍵是否有按下
{
Delay1ms(20); //按鍵按下消抖
if(K1==0) //再次判斷按鍵是否有按下
{
ct++; //按建有效變量自加1
if(ct==14) //自加14次
ct=0; //變量清0
while(!K1); //按鍵松手消抖
}
}
led_bit = led_dis[ct]; //查表的內容送到LED口顯示
LED_0 = LED_00; //緩沖單元的內容送到LED口顯示
LED_1 = LED_01;
LED_2 = LED_02;
LED_3 = LED_03;
LED_4 = LED_04;
LED_5 = LED_05;
LED_6 = LED_06;
LED_7 = LED_07;
}
}
|