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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

這是定義的問題嗎,用的c語言,怎么都改不對

[復制鏈接]
跳轉到指定樓層
樓主
ID:1142693 發表于 2025-1-7 21:36 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式


#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; // 東西紅燈

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

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

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

// 定時器0中斷服務程序
void Timer0() interrupt 1
{
    static uint count = 0; // 計數器,用于控制狀態轉換
    TH0 = 0XFC;   // 重裝初值
    TL0 = 0X18;
    count++;
    if (count >= 1000) // 每秒更新一次狀態
    {
        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;
        }
    }

    // 數碼管顯示倒計時
    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);
    }
}

// 主函數
void main()
{
    Timer0Init(); // 定時器初始化
    timeG = 20;   // 初始時間設置
    state = 0;    // 初始狀態
    while (1)
    {
        // 主循環可以為空,因為所有操作都在中斷中完成
    }
}
顯示4.c(9): error C129: missing ';' before 'code'。
我搜到是沒有定義就在開頭加了
#define uchar unsigned char;
#define uint unsigned int;
結果顯示4.c(109): error C202: 'P0': undefined identifier

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

使用道具 舉報

沙發
ID:1133081 發表于 2025-1-8 06:48 | 只看該作者
改這樣就可以通過編譯
  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. // 數碼管顯示相關
  12. uchar code SEG[4] = {0x01, 0x02, 0x04, 0x08}; // 數碼管位選
  13. uchar code distab[10] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}; // 數碼管顯示0~9
  14. uint timeG, timeY, timeR; // 各燈顯示時間
  15. uint state; // 狀態標志

  16. // 延時函數
  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. // 定時器0初始化
  24. void Timer0Init(void)
  25. {
  26.     TMOD |= 0X01; // 定時器0模式1,16位定時器
  27.     TH0 = 0XFC;   // 定時1ms
  28.     TL0 = 0X18;
  29.     EA = 1;       // 開總中斷
  30.     ET0 = 1;      // 開定時器0中斷
  31.     TR0 = 1;      // 啟動定時器0
  32. }

  33. // 定時器0中斷服務程序
  34. void Timer0() interrupt 1
  35. {
  36.     static uint count = 0; // 計數器,用于控制狀態轉換
  37.         uchar displayDigit[4] = {0xFF, 0xFF, 0xFF, 0xFF};
  38.         uchar i ;
  39.     TH0 = 0XFC;   // 重裝初值
  40.     TL0 = 0X18;
  41.     count++;
  42.     if (count >= 1000) // 每秒更新一次狀態
  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.     // 數碼管顯示倒計時
  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. // 主函數
  113. void main()
  114. {
  115.     Timer0Init(); // 定時器初始化
  116.     timeG = 20;   // 初始時間設置
  117.     state = 0;    // 初始狀態
  118.     while (1)
  119.     {
  120.         // 主循環可以為空,因為所有操作都在中斷中完成
  121.     }
  122. }
復制代碼
回復

使用道具 舉報

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

使用道具 舉報

地板
ID:344646 發表于 2025-1-8 10:55 | 只看該作者
宏定義有問題
回復

使用道具 舉報

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

使用道具 舉報

6#
ID:887202 發表于 2025-1-9 15:49 | 只看該作者
#define uchar unsigned char//;
#define uint unsigned int//;
應該寫成
typedef  unsigned char uchar;
typedef  unsigned uint uint;
這里是因為你后面的代碼用了uchar,你是想把unsigned char類型重新命名為uchar,所以要用typedef
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品第一 | 亚洲最大成人综合 | 国产精品视频免费观看 | 国产精品视频免费观看 | 午夜精品久久 | 国产91精品久久久久久久网曝门 | 久久久无码精品亚洲日韩按摩 | 久久久久久91 | 精品久久久久久久 | 波多野结衣中文视频 | 视频一区二区中文字幕 | 欧美日韩综合视频 | 国产精品久久久久久影院8一贰佰 | 欧美福利精品 | 99在线观看视频 | 日韩视频高清 | 又黄又色| 欧美精品一区二区三区四区五区 | 亚洲有码转帖 | 欧美一级黄色片免费观看 | 免费国产一区二区视频 | 粉嫩一区二区三区国产精品 | 久久精品久久久久久 | 免费观看一级特黄欧美大片 | 日本免费视频 | 日韩视频区 | 午夜在线免费观看 | 操久久 | 欧美性吧 | 99精品国自产在线 | 欧美色999 | 色精品| 精品久久久久一区二区国产 | 精产嫩模国品一二三区 | 一级毛片视频在线观看 | 精品福利在线 | 久久久www成人免费精品 | 一级毛片免费完整视频 | 久久福利网站 | 欧美一区二区三区在线观看 | 亚洲自拍偷拍视频 |