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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3385|回復: 15
打印 上一主題 下一主題
收起左側(cè)

求助:該程序第89句被卡住,不能通過,又不明白原因

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:253767 發(fā)表于 2023-1-7 08:25 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 tieq1952 于 2023-1-7 08:27 編輯

該程序是一本教材中關(guān)于數(shù)碼管的程序。在Keil中,第89句無論如何都通不過,錯誤提示為“void"附近語法錯誤。第89句為一T/C0定時函數(shù),程序如下:
89  void TimerInit(void)90  {
91       TH0=(65536-5000)/256;
92       TL0=(65536-5000)%256;       //定時5ms
93       TMOD=0x01;                  //T/C0 模式1
94  }

全部程序如下 :


#include <reg52.h>
sbit        P0_4=0x84;       //P0.4位地址84H
sbit        P0_5=0x85;       //P0.5位地址85H
/****************************************
*          大量宏定義,便于代碼移植和閱讀     *
*****************************************/

#define HIGH        1                    //定義HIGH為高電平
#define LOW        0                    //定義LOW為低電平
#define LS164_DATA(x) {if((x))P0_4=1;else P0_4=0;}
#define LS164_CLK(x)  {if((x))P0_5=1;else P0_5=0;}
#define SEG_PORT      P0          //控制數(shù)碼管字型碼端口
unsigned char        Timer0lRQEvent=0;   //T/CO 中斷事件
unsigned char        TimelSecEvent=0;    //定時 1 秒事件
unsigned int TimeCount=0;              //時間計數(shù)值
unsigned char        SegCurPosition=0;   //當前點亮的數(shù)碼管

//為了驗證共陽極的字型碼是共陰極的反碼,共陽極字型碼為共陰極的反碼
//共陽極字型碼存儲在代碼區(qū),用關(guān)鍵字“code”聲明
code unsigned char SegCode[10]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D, ~0x07,~0x7F,~0x6F};

//片選數(shù)碼管數(shù)組,存儲在代碼區(qū),用關(guān)鍵字"code"聲明
code unsigned char SegPosition[4]={0xf7,0xfb,0xfd,0xfe};

//數(shù)碼管顯示數(shù)據(jù)緩沖區(qū)
unsigned char SegBuf [4] ={0};

/**********************************************
*函數(shù)名稱:LS164Send
*輸    入:無
*輸    出:無
*功    能:74LS164發(fā)送單個字節(jié)
**********************************************/

void LS164Send(unsigned char byte)
{
    unsigned char j ;
    for (j=0;j<=7;j++)           //對輸入數(shù)據(jù)進行移位檢測
    {
        if(byte&(1<<(7-j)))      //檢測字節(jié)當前位
        {
            LS164_DATA(HIGH);    //串行數(shù)據(jù)輸入引腳為高電平
        }
        else
        {
            LS164_DATA(LOW);     //串行數(shù)據(jù)輸入引腳為低電平
        }
        LS164_CLK(LOW);          //同步時鐘輸入端以一個上升沿結(jié)束確定該位的值
        LS164_CLK(HIGH);
    }
}
/**********************************************
*函數(shù)名稱:SegRef reshDisplayBuf
*輸    入:無
*輸    出:無
*功    能:數(shù)碼管刷新顯示緩存
**********************************************/
void SegRefreshDisplayBuf(void)
{
    SegBuf[0]=TimeCount%10;                      //個位
    SegBuf[1]=TimeCount/10%10;           //十位
    SegBuf[2]=TimeCount/100%10;          //百位   
    SegBuf[3]=TimeCount/1000%10;         //千位
}
/***********************************************
*函數(shù)名稱:SegDisplay
*輸    入:無
*輸    出:無
*功    能:數(shù)碼管顯示數(shù)據(jù)
***********************************************/

