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

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

QQ登錄

只需一步,快速開(kāi)始

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

51單片機(jī)數(shù)碼管秒表程序一直有問(wèn)題,請(qǐng)大佬們幫忙看一下

[復(fù)制鏈接]
回帖獎(jiǎng)勵(lì) 1 黑幣 回復(fù)本帖可獲得 1 黑幣獎(jiǎng)勵(lì)! 每人限 1 次(中獎(jiǎng)概率 30%)
ID:287924 發(fā)表于 2018-3-19 00:06 | 顯示全部樓層 |閱讀模式
這個(gè)是一個(gè)51單片機(jī)的數(shù)碼管秒表,其中K1按下后開(kāi)始計(jì)數(shù),K2按下后暫停計(jì)數(shù),C1、C2是數(shù)碼管位選,P0為段選,下載進(jìn)proteus以后數(shù)碼管只顯示00,并沒(méi)有按秒計(jì)數(shù),下面是示意圖和程序。謝謝各位了。
test.jpg
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. uchar nushi,ge;
  5. uchar counter1=0;
  6. uint temp;
  7. sbit C1=P2^0;
  8. sbit C2=P2^1;
  9. sbit KEY0=P1^0;        
  10. sbit KEY1=P1^1;
  11. unsigned char code duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};        //數(shù)碼管段碼
  12. unsigned char num;

  13. void delayms(uint xms) //延時(shí)xms
  14. {
  15.         uint i,j;
  16.         for(i=xms;i>0;i--)
  17.                 for(j=110;j>0;j--);
  18. }


  19. void display(uchar shi,uchar ge)//數(shù)碼管顯示
  20. {                        
  21.         
  22.                                 C1=0;
  23.                                 C2=1;
  24.                                 P0=duan[shi];
  25.                                 delayms(50);
  26.         
  27.                                 C1=1;
  28.                                 C2=0;
  29.                                 P0=duan[ge];
  30.                                 delayms(50);
  31.                                 C1=0;
  32.                                 C2=0;
  33.                 }

  34. void Timer1(void) interrupt 1        //數(shù)碼管計(jì)時(shí)
  35. {           
  36.         uchar t;
  37.         TR0=0;
  38.         TH0=(65536-45872)/256;
  39.         TL0=(65536-45872)%256;

  40.         t++;
  41.         if(t==20)
  42.                 {
  43.                         t=0;
  44.                         if(num==60)
  45.                                 num=0;
  46.                         if(counter1==1)
  47.                                 num++;
  48.                         else
  49.                                 num=num;
  50.                         
  51.                                 shi=num/10;
  52.                                 ge=num%10;
  53.                 }               
  54.         TR0=1;
  55. }

  56. void init(void)
  57. {
  58.         TMOD=0x21;
  59.         TH0=(65536-45872)/256;
  60.         TL0=(65536-45872)%256;
  61.         EA=1;                //開(kāi)總中斷
  62.         ET0=1;
  63.         TR0=1;
  64.         ET1=1;
  65.         TR1=1;
  66. }
  67.         void main()
  68. {
  69.         init();
  70.                
  71.         while(1)
  72.         {
  73.                 if(KEY0==0)
  74.         {
  75.                 delayms(5);
  76.                 if(KEY0==0)
  77.                 {
  78.                         counter1=1;
  79.                 }
  80.         }
  81.         if(KEY1==0)
  82.         {
  83.                 delayms(5);
  84.                 if(KEY1==0)
  85.                 {
  86.                         counter1=0;
  87.                 }
  88.         }
  89.                 display(shi,ge);
  90.                
  91.          }        
  92. }
復(fù)制代碼


回復(fù)

使用道具 舉報(bào)

ID:111634 發(fā)表于 2018-3-19 08:52 | 顯示全部樓層
本帖最后由 zl2168 于 2018-3-19 08:59 編輯

實(shí)例93  99.9秒秒表
給你介紹一個(gè)秒表案例,注意!!網(wǎng)上秒表案例很多,但絕大多數(shù)無(wú)法證明其正確,我這個(gè)案例你可觀看操作。

Proteus仿真一下,確認(rèn)有效。 實(shí)例95 99.9秒秒表.rar (38.86 KB, 下載次數(shù): 15)

評(píng)分

參與人數(shù) 1黑幣 +3 收起 理由
TETR + 3 贊一個(gè)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:287924 發(fā)表于 2018-3-19 10:24 | 顯示全部樓層
我的程序是自己寫(xiě)的,希望各位能幫助我在這個(gè)程序上改進(jìn),這對(duì)我學(xué)習(xí)編程會(huì)有很大幫助,提前感謝各位
回復(fù)

