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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2716|回復: 7
打印 上一主題 下一主題
收起左側

定時器1實驗 請大神幫忙指點哪里錯了 菜鳥在此拜謝

[復制鏈接]
跳轉到指定樓層
樓主
ID:233997 發表于 2017-9-20 23:19 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
/**************************************************************************************
*                              定時器1實驗                                                                                                  *
實現現象:下載程序后數碼管最后一位間隔一秒循環顯示0-F。使用單片機內部定時器可以實現準確延時。
注意事項:如果不想讓點陣模塊顯示,可以將74HC595模塊上的JP595短接片拔掉。                                                                                                                                                                  
***************************************************************************************/

#include <reg52.h>                         //此文件中定義了單片機的一些特殊功能寄存器

#define uchar unsigned char



sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

uchar code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值
                                       
void smgplay();



/*******************************************************************************
* 函 數 名         : Timer1Init
* 函數功能                   : 定時器1初始化
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/
void Timer1Init()
{
        TMOD|=0X10;//選擇為定時器1模式,工作方式1,僅用TR1打開啟動。

    TH1=(65535-50000)/256;
        TL1=(65535-50000)%256;
        ET1=1;//打開定時器1中斷允許
        EA=1;//打開總中斷
        TR1=1;//打開定時器                       
}

/*******************************************************************************
* 函 數 名       : main
* 函數功能                 : 主函數
* 輸    入       : 無
* 輸    出             : 無
*******************************************************************************/
void main()
{       
        LSA=0;
        LSB=0;
        LSC=0;
        Timer1Init();  //定時器1初始化
        while(1);               
}

void time1() interrupt 1
{
uchar num1;
Timer1Init();
if(num1==20)
{
num1=0;
num1++;
smgplay();
        }

        }

