找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 1648|回復(fù): 8
收起左側(cè)

關(guān)于單片機(jī)C語言查表法按鍵自加LED循環(huán)點(diǎn)亮

[復(fù)制鏈接]
ID:849894 發(fā)表于 2024-1-31 15:17 | 顯示全部樓層 |閱讀模式
各位老師好,此程序一上電是最低位LED燈亮,按鍵按下去第二位LED燈亮,來回循環(huán).我想把它改成上電第一個LED燈不亮,有按鍵按下才開始亮第一個LED燈,應(yīng)怎么處理。

/*************  本程序功能說明  **************
單片機(jī)型號:適合STC8G系列型號單片機(jī)
晶振                        :內(nèi)部晶振11.0592或12MHz
復(fù)位                        :復(fù)位腳為IO口,用內(nèi)部自帶復(fù)位

注意:STC8全系列,初始化必須配置所有IO口,否則IO口不能正常使用

顯示效果:  演示移動點(diǎn)亮LED燈,采用位操作方法,查表方法實(shí)現(xiàn)
******************************************/
#include    "STC8G.h"                                    //包括了STC8G.H文件里面的內(nèi)容
#define     MAIN_Fosc       11059200L   //定義主時鐘
typedef     unsigned char   u8;         //為復(fù)雜的聲明定義簡單的別名
typedef     unsigned int    u16;        //為復(fù)雜的聲明定義簡單的別名
typedef     unsigned long   u32;        //為復(fù)雜的聲明定義簡單的別名

/******* 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);         //延時函數(shù)聲明
void IO_init_config(void);            //IO口初始化函數(shù)


/*------LED來回14次顯示表--------------*/
u8 code led_dis[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,
                                        0xbf,0xdf,0xef,0xf7,0xfb,0xfd};

/******************** 主函數(shù) **************************/

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];        //查表的內(nèi)容送到LED口顯示                                                                              
                LED_0 = LED_00;         //緩沖單元的內(nèi)容送到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;
        }
}

回復(fù)

使用道具 舉報

ID:883242 發(fā)表于 2024-1-31 18:20 | 顯示全部樓層
把主循環(huán)之前的ct=0;改成ct=-1;就行了。
回復(fù)

使用道具 舉報

ID:213173 發(fā)表于 2024-1-31 21:49 | 顯示全部樓層
/******************** 主函數(shù) **************************/
void main(void)
{
        IO_init_config();          //IO口初始化
        ct=0xff;
        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];//查表的內(nèi)容送到LED口顯示
                                LED_0 = LED_00;       //緩沖單元的內(nèi)容送到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;
                        }
                }
        }
}
回復(fù)

使用道具 舉報

ID:161164 發(fā)表于 2024-1-31 22:19 | 顯示全部樓層
/*------LED來回15次顯示表--------------*/
u8 code led_dis[]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,
                                        0xbf,0xdf,0xef,0xf7,0xfb,0xfd};
回復(fù)

使用道具 舉報

ID:1063029 發(fā)表于 2024-1-31 22:33 | 顯示全部樓層
初始化ct=14,在 數(shù)組后面加 0xff;
if(ct==14)           //自加14次
改為 if(ct>=14)           //自加14次
回復(fù)

使用道具 舉報

ID:807651 發(fā)表于 2024-2-1 08:45 | 顯示全部樓層
看你    if(ct==14)           //自加14次,
回復(fù)

使用道具 舉報

ID:807651 發(fā)表于 2024-2-1 08:45 | 顯示全部樓層
led_bit = led_dis[ct+1];        //查表的內(nèi)容送到LED口顯示                                            
回復(fù)

使用道具 舉報

ID:849894 發(fā)表于 2024-2-18 14:51 | 顯示全部樓層
各位老師好,謝謝你們的解答,已解決。
回復(fù)

使用道具 舉報

ID:1111239 發(fā)表于 2024-2-21 13:56 | 顯示全部樓層
主循環(huán)之前的ct改成1
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表