void SegDisplay(void)
{
    unsigned char t;
    SEG_PORT=0x0F;                         //熄滅所有數(shù)碼管
    t=SegCode[SegBuf[ SegCurPosition]];    //確定當前的字型碼
    LS164Send(t);
    SEG_PORT=SegPosition[SegCurPosition];  //選中一個數(shù)碼管來系顯示
    if(++SegCurPosition>=4)                //下次要點亮的數(shù)碼管
    {
        SegCurPosition=0;
    }
/***********************************************
*函數(shù)名稱:TimerInit
*輸    入:無
*輸    出:無
*功    能:T/C初始化
***********************************************/
void TimerInit(void)
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;       //定時5ms
TMOD=0x01;                  //T/C0 模式1
}
/                void TimerInit(void)
{
    TH0=(65536-5000)/256;
    TL0=(65536-5000)%256;       //定時5ms
    TMOD=0x01;                  //T/C0 模式1
}/
/***********************************************
函數(shù)名稱:Timer0Start
*輸   入:無
*輸   出:無
*功   能:T/C0啟動
***********************************************/
void Timer0Start(void)
{
    TR0=1;
    ET0=1;
}
/***********************************************
*函數(shù)名稱:PortInit
*輸    入:無
*輸    出:無
*功    能:I/O口初始化
***********************************************/
void PortInit(void)
{
    P0=Pl=P2=P3=0xFF;
}
/***********************************************
*函數(shù)名稱:main
*輸    入:無
*輸    出:無
*功    能:函數(shù)主體
***********************************************/
void main(void)
{
    PortInit();
    TimerInit();
    Timer0Start();
    SegRefreshDisplayBuf();
    EA=1;
    while(1)
    {
        if(Timer0lRQEvent)                    //檢測定時中斷事件是否產(chǎn)生
        {  
            Timer0IRQEvent=0;
            if(TimelSecEvent)             //檢測1秒事件是否產(chǎn)生
            {
                TimelSecEvent=0;
                if(++TimeCount>=9999)    //計數(shù)值自加
                {
                    TimeCount=0;
                }
                SegRefreshDisplayBuf( );   //刷新緩沖區(qū)
            }
            SegDisplay( );                      //點亮選中的數(shù)碼管
        }
    }
}
/***********************************************
*函數(shù)名稱:Timer0IRQ
*輸           入:無
*輸        出:無
*功        能:T/CO中斷服務(wù)函數(shù)
***********************************************/
void Timer0IRQ(void) interrupt 1
{
    static unsigned int cnt=0;
    TH0=(65536-5000)/256;
    TL0=(65536-5000)%256;          //重載初值
    Timer0IRQEvent=l;
    if(++cnt>=200)
    {
        cnt=0;
        TimelSecEvent=l;
    }
}



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

使用道具 舉報

沙發(fā)
ID:863362 發(fā)表于 2023-1-7 10:14 | 只看該作者
最好把出錯的信息也粘貼出來
回復

使用道具 舉報

板凳
ID:253767 發(fā)表于 2023-1-7 13:00 | 只看該作者
謝謝。問題已經(jīng)找到,是在其前一句的最后少一個大括號。
回復

使用道具 舉報

地板
ID:253767 發(fā)表于 2023-1-7 13:03 | 只看該作者
出錯的信息中譯文就是“ “void"附近的語法錯誤。”
回復

使用道具 舉報

5#
ID:342822 發(fā)表于 2023-1-7 18:46 | 只看該作者
/* Main.c file generated by New Project wizard
*
* Created:   周六 1月 7 2023
* Processor: AT89C52
* Compiler:  Keil for 8051
*/

#include <reg52.h>
sbit        P0_4=0x84;       //P0.4位地址84H
sbit        P0_5=0x85;       //P0.5位地址85H
/****************************************
*          大量宏定義,便于代碼移植和閱讀     *
*****************************************/

#define HIGH        1                    //定義HIGH為高電平
#define LOW        0                    //定義LOW為低電平
#define LS164_DATA(x) {if((x))P0_4=1;else P0_4=0;}
#define LS164_CLK(x)  {if((x))P0_5=1;else P0_5=0;}
#define SEG_PORT      P0          //控制數(shù)碼管字型碼端口
unsigned char        Timer0lRQEvent=0;   //T/CO 中斷事件
unsigned char        TimelSecEvent=0;    //定時 1 秒事件
unsigned int TimeCount=0;              //時間計數(shù)值
unsigned char        SegCurPosition=0;   //當前點亮的數(shù)碼管

//為了驗證共陽極的字型碼是共陰極的反碼,共陽極字型碼為共陰極的反碼
//共陽極字型碼存儲在代碼區(qū),用關(guān)鍵字“code”聲明
code unsigned char SegCode[10]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D, ~0x07,~0x7F,~0x6F};

