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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

[復(fù)制鏈接]
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;   //當(dāng)前點(diǎn)亮的數(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ù)進(jìn)行移位檢測
    {
        if(byte&(1<<(7-j)))      //檢測字節(jié)當(dāng)前位
        {
            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]];    //確定當(dāng)前的字型碼
    LS164Send(t);
    SEG_PORT=SegPosition[SegCurPosition];  //選中一個數(shù)碼管來系顯示
    if(++SegCurPosition>=4)                //下次要點(diǎn)亮的數(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( );                      //點(diǎn)亮選中的數(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;
    }
}



回復(fù)

使用道具 舉報

ID:863362 發(fā)表于 2023-1-7 10:14 | 顯示全部樓層
最好把出錯的信息也粘貼出來
回復(fù)

使用道具 舉報

ID:253767 發(fā)表于 2023-1-7 13:00 | 顯示全部樓層
謝謝。問題已經(jīng)找到,是在其前一句的最后少一個大括號。
回復(fù)

使用道具 舉報

ID:253767 發(fā)表于 2023-1-7 13:03 | 顯示全部樓層
出錯的信息中譯文就是“ “void"附近的語法錯誤。”
回復(fù)

使用道具 舉報

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;   //當(dāng)前點(diǎn)亮的數(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ù)進(jìn)行移位檢測
    {
        if(byte&(1<<(7-j)))      //檢測字節(jié)當(dāng)前位
        {
            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]];    //確定當(dāng)前的字型碼
    LS164Send(t);
    SEG_PORT=SegPosition[SegCurPosition];  //選中一個數(shù)碼管來系顯示
    if(++SegCurPosition>=4)                //下次要點(diǎn)亮的數(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( );                      //點(diǎn)亮選中的數(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;
    }
}
回復(fù)

使用道具 舉報

ID:491923 發(fā)表于 2023-1-7 19:25 | 顯示全部樓層
看明白了!
回復(fù)

使用道具 舉報

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
仔細(xì)找找吧~~~~~
回復(fù)

使用道具 舉報

ID:654797 發(fā)表于 2023-1-7 21:38 | 顯示全部樓層
括號后而的90是怎么回事
回復(fù)

使用道具 舉報

ID:88256 發(fā)表于 2023-1-7 22:28 | 顯示全部樓層
vscos 發(fā)表于 2023-1-7 21:38
括號后而的90是怎么回事

那個是{的行號
回復(fù)

使用道具 舉報

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

51hei圖片20230107223042.png


回復(fù)

使用道具 舉報

ID:253767 發(fā)表于 2023-1-9 06:48 | 顯示全部樓層
taotie 發(fā)表于 2023-1-7 20:13
unsigned char        Timer0lRQEvent=0;   //T/CO 中斷事件
Timer0IRQEvent
Timer0lRQEvent

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

使用道具 舉報

ID:253767 發(fā)表于 2023-1-9 06:51 | 顯示全部樓層
vscos 發(fā)表于 2023-1-7 21:38
括號后而的90是怎么回事

謝謝指點(diǎn)。90是行號,在復(fù)制過程中跟在了上一行的后面。
回復(fù)

使用道具 舉報

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

謝謝指點(diǎn)。您說得對,大意了。
回復(fù)

使用道具 舉報

ID:253767 發(fā)表于 2023-1-9 06:54 | 顯示全部樓層
本帖最后由 tieq1952 于 2023-1-19 15:30 編輯

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

使用道具 舉報

ID:910913 發(fā)表于 2023-1-13 09:56 | 顯示全部樓層
還可以,程序不太繁瑣
回復(fù)

使用道具 舉報

ID:412177 發(fā)表于 2023-6-19 18:15 | 顯示全部樓層
好多地方都是把英文小寫“l(fā)”,和1搞混了。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美video | 国产亚洲精品精品国产亚洲综合 | 中文字幕一区二区视频 | 国产精品69毛片高清亚洲 | 99热热| 精品久久久久久一区二区 | 成人免费一区二区 | 黄色一级免费 | 精品一区二区电影 | 日本电影免费完整观看 | 欧美精品1区2区3区 精品国产欧美一区二区 | 欧美日韩久久久久 | 国产精品美女久久久久aⅴ国产馆 | 福利视频一区二区三区 | 精品国产欧美一区二区三区成人 | 久久久免费电影 | 五月婷婷激情网 | 91久久电影| 久久99国产精品 | 中文字幕日韩欧美 | 日本精品久久久一区二区三区 | 欧美一区二区三区在线观看 | 亚洲成人av | 亚洲国产精品网站 | 久久精品一区二区 | 国产精品伦理一区二区三区 | 色姑娘av | 成人黄色在线 | 国产91丝袜在线18 | 日韩视频精品 | 午夜视频在线视频 | 国产欧美一区二区精品忘忧草 | 干干干操操操 | 久久久久久免费免费 | 国产成人精品久久二区二区91 | 精品国产三级 | 久久婷婷av | 国产精品福利网站 | 久久久精品一区 | 亚洲国产一区二区视频 | 视频在线一区二区 |