两个吃奶一个添下面视频_人妻第一页香蕉网_欧美xxxx少妇_妺妺窝人体色www婷婷

延時函數(shù)雖然很少使用了,但是有時需要測試代碼的時候還會派上用場,所以也把它放進“function.c”文件中。

 

1.function.c的代碼

#include <reg52.h> 
#include <function.h> 
 
u8 code LedChar[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};//數(shù)碼管狀態(tài)值初始化
u8 LedBuff[6]={0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};//初始化數(shù)碼管顯示緩存區(qū)
 
void delay_ms(u16 x)
{
    u16 i,j;
    if(x==1000)
    {
        for(i=0;i<19601;i++)//延時1s
        {
            for(j=5;j>0;j--);
        }
    }
    else while(x--)for(j=115;j>0;j--);
}
 
void LED_Init()
{
    P1|=0x0E;//讓P1.1,P1.2,P1.3強制輸出1
    P1&=0xEE;//讓P1.0和P1.4強制輸出0
}
 
void SEG_Scan()
{
    static u8 i = 0;     
    P0 = 0xFF;            //端口狀態(tài)全部熄滅數(shù)碼管里的LED達(dá)到刷新作用
    P1 = (P1 & 0xF8) | i; //i等于0時,就是“ADDR2=0; ADDR1=0; ADDR0=0;”,i等于1時,就是“ADDR2=0; ADDR1=0; ADDR0=1;”,以此類推
    P0 = LedBuff[i];      //6個緩沖區(qū)的值輪流賦給P0
    i++;
    if(i>=6)i=0;          //讓i在0~5之間循環(huán)變化
}
 
void ShowNumber(u32 num)
{
    char i;//取值范圍-128~127
    u8 buf[6];    
    for (i=0; i<6; i++)    //把長整型數(shù)轉(zhuǎn)換為6位十進制的數(shù)組
    {
        buf[i] = num % 10;
        num = num / 10;    //舍掉個位數(shù),重新裝載
    }
    for (i=5; i>=1; i--)   //從最高位起,遇到0填充不顯示的代碼,遇到非0則退出循環(huán)
    {
        if (buf[i] == 0)
            LedBuff[i] = 0xFF;
        else
            break;
    }
    for ( ; i>=0; i--)     //剩余低位都如實轉(zhuǎn)換為數(shù)碼管顯示字符
    {
        LedBuff[i] = LedChar[buf[i]];
    }
}

 

2.function.h的代碼

#ifndef __FUNCTION_H__
#define __FUNCTION_H__
 
sbit BEEP  = P1^6;
sbit LED2  = P0^0;
sbit LED3  = P0^1;
sbit LED4  = P0^2;
sbit LED5  = P0^3;
sbit LED6  = P0^4;
sbit LED7  = P0^5;
sbit LED8  = P0^6;
sbit LED9  = P0^7;
typedef unsigned char  u8;   //對數(shù)據(jù)類型進行聲明定義
typedef unsigned int  u16;
typedef unsigned long u32;
extern  u8 LedBuff[6];       //對數(shù)碼管緩存區(qū)進行外部聲明
extern  u8 code LedChar[16]; //對數(shù)碼管真值表進行外部聲明
 
//只要在“function.c”文件中封裝有的函數(shù)都需要在頭文件中聲明一下
void delay_ms(u16 x);
void LED_Init();
void SEG_Scan();
void ShowNumber(u32 num);
 
#endif


編程界面圖片

多文件5 


3.main.c文件代碼

有了“function.c”和“function.h”,以后我們提供的代碼就精簡的很多了,這里用一小段代碼測試一下,main.c文件加入測試代碼,感受一下這種模塊化編程的魅力。

#include <reg52.h> 
#include <function.h>

void main()
{  
    u16 i,x,NUM=12345;
    LED_Init();//初始化LED硬件模塊
    
    LED2=0;LED9=0;
    delay_ms(100);
    LED3=0;LED8=0;
    delay_ms(100);
    LED4=0;LED7=0;
    delay_ms(100);
    LED5=0;LED6=0;
    delay_ms(100);
    
    for(i=0;i<5000;i++)//蜂鳴器響一下
    {
        BEEP=!BEEP;
        for(x=0;x<30;x++);
    }
    ShowNumber(NUM);//更新緩存區(qū)的內(nèi)容,首次顯示12345在數(shù)碼管上
    while(1)
    {     
        SEG_Scan();
        i++;
        if(i>=8000)//隔一段時間更新數(shù)碼管顯示的內(nèi)容
        {
            i=0;
            ShowNumber(NUM++);
        }   
    }
}

數(shù)碼管在數(shù)字變化的時候會微閃爍是因為執(zhí)行“ShowNumber(NUM++);”花費的時間過多導(dǎo)致沒能快速切換三八譯碼器IO端口的輪流輸出,這個問題我們后面再講解。

點贊(0)

C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點擊了解:

一點編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程

解決困擾你多年的C語言疑難雜癥特性的C語言進階課程

從零到寫出一個爬蟲的Python編程課程

只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程

信息學(xué)奧賽或C++選手的 必學(xué)C++課程

藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程

手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程

Dotcpp在線編譯      (登錄可減少運行等待時間)