//片選數(shù)碼管數(shù)組,存儲在代碼區(qū),用關(guān)鍵字"code"聲明
code unsigned char SegPosition[4]={0xf7,0xfb,0xfd,0xfe};

//數(shù)碼管顯示數(shù)據(jù)緩沖區(qū)
unsigned char SegBuf [4] ={0};

/**********************************************
*函數(shù)名稱:LS164Send
*輸    入:無
*輸    出:無
*功    能:74LS164發(fā)送單個字節(jié)
**********************************************/

void LS164Send(unsigned char byte)
{
    unsigned char j ;
    for (j=0;j<=7;j++)           //對輸入數(shù)據(jù)進行移位檢測
    {
        if(byte&(1<<(7-j)))      //檢測字節(jié)當前位
        {
            LS164_DATA(HIGH);    //串行數(shù)據(jù)輸入引腳為高電平
        }
        else
        {
            LS164_DATA(LOW);     //串行數(shù)據(jù)輸入引腳為低電平
        }
        LS164_CLK(LOW);          //同步時鐘輸入端以一個上升沿結(jié)束確定該位的值
        LS164_CLK(HIGH);
    }
}
/**********************************************
*函數(shù)名稱:SegRef reshDisplayBuf
*輸    入:無
*輸    出:無
*功    能:數(shù)碼管刷新顯示緩存
**********************************************/
void SegRefreshDisplayBuf(void)
{
    SegBuf[0]=TimeCount%10;                      //個位
    SegBuf[1]=TimeCount/10%10;           //十位
    SegBuf[2]=TimeCount/100%10;          //百位   
    SegBuf[3]=TimeCount/1000%10;         //千位
}
/***********************************************
*函數(shù)名稱:SegDisplay
*輸    入:無
*輸    出:無
*功    能:數(shù)碼管顯示數(shù)據(jù)
***********************************************/

void SegDisplay(void)
{
    unsigned char t;
    SEG_PORT=0x0F;                         //熄滅所有數(shù)碼管
    t=SegCode[SegBuf[ SegCurPosition]];    //確定當前的字型碼
    LS164Send(t);
    SEG_PORT=SegPosition[SegCurPosition];  //選中一個數(shù)碼管來系顯示
    if(++SegCurPosition>=4)                //下次要點亮的數(shù)碼管
    {
        SegCurPosition=0;
    }
}

/***********************************************
*函數(shù)名稱:TimerInit
*輸    入:無
*輸    出:無
*功    能:T/C初始化
***********************************************/
void TimerInit(void)
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;       //定時5ms
TMOD=0x01;                  //T/C0 模式1
}

/***********************************************
函數(shù)名稱:Timer0Start
*輸   入:無
*輸   出:無
*功   能:T/C0啟動
***********************************************/
void Timer0Start(void)
{
    TR0=1;
    ET0=1;
}
/***********************************************
*函數(shù)名稱:PortInit
*輸    入:無
*輸    出:無
*功    能:I/O口初始化
***********************************************/
void PortInit(void)
{
    P0=P1=P2=P3=0xFF;
}
/***********************************************
*函數(shù)名稱:main
*輸    入:無
*輸    出:無
*功    能:函數(shù)主體
***********************************************/
void main(void)
{
    PortInit();
    TimerInit();
    Timer0Start();
    SegRefreshDisplayBuf();
    EA=1;
    while(1)
    {
        if(Timer0lRQEvent)                    //檢測定時中斷事件是否產(chǎn)生
        {  
            Timer0lRQEvent=0;
            if(TimelSecEvent)             //檢測1秒事件是否產(chǎn)生
            {
                TimelSecEvent=0;
                if(++TimeCount>=9999)    //計數(shù)值自加
                {
                    TimeCount=0;
                }
                SegRefreshDisplayBuf( );   //刷新緩沖區(qū)
            }
            SegDisplay( );                      //點亮選中的數(shù)碼管
        }
    }
}
/***********************************************
*函數(shù)名稱:Timer0IRQ
*輸           入:無
*輸        出:無
*功        能:T/CO中斷服務(wù)函數(shù)
***********************************************/
void Timer0IRQ(void) interrupt 1
{
    static unsigned int cnt=0;
    TH0=(65536-5000)/256;
    TL0=(65536-5000)%256;          //重載初值
    Timer0lRQEvent=1;
    if(++cnt>=200)
    {
        cnt=0;
        TimelSecEvent=1;
    }
}
回復