使用道具 舉報(bào)

ID:222948 發(fā)表于 2018-3-19 10:27 | 顯示全部樓層
本帖最后由 999333 于 2018-3-19 10:43 編輯

你太多錯(cuò)誤了,我自己改一下,還有你仿真的也有接線錯(cuò)誤,另外最好在p0口接上拉電阻

時(shí)鐘.docx

15.57 KB, 下載次數(shù): 12

評(píng)分

參與人數(shù) 1黑幣 +3 收起 理由
TETR + 3 很給力!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:287924 發(fā)表于 2018-3-19 10:42 | 顯示全部樓層
999333 發(fā)表于 2018-3-19 10:27
你太多錯(cuò)誤了,你自己改一下,就是你仿真的也有接線錯(cuò)誤,另外最好p0口接上拉電阻

那個(gè)電路圖只是示意,我的電路圖還有其他部分,都放上來(lái)會(huì)有點(diǎn)亂,程序我這里編譯是沒(méi)有問(wèn)題的
回復(fù)

使用道具 舉報(bào)

ID:7485 發(fā)表于 2018-3-19 10:48 | 顯示全部樓層
shi和ge沒(méi)有定義吧?定時(shí)器1沒(méi)有用到,就不要運(yùn)行,也不要開(kāi)中斷。
回復(fù)

使用道具 舉報(bào)

ID:287924 發(fā)表于 2018-3-19 11:08 | 顯示全部樓層
ahshmj 發(fā)表于 2018-3-19 10:48
shi和ge沒(méi)有定義吧?定時(shí)器1沒(méi)有用到,就不要運(yùn)行,也不要開(kāi)中斷。

shi,ge,num是全局變量,可能復(fù)制的時(shí)候有點(diǎn)問(wèn)題,num和shi沒(méi)有分開(kāi),但程序里是對(duì)的,之后要加串口通信,需要用到定時(shí)器1,所以這里開(kāi)了定時(shí)器1
回復(fù)

使用道具 舉報(bào)

ID:293981 發(fā)表于 2018-3-19 14:34 | 顯示全部樓層
中斷例程中的變量 t 改為全局變量就可以了
回復(fù)

使用道具 舉報(bào)

ID:293981 發(fā)表于 2018-3-19 14:36 | 顯示全部樓層
中斷例程中的變量t定義為全局變量才能實(shí)現(xiàn)計(jì)數(shù)
回復(fù)

使用道具 舉報(bào)

ID:293981 發(fā)表于 2018-3-19 14:39 | 顯示全部樓層
中斷例程中的變量t改為全局變量才能計(jì)數(shù)
回復(fù)

使用道具 舉報(bào)

ID:293981 發(fā)表于 2018-3-19 14:54 | 顯示全部樓層
中斷例程中的t為本地變量,只有t的初值=19時(shí)才可實(shí)現(xiàn)計(jì)數(shù)。但由于t定義為local,實(shí)際運(yùn)行時(shí)變量t對(duì)應(yīng)于cpu的寄存器r0~r7之一,如果你的程序中僅有一個(gè)中斷例程,工作可能正常,如多于1個(gè)中斷,則必須將t定義為全局變量
回復(fù)

使用道具 舉報(bào)

ID:287575 發(fā)表于 2018-3-19 15:21 | 顯示全部樓層
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int

uchar shi,ge;                //ÃëμÄêÇê®Î»oí¸÷λ
bit start_stop; //Æô¶ˉoíí£Ö1±ê־λ
bit s1_s2;                 //λ1oíλ2Ñ¡Ôñ
uint temp;
sbit C1=P2^0;
sbit C2=P2^1;
sbit KEY0=P1^0; //Æô¶ˉ°′Å¥
sbit KEY1=P1^1; //í£Ö1°′Å¥
unsigned char code duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};        //?????
unsigned char num;

void delayms(uint xms) //??xms
{
        uint i,j;
        for(i=0;i<xms;i++)
                                {
                                for(j=0;j<110;j++)
                                {_nop_();}
                                }
}




void Timer1(void) interrupt 1        //?????
{           
        uchar t;
        TR0=0;
        TH0=0xfc;
        TL0=0x66;
       
                                if(s1_s2)
                         {C1=1;C2=0;P0=duan[shi];}
                                else
                                        {C1=0;C2=1;P0=duan[ge];}
                                s1_s2=!s1_s2;
        
                                       
                                if(start_stop)
                                {
                                        if(++t==20)
                                        {
                                                t=0;
                                                if(++num==60) {num=0;}
                                                shi=num/10;
                                                ge=num%10;
                                        }
                                }

               
        TR0=1;
}

