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

QQ登錄

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

搜索
查看: 1141|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

這是定義的問(wèn)題嗎,用的c語(yǔ)言,怎么都改不對(duì)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1142693 發(fā)表于 2025-1-7 21:36 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式


#include <reg51.h>

// 定義端口
sbit SNG = P2^0; // 南北綠燈
sbit SNY = P2^1; // 南北黃燈
sbit SNR = P2^2; // 南北紅燈
sbit EWG = P2^3; // 東西綠燈
sbit EWY = P2^4; // 東西黃燈
sbit EWR = P2^5; // 東西紅燈

// 數(shù)碼管顯示相關(guān)
uchar code SEG[4] = {0x01, 0x02, 0x04, 0x08}; // 數(shù)碼管位選
uchar code distab[10] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}; // 數(shù)碼管顯示0~9
uint timeG, timeY, timeR; // 各燈顯示時(shí)間
uint state; // 狀態(tài)標(biāo)志

// 延時(shí)函數(shù)
void delay_ms(uint q)
{
    uint i, j;
    for (i = 0; i < q; i++)
        for (j = 0; j < 110; j++);
}

// 定時(shí)器0初始化
void Timer0Init(void)
{
    TMOD |= 0X01; // 定時(shí)器0模式1,16位定時(shí)器
    TH0 = 0XFC;   // 定時(shí)1ms
    TL0 = 0X18;
    EA = 1;       // 開(kāi)總中斷
    ET0 = 1;      // 開(kāi)定時(shí)器0中斷
    TR0 = 1;      // 啟動(dòng)定時(shí)器0
}

// 定時(shí)器0中斷服務(wù)程序
void Timer0() interrupt 1
{
    static uint count = 0; // 計(jì)數(shù)器,用于控制狀態(tài)轉(zhuǎn)換
    TH0 = 0XFC;   // 重裝初值
    TL0 = 0X18;
    count++;
    if (count >= 1000) // 每秒更新一次狀態(tài)
    {
        count = 0;
        switch (state)
        {
            case 0: // 南北綠燈,東西紅燈
                timeG--;
                if (timeG == 0)
                {
                    state = 1;
                    timeY = 3;
                }
                break;
            case 1: // 南北黃燈閃爍,東西紅燈
                if (timeY > 0)
                    timeY--;
                else
                {
                    state = 2;
                    timeR = 90;
                }
                break;
            case 2: // 南北紅燈,東西綠燈
                timeR--;
                if (timeR == 0)
                {
                    state = 3;
                    timeY = 3;
                }
                break;
            case 3: // 南北紅燈,東西黃燈閃爍
                if (timeY > 0)
                    timeY--;
                else
                {
                    state = 0;
                    timeG = 20;
                }
                break;
        }
    }

    // 數(shù)碼管顯示倒計(jì)時(shí)
    uchar displayDigit[4] = {0xFF, 0xFF, 0xFF, 0xFF}; // 初始化為全滅
    switch (state)
    {
        case 0:
            displayDigit[0] = distab[timeG / 10];
            displayDigit[1] = distab[timeG % 10];
            break;
        case 1:
            displayDigit[0] = distab[timeY / 10];
            displayDigit[1] = distab[timeY % 10];
            break;
        case 2:
            displayDigit[0] = distab[timeR / 10];
            displayDigit[1] = distab[timeR % 10];
            break;
        case 3:
            displayDigit[0] = distab[timeR / 10];
            displayDigit[1] = distab[timeR % 10];
            break;
    }
    for (uchar i = 0; i < 4; i++)
    {
        P1 = SEG[i];
        P0 = displayDigit[i];
        delay_ms(1);
    }
}

