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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1512|回復: 8
收起左側

關于單片機C語言查表法按鍵自加LED循環點亮

[復制鏈接]
ID:849894 發表于 2024-1-31 15:17 | 顯示全部樓層 |閱讀模式
各位老師好,此程序一上電是最低位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;
        }
}

回復

使用道具 舉報

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

使用道具 舉報

ID:213173 發表于 2024-1-31 21:49 | 顯示全部樓層
/******************** 主函數 **************************/
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];//查表的內容送到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;
                        }
                }
        }
}
回復

使用道具 舉報

ID:161164 發表于 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};
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

ID:1111239 發表于 2024-2-21 13:56 | 顯示全部樓層
主循環之前的ct改成1
回復

使用道具 舉報

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

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久精品国产99国产精品 | 成人激情视频免费观看 | 亚洲精品毛片av | 中文字幕一区二区三区四区五区 | 国产精品免费一区二区三区 | 国产片网站 | 日本精品一区二区三区视频 | 亚洲国产成人在线视频 | 成人福利片 | 亚洲精品粉嫩美女一区 | 国产一区免费 | 国产成人精品视频 | 日韩国产黄色片 | 午夜欧美一区二区三区在线播放 | 99re视频| 亚洲国产精品区 | 欧美成人一区二免费视频软件 | 日产精品久久久一区二区福利 | 日本超碰 | 一区二区三区四区在线视频 | 亚洲成人综合社区 | 爱爱爱av | 精品久久久久久亚洲精品 | 伊人久久精品一区二区三区 | 瑟瑟免费视频 | 欧美一区二区在线观看 | 国产精品免费在线 | www.操.com| 日韩欧美一区二区三区免费观看 | 国产高清在线观看 | 国产精品一区二区av | 午夜私人影院在线观看 | 91精品国产91久久久久久 | 亚洲美女网站 | 羞羞视频网页 | 看羞羞视频免费 | 日韩精品极品视频在线观看免费 | 黄色网址在线免费观看 | 久久国产精品一区 | 久久久蜜桃一区二区人 | 国产一区欧美一区 |