各位老师好,此程序一上电是最低位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;
}
}
|