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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2449|回復(fù): 10
收起左側(cè)

請(qǐng)問大佬們告知一下這個(gè)單片機(jī)程序怎么實(shí)現(xiàn)延時(shí)的?

[復(fù)制鏈接]
ID:712295 發(fā)表于 2020-11-3 20:25 | 顯示全部樓層 |閱讀模式
#include <REGX51.H>
#include <math.H>

#define FOSC 12000000L
#define T1MS (65536-FOSC/12/1000*10)   //10ms timer calculation method in 12T mode
#define PI 3.1415926   
#define On        0
#define Off        1


void Timer0_Init(void);
void LEDBlink(void);
unsigned int KeyScan(void);
#define LEDPORT P1
#define dx        (PI*2/100)
#define PWM_PERIOD        100
#define LEDNUM         8

sbit LED0 = P1^0;
sbit LED1 = P1^1;
sbit LED2 = P1^2;
sbit LED3 = P1^3;
sbit LED4 = P1^4;
sbit LED5 = P1^5;
sbit LED6 = P1^6;
sbit LED7 = P1^7;

sbit KEY1 = P2^0;
sbit KEY2 = P2^1;
unsigned char led_tab[8] = {
0XFE,0XFD,0XFB,0XF7,0XEF,0XDF,0XBF,0X7F};

unsigned int TimeTikTok = 0;
unsigned int TimeBase = 0;
void main(void)
{
        unsigned int i = 0;
        unsigned int keycount = 0;
        double x = 0.0;
        Timer0_Init();
        while(1)
        {        
                        if (TimeBase) 只有為1的時(shí)候會(huì)繼續(xù)
                        {
                                TimeBase = 0;     
                                TimeTikTok ++;if(TimeTikTok > 60000) TimeTikTok = 0;     //當(dāng)TimeBase=1時(shí),1%10=0.1
                                
                                if(! (TimeTikTok % 10)) //100ms     這是什么意思 如果0.1!=1成立?
                                {
                                                //LEDBlink();
                                }        

                                if(! (TimeTikTok % 20)) //200ms
                                {
                                                if(KeyScan() == 1)   
                                                        LED0 ^=1 ;
                                                if(KeyScan() == 2)  
                                                        LED1 ^=1 ;
                                }        
                                
                        }
                }

}     //時(shí)間表現(xiàn)在哪里,過了多久

void Timer0_Init(void)
{
    TMOD = 0x01;                    //set timer0 as mode1 (16-bit)
    TL0 = T1MS;                     //initial timer0 low byte
    TH0 = T1MS >> 8;                //initial timer0 high byte
    TR0 = 1;                        //timer0 start running
    ET0 = 1;                        //enable timer0 interrupt
    EA = 1;                         //open global interrupt switch
}
        //LEDPORT |= (0X01<<LEDX);
//unsigned int LEDX,unsigned int delay
void LEDBlink(void)
{
        static int statue = 0;
        
        switch (statue)
        {
                case 0:         LEDPORT = 0xFE;                statue = 1;                break;
                case 1:          LEDPORT = 0XFD;                statue = 2;          break;
                case 2:         LEDPORT = 0XFB;                statue = 3;                break;
                case 3:          LEDPORT = 0XF7;                statue = 4;          break;
                case 4:         LEDPORT = 0XEF;                statue = 5;                break;
                case 5:          LEDPORT = 0XDF;                statue = 6;          break;
                case 6:         LEDPORT = 0XBF;                statue = 7;                break;
                case 7:          LEDPORT = 0X7F;                statue = 0;          break;
        }
}

unsigned int KeyScan(void)
{
                static int statue = 0;
                unsigned int keyVal = 0;
                switch (statue)
                {
                                case 0:   statue = 1;                break;
                          case 1:
                                {
                                                if(!KEY1)          等價(jià)于KEY1=0                                                        keyVal = 1;
                                                if(!KEY2)                                                                keyVal = 2;        
                                                if((!KEY1) && (!KEY2))        keyVal = 3;                                       
                                                statue = 2;          break;
                                }         
                                case 2:         statue = 0;                break;
                }
                return keyVal;
}
/* Timer0 interrupt routine */
//unsigned int PWM_CHANGE_cnt = 0;
void TM0_isr() interrupt 1
{
               
    TL0 = T1MS;                     //reload timer0 low byte
    TH0 = T1MS >> 8;                //reload timer0 high byte
                TimeBase = 1;               

}

回復(fù)

使用道具 舉報(bào)

ID:406714 發(fā)表于 2020-11-3 20:32 | 顯示全部樓層
通過定時(shí)計(jì)數(shù)器中斷實(shí)現(xiàn)的
回復(fù)

使用道具 舉報(bào)

ID:836364 發(fā)表于 2020-11-3 20:58 | 顯示全部樓層
   if(! (TimeTikTok % 10)) //100ms     這是什么意思 如果0.1!=1成立?
//樓主這個(gè)%是取余
而且這個(gè)延時(shí)函數(shù)在你調(diào)用T0初始化函數(shù)void Timer0_Init(void)
{
    TMOD = 0x01;                    //set timer0 as mode1 (16-bit)
    TL0 = T1MS;                     //initial timer0 low byte
    TH0 = T1MS >> 8;                //initial timer0 high byte
    TR0 = 1;                        //timer0 start running
    ET0 = 1;                        //enable timer0 interrupt
    EA = 1;                         //open global interrupt switch
}
已經(jīng)開始了
回復(fù)

