找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1575|回復: 1
收起左側

模塊化使用sdcc編譯51單片機時報錯

[復制鏈接]
ID:1061336 發(fā)表于 2023-1-17 14:52 | 顯示全部樓層 |閱讀模式
截屏2023-01-17 14.49.41.png

問題是這樣的,我在學習51單片機的時候看到老師講了模塊化,所以自己寫了一個,然后結構圖在上面

  1. #include <8052.h>
  2. #include "../Sleep.h"
  3. #include "../nixie.h"



  4. void main() {
  5.     // P2_4=0;
  6.     // P2_3=0;
  7.     // P2_2=1;
  8.     P2 = 0x00;
  9.    

  10.     while (1) {

  11.         Nixie(1, 4);

  12.         Nixie(2, 6);

  13.         // Sleep(3);
  14.         // P2_2 = 0;

  15.     }


  16. }
復制代碼
在寫完這個代碼之后使用sdcc main.c發(fā)出警告
  1. qin@QindeMacBook-Pro 08 動態(tài)數(shù)碼管顯示 % sdcc main.c                                          

  2. ?ASlink-Warning-Undefined Global '_Nixie' referenced by module 'main'

  3. ?ASlink-Warning-Undefined Global '_Nixie_PARM_2' referenced by module 'main'
復制代碼

但還是可以生成文件的,然后使用stcgal -P stc89 -p /dev/tty.wchusbserial11140 main.ihx
編譯后,未能實現(xiàn)正常效果

以下為用到的文件
nixie.c
  1. #include "nixie.h"
  2. #include <8052.h>

  3. char num[18] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71, 0x00};


  4. void Nixie(unsigned char weizhi, unsigned char number) {

  5.     switch (weizhi)
  6.     {
  7.         case 1:
  8.             P2_4=1;P2_3=1;P2_2=1;
  9.             break;
  10.         case 2:
  11.             P2_4=1;P2_3=1;P2_2=0;
  12.             break;
  13.         case 3:
  14.             P2_4=1;P2_3=0;P2_2=1;
  15.             break;
  16.         case 4:
  17.             P2_4=1;P2_3=0;P2_2=0;
  18.             break;
  19.         case 5:
  20.             P2_4=0;P2_3=1;P2_2=1;
  21.             break;
  22.         case 6:
  23.             P2_4=0;P2_3=1;P2_2=0;
  24.             break;
  25.         case 7:
  26.             P2_4=0;P2_3=0;P2_2=1;
  27.             break;
  28.         case 8:
  29.             P2_4=0;P2_3=0;P2_2=0;
  30.             break;
  31.         default:
  32.             break;
  33.     }
  34.    
  35.     switch (number)
  36.     {
  37.     case 0:
  38.         P0=num[0];
  39.         break;
  40.     case 1:
  41.         P0=num[1];
  42.         break;
  43.     case 2:
  44.         P0=num[2];
  45.         break;
  46.     case 3:
  47.         P0=num[3];
  48.         break;
  49.     case 4:
  50.         P0=num[4];
  51.         break;
  52.     case 5:
  53.         P0=num[5];
  54.         break;
  55.     case 6:
  56.         P0=num[6];
  57.         break;
  58.     case 7:
  59.         P0=num[7];
  60.         break;
  61.     case 8:
  62.         P0=num[8];
  63.         break;
  64.     case 9:
  65.         P0=num[9];
  66.         break;
  67.     case 'A':
  68.         P0=num[10];
  69.         break;
  70.     case 'B':
  71.         P0=num[11];
  72.         break;
  73.     case 'C':
  74.         P0=num[12];
  75.         break;
  76.     case 'D':
  77.         P0=num[13];
  78.         break;
  79.     case 'E':
  80.         P0=num[14];
  81.         break;
  82.     case 'F':
  83.         P0=num[15];
  84.     case ' ':
  85.         P0=num[16];
  86.     default:
  87.         break;
  88.     }

  89.     Sleep(2);
  90.     P0 = 0x00;

  91. }
復制代碼



nixie.h
  1. #ifndef __NIXIE_H__
  2. #define __NIXIE_H__

  3. void Nixie(unsigned char weizhi, unsigned char number);

  4. #endif
復制代碼

Sleep.c
  1. void Sleep(unsigned int xms)
  2. {
  3.     unsigned char i, j;

  4.     while (xms)
  5.     {
  6.         i = 2;
  7.         j = 199;

  8.         do {
  9.             while (--j);
  10.         } while(--i);
  11.         xms--;
  12.     }

  13.     // _nop_();


  14. }


復制代碼



Sleep.h
  1. #ifndef __SLEEP_H__
  2. #define __SLEEP_H_


  3. void Sleep(unsigned int xms);

  4. #endif
復制代碼

系統(tǒng)是Macos,在這里請教一下各位大佬
回復

使用道具 舉報

ID:1087079 發(fā)表于 2023-7-3 19:59 | 顯示全部樓層
用的是platformIo嗎?看你這個項目結構是不是lib放錯位置了,
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表