void init(void)
{
        TMOD=0x01;
        TH0=0xfc;
        TL0=0x66;
        EA=1;                //????
        ET0=1;
        TR0=1;

}
        void main()
{
        init();
               
        while(1)
        {
                if(KEY0==0)
        {
              delayms(5);
                if(KEY0==0)
                {
                       start_stop=1;
                }
                                                                while(KEY0==0);         //μè′y°′¼üêí·Å
        }
        if(KEY1==0)
        {
                delayms(5);
                if(KEY1==0)
                {
                        start_stop=0;
                }
                                                                while(KEY1==0);                 //μè′y°′¼üêí·Å
        }
               
         }        
}

評(píng)分

參與人數(shù) 1黑幣 +3 收起 理由
TETR + 3 很給力!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:287575 發(fā)表于 2018-3-19 15:22 | 顯示全部樓層
我?guī)湍阈薷牧艘幌拢密浖抡媸强梢缘?/td>
回復(fù)

使用道具 舉報(bào)

ID:287575 發(fā)表于 2018-3-19 15:25 | 顯示全部樓層
sbit C1=P2^0;
sbit C2=P2^1;
你把proteus C1和C2改到P2.0和P2.1
如不想改proteus就把程序改成
sbit C1=P3^0;
sbit C2=P3^1;
回復(fù)

使用道具 舉報(bào)

ID:287575 發(fā)表于 2018-3-19 15:27 | 顯示全部樓層
如果你要定時(shí)器1做中斷,你必須定義中斷函數(shù),暫時(shí)做個(gè)空函數(shù),不然程序會(huì)亂的
回復(fù)

使用道具 舉報(bào)

ID:287924 發(fā)表于 2018-3-19 18:36 | 顯示全部樓層
好的,多謝各位,999333的程序是正確的,12樓的程序我還沒(méi)測(cè)。還想繼續(xù)請(qǐng)教一下,因?yàn)槲蚁朐谶@個(gè)程序的基礎(chǔ)上繼續(xù)做串口通信,此單片機(jī)作為從機(jī),不斷向主機(jī)發(fā)送num的值,目前只是在初始化程序init()里加上開(kāi)啟定時(shí)器1的語(yǔ)句ET1=1和TR=1,程序就不能正常運(yùn)行,這是為什么啊?
回復(fù)

使用道具 舉報(bào)

ID:7485 發(fā)表于 2018-3-19 19:17 | 顯示全部樓層
TETR 發(fā)表于 2018-3-19 11:08
shi,ge,num是全局變量,可能復(fù)制的時(shí)候有點(diǎn)問(wèn)題,num和shi沒(méi)有分開(kāi),但程序里是對(duì)的,之后要加串口通信, ...

串口通信就更不要開(kāi)中斷了。
回復(fù)

使用道具 舉報(bào)

ID:287924 發(fā)表于 2018-3-20 00:33 來(lái)自手機(jī) | 顯示全部樓層
ahshmj 發(fā)表于 2018-3-19 19:17
串口通信就更不要開(kāi)中斷了。

計(jì)數(shù)器和串口都需要中斷啊,不開(kāi)中斷要怎么處理呢?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品9999 | 欧美性久久久 | 中文字幕精品一区二区三区精品 | 精品国产99 | 国产欧美一区二区三区久久人妖 | 毛片一级黄色 | 超级乱淫av片免费播放 | 亚洲精品久久久久久久久久久久久 | www.日韩系列 | 成人依人 | 国产精品毛片久久久久久久 | 日日夜精品视频 | 日韩三级在线 | 91久久久久久久久久久久久 | 成人亚洲精品久久久久软件 | 国产福利小视频 | 精品视频在线观看 | 在线中文视频 | 精品欧美一区二区在线观看欧美熟 | 狠狠综合久久av一区二区小说 | 国产精品一区在线观看你懂的 | 国产精品久久久久久亚洲调教 | 在线视频一区二区三区 | 国产久视频| 精品一区二区三区在线观看国产 | 久久专区 | 一区二区三区在线播放 | 亚洲超碰在线观看 | 国精产品一区二区三区 | 蜜臀91视频 | 国产激情亚洲 | 日韩视频精品在线 | 国产精品视频久久 | 色爱区综合 | 成人啊啊啊 | 久久这里只有精品首页 | 婷婷福利视频导航 | 久久久久www | 国产成人精品免费视频大全最热 | 少妇精品久久久久久久久久 | 人人干人人艹 |