使用道具 舉報(bào)

ID:836364 發(fā)表于 2020-11-3 20:59 | 顯示全部樓層
不過我看不懂你那個(gè)#define FOSC 12000000L是啥意思,你程序上應(yīng)該是吧FOSC寫成一個(gè)數(shù)值型的呀,你這個(gè)L是啥意思
回復(fù)

使用道具 舉報(bào)

ID:320663 發(fā)表于 2020-11-3 23:42 | 顯示全部樓層
123456czst 發(fā)表于 2020-11-3 20:59
不過我看不懂你那個(gè)#define FOSC 12000000L是啥意思,你程序上應(yīng)該是吧FOSC寫成一個(gè)數(shù)值型的呀,你這個(gè)L是 ...

C語言知識(shí),長整型的意思,通俗來說就是說前面這個(gè)說很大
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2020-11-4 07:03 | 顯示全部樓層
        while(1)
        {        
                if (TimeBase) //中斷周期10ms標(biāo)志=1
                {
                        TimeBase = 0; //清0   
                        TimeTikTok++;
                        if(TimeTikTok > 60000) //限制計(jì)數(shù)范圍0~60000
                                TimeTikTok = 0;
                        if(!(TimeTikTok % 10)) //"%"為取余數(shù)符號(hào)  此句意思:如果TimeTikTok除以10的余數(shù)為0滿足判斷條件
                        //這樣寫容易理解
                        if(TimeTikTok%10==0)   //  花括號(hào)內(nèi)語句間隔100ms執(zhí)行一次
                        {
                                //LEDBlink();
                        }        

                        if(!(TimeTikTok % 20)) //  花括號(hào)內(nèi)語句間隔200ms執(zhí)行一次
                        {
                                if(KeyScan() == 1)   
                                        LED0 ^=1 ;
                                if(KeyScan() == 2)  
                                        LED1 ^=1 ;
                        }        
                }
        }
回復(fù)

使用道具 舉報(bào)

ID:420836 發(fā)表于 2020-11-4 09:56 | 顯示全部樓層
每次計(jì)數(shù)到10的倍數(shù)時(shí)都滿足  if(!(TimeTikTok % 10)) 條件。
回復(fù)

使用道具 舉報(bào)

ID:712295 發(fā)表于 2020-11-4 10:21 | 顯示全部樓層
wulin 發(fā)表于 2020-11-4 07:03
while(1)
        {        
                if (TimeBase) //中斷周期10ms標(biāo)志=1

你好,請(qǐng)問這個(gè)怎么使得這個(gè)花括號(hào)的間隔時(shí)間變快
回復(fù)

使用道具 舉報(bào)

ID:712295 發(fā)表于 2020-11-4 10:23 | 顯示全部樓層
TTQ001 發(fā)表于 2020-11-4 09:56
每次計(jì)數(shù)到10的倍數(shù)時(shí)都滿足  if(!(TimeTikTok % 10)) 條件。

你好,請(qǐng)問一下怎么能使得這個(gè) 計(jì)數(shù)到10的倍數(shù)的時(shí)間快一點(diǎn)
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2020-11-4 11:05 | 顯示全部樓層
zxcvgfd 發(fā)表于 2020-11-4 10:21
你好,請(qǐng)問這個(gè)怎么使得這個(gè)花括號(hào)的間隔時(shí)間變快

if(TimeTikTok%x==0) //   x=60000的整公約數(shù)都行,延時(shí)時(shí)間=x*10ms。
{
回復(fù)

使用道具 舉報(bào)

ID:838718 發(fā)表于 2020-11-4 14:47 | 顯示全部樓層
沒有看到延時(shí)的邏輯,只是滿足定時(shí)器計(jì)數(shù)到一定數(shù)目時(shí)才進(jìn)入key scan
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美色视频免费 | 欧美在线国产精品 | 91精品国产91久久综合桃花 | av超碰 | 中文字幕在线观看日韩 | 黄色片视频 | aa级毛片毛片免费观看久 | 一区二区三区四区av | 伊人网站在线观看 | 色在线免费视频 | 国产7777 | 久久久久av| 黄a免费看 | 欧美精品欧美精品系列 | 日韩欧美在线一区 | 99久久婷婷国产亚洲终合精品 | 在线91| 欧美精品一区二区三区四区 在线 | 国产成人一区二 | 在线视频一区二区 | 久久精品91久久久久久再现 | 8x国产精品视频一区二区 | 在线精品亚洲欧美日韩国产 | 欲色av| 蜜臀久久99精品久久久久久宅男 | 亚洲国产成人精品女人久久久野战 | 欧美日韩一区二区视频在线观看 | 亚洲v日韩v综合v精品v | 亚洲福利在线观看 | 亚洲91| 亚洲视频一区在线观看 | 日韩中文字幕第一页 | 国产在线a | 精品人伦一区二区三区蜜桃网站 | 欧美日韩中文在线 | 一区二区三区免费看 | 日本视频免费观看 | 91成人在线视频 | 亚洲电影第1页 | 一区二区久久 | 这里有精品|