void smgplay()
{
while(1)
{
uchar num;
for(num=0;num<16;num++)
{
num=0;
num++;
P0=smgduan[num];
}
}
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:164602 發表于 2017-9-21 08:54 | 只看該作者
你程序中的問題我已經修改,在我的板子HC6800-ES-V2.0上可以正常顯示了。你對比一下,找找自己的問題。
/**************************************************************************************
*                              定時器1實驗                                                                                                  *
實現現象:下載程序后數碼管最后一位間隔一秒循環顯示0-F。使用單片機內部定時器可以實現準確延時。
注意事項:如果不想讓點陣模塊顯示,可以將74HC595模塊上的JP595短接片拔掉。                                                                                                                                                                  
***************************************************************************************/

#include <reg52.h>                         //此文件中定義了單片機的一些特殊功能寄存器

#define uchar unsigned char



sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

uchar code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值
uchar num1=0;
uchar num=0;                                       
void smgplay();



/*******************************************************************************
* 函 數 名         : Timer1Init
* 函數功能                   : 定時器1初始化
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/
void Timer1Init()
{
        TMOD|=0X10;//選擇為定時器1模式,工作方式1,僅用TR1打開啟動。

    TH1=(65535-50000)/256;
        TL1=(65535-50000)%256;
        ET1=1;//打開定時器1中斷允許
        EA=1;//打開總中斷
        TR1=1;//打開定時器                        
}

/*******************************************************************************
* 函 數 名       : main
* 函數功能                 : 主函數
* 輸    入       : 無
* 輸    出             : 無
*******************************************************************************/
void main()
{        
        LSA=0;
        LSB=0;
        LSC=0;
        Timer1Init();  //定時器1初始化
P0=0x00;
        while(1);               
}

void time1() interrupt 3
{
    TH1=(65535-50000)/256;
        TL1=(65535-50000)%256;

num1++;
if(num1==20)
{
smgplay();
num1=0;
}

        }

void smgplay()
{

P0=smgduan[num];
num++;
if (num==16)
{
num=0;
}
}
回復

使用道具 舉報

板凳
ID:234279 發表于 2017-9-21 08:59 | 只看該作者
for(num=0;num<16;num++)
{
num=0;
num++;
P0=smgduan[num];
}
這個是什么東西,死循環啊,一直在里面出不來了
回復

使用道具 舉報

地板
ID:232280 發表于 2017-9-21 14:30 來自手機 | 只看該作者
首先smg是死循環,num會一直小于16,其次主函數里沒有放smg函數,那這個函數不會運行,還有你中斷函數里放初始化函數做甚
回復

使用道具 舉報

5#
ID:233997 發表于 2017-9-21 21:19 | 只看該作者
HC6800-ES-V2.0 發表于 2017-9-21 08:54
你程序中的問題我已經修改,在我的板子HC6800-ES-V2.0上可以正常顯示了。你對比一下,找找自己的問題。
/* ...

非常感謝,您讓我學到很多。對num與num1之間的邏輯關系似懂非懂,不知是否可以指點一下,在下愚鈍。
在我理解的基礎上稍微修改了一下,這樣是否也可以
如下:
/**************************************************************************************
*                              定時器1實驗                                                                                                  *
實現現象:下載程序后數碼管最后一位間隔一秒循環顯示0-F。使用單片機內部定時器可以實現準確延時。
注意事項:如果不想讓點陣模塊顯示,可以將74HC595模塊上的JP595短接片拔掉。                                                                                                                                                                  
***************************************************************************************/

#include <reg52.h>                         //此文件中定義了單片機的一些特殊功能寄存器

#define uchar unsigned char



sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

uchar code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值
uchar num1=0;
uchar num=0;                                       
void smgplay();



/*******************************************************************************
* 函 數 名         : Timer1Init
* 函數功能                   : 定時器1初始化
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/
void Timer1Init()
{
        TMOD|=0X10;//選擇為定時器1模式,工作方式1,僅用TR1打開啟動。

    TH1=(65535-50000)/256;
        TL1=(65535-50000)%256;
        ET1=1;//打開定時器1中斷允許
        EA=1;//打開總中斷
        TR1=1;//打開定時器                        
}

/*******************************************************************************
* 函 數 名       : main
* 函數功能                 : 主函數
* 輸    入       : 無
* 輸    出             : 無
*******************************************************************************/
void main()
{        
        LSA=0;
        LSB=0;
        LSC=0;
        Timer1Init();  //定時器1初始化
        P0=0x00;
        while(1);               
}

void time1() interrupt 3
{
        TH1=(65535-50000)/256;
        TL1=(65535-50000)%256;
                num1++;
if(num1==20)
{
smgplay();
num1=0;

}

        }

void smgplay()
{

for(num=0;num<16;num++)
{

P0=smgduan[num];


}

}
回復

使用道具 舉報

6#
ID:233997 發表于 2017-9-21 21:20 | 只看該作者

非常感謝指點
我理解只是皮毛做了修改
void smgplay()
{

for(num=0;num<16;num++)
{

P0=smgduan[num];


}

}
回復

使用道具 舉報

7#
ID:233997 發表于 2017-9-21 21:21 | 只看該作者
GOD丿小男孩 發表于 2017-9-21 14:30
首先smg是死循環,num會一直小于16,其次主函數里沒有放smg函數,那這個函數不會運行,還有你中斷函數里放 ...

非常感謝您的指點
回復

使用道具 舉報

8#
ID:234814 發表于 2017-9-22 10:06 | 只看該作者
void smgplay()
{
while(1)
{
uchar num;
for(num=0;num<16;num++)
{
num=0;
num++;
P0=smgduan[num];
}
}
這段程序是一個死循環;
單片機的中斷服務函數應盡量剪短,不必要的函數不要放在中斷中;
例如,你在中斷里面進行了數碼管顯示調用;建議主函數中進行數碼管顯示調用。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天堂av资源 | 免费性视频 | 亚洲精品久久久蜜桃网站 | 91影院在线观看 | 亚洲视频免费播放 | 日韩一区二区在线视频 | 国产精品自产拍 | 久久久久成人精品免费播放动漫 | 在线播放国产一区二区三区 | 国产毛片久久久久久久久春天 | 中文精品视频 | 国产一级毛片精品完整视频版 | 亚洲视频在线免费 | 午夜免费视频 | 99久久久国产精品 | 亚洲男人的天堂网站 | 国产免费一区二区三区 | 狠狠干天天干 | 午夜精品网站 | 成人欧美一区二区 | 一区二区中文字幕 | 国产精品成人在线观看 | 久久精品 | 成人av观看 | 不卡一区| 最新日韩在线视频 | 精品国产一区二区三区久久久久久 | 成人午夜免费在线视频 | 欧美久久一区 | 久热精品免费 | 夜夜干夜夜操 | 自拍中文字幕 | 五月天婷婷狠狠 | 免费黄色录像视频 | 成人妇女免费播放久久久 | 欧美久久久久久 | 夜夜夜操 | 欧美老妇交乱视频 | 亚洲精品久久久一区二区三区 | 欧美电影在线观看网站 | 91福利在线观看 |