使用道具 舉報

6#
ID:491923 發(fā)表于 2023-1-7 19:25 | 只看該作者
看明白了!
回復

使用道具 舉報

7#
ID:342822 發(fā)表于 2023-1-7 20:13 | 只看該作者

unsigned char        Timer0lRQEvent=0;   //T/CO 中斷事件
Timer0IRQEvent
Timer0lRQEvent
大寫I  小寫 l


P0=Pl=P2=P3=0xFF;
P1寫成Pl
仔細找找吧~~~~~
回復

使用道具 舉報

8#
ID:654797 發(fā)表于 2023-1-7 21:38 | 只看該作者
括號后而的90是怎么回事
回復

使用道具 舉報

9#
ID:88256 發(fā)表于 2023-1-7 22:28 | 只看該作者
vscos 發(fā)表于 2023-1-7 21:38
括號后而的90是怎么回事

那個是{的行號
回復

使用道具 舉報

10#
ID:88256 發(fā)表于 2023-1-7 22:34 | 只看該作者
在貼出來的所有程序里,有兩個TimerInit函數(shù),其中第2個估計是想注釋掉,但是注釋不應該是 /* 加 */ 的嗎?沒有星號能行?




回復

使用道具 舉報

11#
ID:253767 發(fā)表于 2023-1-9 06:48 | 只看該作者
taotie 發(fā)表于 2023-1-7 20:13
unsigned char        Timer0lRQEvent=0;   //T/CO 中斷事件
Timer0IRQEvent
Timer0lRQEvent

謝謝指點。這個程序是從PDF書中復制后進行文字識別的,這類錯誤很多,都已一個個找出,程序已經(jīng)能夠正常運行了。
回復

使用道具 舉報

12#
ID:253767 發(fā)表于 2023-1-9 06:51 | 只看該作者
vscos 發(fā)表于 2023-1-7 21:38
括號后而的90是怎么回事

謝謝指點。90是行號,在復制過程中跟在了上一行的后面。
回復

使用道具 舉報

13#
ID:253767 發(fā)表于 2023-1-9 06:53 | 只看該作者
hhdsdy 發(fā)表于 2023-1-7 22:34
在貼出來的所有程序里,有兩個TimerInit函數(shù),其中第2個估計是想注釋掉,但是注釋不應該是 /* 加 */ 的嗎? ...

謝謝指點。您說得對,大意了。
回復

使用道具 舉報

14#
ID:253767 發(fā)表于 2023-1-9 06:54 | 只看該作者
本帖最后由 tieq1952 于 2023-1-19 15:30 編輯

謝謝大家熱情分析指點,所有錯誤都已經(jīng)找到,程序已經(jīng)能夠正常運行了。
回復

使用道具 舉報

15#
ID:910913 發(fā)表于 2023-1-13 09:56 | 只看該作者
還可以,程序不太繁瑣
回復

使用道具 舉報

16#
ID:412177 發(fā)表于 2023-6-19 18:15 | 只看該作者
好多地方都是把英文小寫“l(fā)”,和1搞混了。
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 三级在线播放 | a一级黄色片 | 欧美综合在线视频 | 99精品视频在线观看 | 一区二区视频网站 | 国产伦精品一区二区三区四区免费 | 天天看天天爽 | 国产精品成人国产乱一区 | 综合久久99 | 特级特黄aaaa免费看 | 亚洲欧美另类在线观看 | 国产成人精品亚洲男人的天堂 | 日日干夜夜爽 | 五月开心网 | 97操碰| 日本视频免费观看 | 一级黄色免费看 | 欧美视频在线观看免费 | 欧美亚洲国产精品 | 天天干天天草 | 亚洲综合婷婷 | 国产精品偷乱一区二区三区 | 91亚洲国产成人久久精品网站 | 亚洲欧美日韩一区 | 欧美性生交xxxxx久久久 | 一区二区不卡 | 性久久| 91片黄在线观看动漫 | 免费的黄色大片 | 国产原创精品 | 国产精品日韩在线 | 精品免费在线 | 欧美性受xxxx黑人xyx性爽 | 日韩免费一区 | 欧美在线视频观看 | 欧美福利一区二区 | 日韩黄色在线视频 | 欧美三级韩国三级日本三斤在线观看 | 色综合久久久久 | 天天干少妇 | 一区二区免费在线观看 |