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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

51單片機如何用定時中斷代替延時

查看數(shù): 4929 | 評論數(shù): 5 | 收藏 0
關(guān)燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發(fā)布時間: 2020-5-30 17:30

正文摘要:

//用計數(shù)器統(tǒng)計的數(shù)量,用定時器在數(shù)碼管上顯示數(shù)量,用外部中斷清空 //師傅的意思是想讓我們把顯示函數(shù)丟到中斷里邊好從delay中解脫出來,可樓主太菜了,悟不到555 #include<reg51.h> #include<stdio.h> ...

回復

ID:765181 發(fā)表于 2020-5-31 19:06
gxslxxm 發(fā)表于 2020-5-30 22:07
很久項目不用io口掃數(shù)碼管了。有點不知道怎么說。
簡單說:
1:io口掃描數(shù)碼管要注意是掃描的時間間隔。
...

謝謝您的回復,我另一個pwm可調(diào)占空比的程序數(shù)碼管確實有閃爍。
ID:213173 發(fā)表于 2020-5-30 22:43

沒有必要把顯示程序放在中斷,稍微改一下即可不用delay。

  1. #include<reg51.h>
  2. #include<stdio.h>
  3. unsigned char i;
  4. //sbit relay = P1^0;
  5. unsigned char code nondis[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0-9
  6. //延時
  7. /*
  8. void delay(unsigned int n)
  9. {
  10.         unsigned int i=0,j=0;
  11.         for(i=0;i<n;i++)
  12.                 for(j=0;j<120;j++);
  13. }*/
  14. //顯示函數(shù)
  15. void display()
  16. {
  17.         P2=0xff;//消隱
  18.         if(i==0)
  19.         {
  20.                 P0=0x20;
  21.                 P2=nondis[TL0/100%10];//百位
  22.         }
  23.         if(i==1)
  24.         {
  25.                 P0=0x40;
  26.                 P2=nondis[TL0/10%10];//十位
  27.         }
  28.         if(i==2)
  29.         {
  30.                 P2=nondis[TL0%10];//個位
  31.                 P0=0x80;
  32.         }
  33.         i++;
  34.         i%=3;
  35. }

  36. void main(void)
  37. {
  38. //        P0=0x80;
  39.         TMOD = 0x06;
  40.         TH0 = 0;//9
  41.         TL0 = 0;//9
  42.         TR0 = 1;
  43.         EA = 1;
  44. //        ET0 = 1;
  45.         EX0 = 1;
  46.         IT0 = 1;
  47.         ET0 = 0;
  48.         while(1)
  49.         {
  50.                 display();//顯示函數(shù)
  51.         }
  52. }

  53. void int0() interrupt 0 // 清空
  54. {
  55.         TL0=0;
  56. }

  57. //void counter1() interrupt 1
  58. //{
  59. //        relay = ~relay;
  60. //}

復制代碼



ID:162664 發(fā)表于 2020-5-30 22:07
很久項目不用io口掃數(shù)碼管了。有點不知道怎么說。
簡單說:
1:io口掃描數(shù)碼管要注意是掃描的時間間隔。
滿足掃描間隔的前提下,如果主循環(huán)里有ALU占用時間過長的函數(shù),那么數(shù)碼管掃描的程序放到中斷里掃描來滿足掃描時間的間隔。(假設(shè)在突發(fā)情況下,一個模擬iic的流程可能會占用5ms時間,那么,有可能就會因為這個導致數(shù)碼管亮度異常或者閃爍)
2:看了一眼程序,改進的程序中放在中斷中的程序已經(jīng)把每一位的掃描分時出來了。如果時序沒問題是可以的。修改意見:定時器的時間注釋出來;if 改成 siwtch 語句(我覺得相對直觀);電路有問題,一般不這么設(shè)計,至于為什么自己去看看三極管一般怎么用。
ID:765181 發(fā)表于 2020-5-30 18:41
//按普中的視頻改了改不知道行不行
#include<reg51.h>
#include<stdio.h>
unsigned char dis;
//sbit relay = P1^0;
unsigned char code nondis[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0-9

                //定時器1初始化
                void timerinit()
                {
                TMOD|=0X10;
                TH1=0xFC;
                TL1=0x18;
                ET1=1;
                EA=1;
                TR1=1;
                }
                       
                        void main(void)
                        {
                                        P0=0x80;
                                        EA = 1;
                                        ET0 = 1;
                                        EX0 = 1;
                                        IT0 = 1;
                                        ET0 = 0;
                                        TMOD = 0x06;
                                        TH0 = 0;//9
                                        TL0 = 0;//9
                                        TR0 = 1;
                        timerinit();
                                while(1);
                       
                        }

void int0() interrupt 0        // 清空
                        {
                        TL0 = 0 ;
                        }

//void counter1() interrupt 1
//{
//        relay = ~relay;
//}
void Time1() interrupt 3        // 清空
                        {
                        static unsigned short i;
                        unsigned char gewei,shiwei,baiwei;
                          
                                baiwei=TL0/100;
                                gewei=TL0%10;
                                shiwei=(TL0/10)%10;
                       
                        TH1=0xFC;
                        TL1=0x18;
                        i++;
                        if(i==10)
                        {
                          
                                  P2=0xff;       
                          P2=nondis[gewei];//個位
                          P0=0x80;

                        }
                                                if(i==20)
                        {
                          
                                  P2=0xff;
                          P2=nondis[shiwei];//十位
                                P0=0x40;

                        }
                                                if(i==30)
                        {         i=0;
                                P2=0xff;
                                  P2=nondis[baiwei];//百位
                                P0=0x20;

                        }
                        }

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区不卡 | 欧美精品久久 | 精品一区国产 | 成年免费大片黄在线观看岛国 | 欧美不卡一区二区三区 | 国产原创在线观看 | 日韩在线视频网址 | 一区二区三区视频在线观看 | 精品视频免费 | 成人av免费在线观看 | 日韩免费电影 | 欧美精品一区久久 | 欧美不卡一区二区 | 台湾av在线 | 国产成人福利 | 亚洲精品国产电影 | 亚洲精品一区二区在线观看 | 一区| 日本视频中文字幕 | 人人艹人人爽 | www.操.com | 日韩高清在线观看 | 成年人在线电影 | 日韩av福利在线观看 | 永久网站| 夜夜操天天操 | 美女中文字幕视频 | 欧美国产91 | 九九伦理片 | 在线一区二区三区 | 亚洲一区二区三区免费在线 | 黄色日批视频 | 伊人久久精品 | 国产视频1区2区 | 91在线精品视频 | 国产一级免费视频 | 日韩精品一区中文字幕 | 色在线看 | 精品久久久一区二区 | 亚洲黄色av | 在线观看视频一区 |