// 主函數(shù)
void main()
{
    Timer0Init(); // 定時(shí)器初始化
    timeG = 20;   // 初始時(shí)間設(shè)置
    state = 0;    // 初始狀態(tài)
    while (1)
    {
        // 主循環(huán)可以為空,因?yàn)樗胁僮鞫荚谥袛嘀型瓿?br />     }
}
顯示4.c(9): error C129: missing ';' before 'code'。
我搜到是沒(méi)有定義就在開(kāi)頭加了
#define uchar unsigned char;
#define uint unsigned int;
結(jié)果顯示4.c(109): error C202: 'P0': undefined identifier

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

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1133081 發(fā)表于 2025-1-8 06:48 | 只看該作者
改這樣就可以通過(guò)編譯
  1. #include <reg51.h>
  2. #define uchar unsigned char//;
  3. #define uint unsigned int//;
  4. // 定義端口
  5. sbit SNG = P2^0; // 南北綠燈
  6. sbit SNY = P2^1; // 南北黃燈
  7. sbit SNR = P2^2; // 南北紅燈
  8. sbit EWG = P2^3; // 東西綠燈
  9. sbit EWY = P2^4; // 東西黃燈
  10. sbit EWR = P2^5; // 東西紅燈

  11. // 數(shù)碼管顯示相關(guān)
  12. uchar code SEG[4] = {0x01, 0x02, 0x04, 0x08}; // 數(shù)碼管位選
  13. uchar code distab[10] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}; // 數(shù)碼管顯示0~9
  14. uint timeG, timeY, timeR; // 各燈顯示時(shí)間
  15. uint state; // 狀態(tài)標(biāo)志

  16. // 延時(shí)函數(shù)
  17. void delay_ms(uint q)
  18. {
  19.     uint i, j;
  20.     for (i = 0; i < q; i++)
  21.         for (j = 0; j < 110; j++);
  22. }

  23. // 定時(shí)器0初始化
  24. void Timer0Init(void)
  25. {
  26.     TMOD |= 0X01; // 定時(shí)器0模式1,16位定時(shí)器
  27.     TH0 = 0XFC;   // 定時(shí)1ms
  28.     TL0 = 0X18;
  29.     EA = 1;       // 開(kāi)總中斷
  30.     ET0 = 1;      // 開(kāi)定時(shí)器0中斷
  31.     TR0 = 1;      // 啟動(dòng)定時(shí)器0
  32. }

  33. // 定時(shí)器0中斷服務(wù)程序
  34. void Timer0() interrupt 1
  35. {
  36.     static uint count = 0; // 計(jì)數(shù)器,用于控制狀態(tài)轉(zhuǎn)換
  37.         uchar displayDigit[4] = {0xFF, 0xFF, 0xFF, 0xFF};
  38.         uchar i ;
  39.     TH0 = 0XFC;   // 重裝初值
  40.     TL0 = 0X18;
  41.     count++;
  42.     if (count >= 1000) // 每秒更新一次狀態(tài)
  43.     {
  44.         count = 0;
  45.         switch (state)
  46.         {
  47.             case 0: // 南北綠燈,東西紅燈
  48.                 timeG--;
  49.                 if (timeG == 0)
  50.                 {
  51.                     state = 1;
  52.                     timeY = 3;
  53.                 }
  54.                 break;
  55.             case 1: // 南北黃燈閃爍,東西紅燈
  56.                 if (timeY > 0)
  57.                     timeY--;
  58.                 else
  59.                 {
  60.                     state = 2;
  61.                     timeR = 90;
  62.                 }
  63.                 break;
  64.             case 2: // 南北紅燈,東西綠燈
  65.                 timeR--;
  66.                 if (timeR == 0)
  67.                 {
  68.                     state = 3;
  69.                     timeY = 3;
  70.                 }
  71.                 break;
  72.             case 3: // 南北紅燈,東西黃燈閃爍
  73.                 if (timeY > 0)
  74.                     timeY--;
  75.                 else
  76.                 {
  77.                     state = 0;
  78.                     timeG = 20;
  79.                 }
  80.                 break;
  81.         }
  82.     }

  83.     // 數(shù)碼管顯示倒計(jì)時(shí)
  84. //    uchar displayDigit[4] = {0xFF, 0xFF, 0xFF, 0xFF}; // 初始化為全滅
  85.     switch (state)
  86.     {
  87.         case 0:
  88.             displayDigit[0] = distab[timeG / 10];
  89.             displayDigit[1] = distab[timeG % 10];
  90.             break;
  91.         case 1:
  92.             displayDigit[0] = distab[timeY / 10];
  93.             displayDigit[1] = distab[timeY % 10];
  94.             break;
  95.         case 2:
  96.             displayDigit[0] = distab[timeR / 10];
  97.             displayDigit[1] = distab[timeR % 10];
  98.             break;
  99.         case 3:
  100.             displayDigit[0] = distab[timeR / 10];
  101.             displayDigit[1] = distab[timeR % 10];
  102.             break;
  103.     }
  104. //  for (uchar i = 0; i < 4; i++)
  105.     for (i = 0; i < 4; i++)
  106.     {
  107.         P1 = SEG[i];
  108.         P0 = displayDigit[i];
  109.         delay_ms(1);
  110.     }
  111. }

  112. // 主函數(shù)
  113. void main()
  114. {
  115.     Timer0Init(); // 定時(shí)器初始化
  116.     timeG = 20;   // 初始時(shí)間設(shè)置
  117.     state = 0;    // 初始狀態(tài)
  118.     while (1)
  119.     {
  120.         // 主循環(huán)可以為空,因?yàn)樗胁僮鞫荚谥袛嘀型瓿?br />
  121.     }
  122. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

板凳
ID:1109793 發(fā)表于 2025-1-8 08:20 | 只看該作者
#define uchar unsigned char;后面不能加分號(hào)
回復(fù)

使用道具 舉報(bào)

地板
ID:344646 發(fā)表于 2025-1-8 10:55 | 只看該作者
宏定義有問(wèn)題
回復(fù)

使用道具 舉報(bào)

5#
ID:1110945 發(fā)表于 2025-1-8 12:04 | 只看該作者
define不是C語(yǔ)言關(guān)鍵字,它是編譯器里面的,也不是一個(gè)語(yǔ)句,所以不能加分號(hào)。
類似的還有好幾個(gè),都要注意。
回復(fù)

使用道具 舉報(bào)

6#
ID:887202 發(fā)表于 2025-1-9 15:49 | 只看該作者
#define uchar unsigned char//;
#define uint unsigned int//;
應(yīng)該寫(xiě)成
typedef  unsigned char uchar;
typedef  unsigned uint uint;
這里是因?yàn)槟愫竺娴拇a用了uchar,你是想把unsigned char類型重新命名為uchar,所以要用typedef
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表