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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4173|回復: 13
收起左側

問一個C51單片機的語法問題,編譯器提示TMOD, TH1,TL1,ET0重復定義

[復制鏈接]
ID:523537 發表于 2019-6-16 23:18 | 顯示全部樓層 |閱讀模式
/******問題描述**********/
   我只包含了一次reg52.h,但是編譯器提示TMOD, TH1,TL1,ET0等都重復定義了,我也不是很明白為什么會這樣。
lesson15_1.c(49): error C141: syntax error near '{'
lesson15_1.c(50): error C231: 'TMOD': redefinition
lesson15_1.c(50): error C231: 'TMOD': redefinition
lesson15_1.c(51): error C231: 'TH0': redefinition
lesson15_1.c(51): error C231: 'TH0': redefinition
lesson15_1.c(52): error C231: 'TL0': redefinition
lesson15_1.c(52): error C231: 'TL0': redefinition
lesson15_1.c(53): error C231: 'ET0': redefinition
lesson15_1.c(53): error C231: 'ET0': redefinition
lesson15_1.c(54): error C231: 'TR0': redefinition
lesson15_1.c(54): error C231: 'TR0': redefinition
lesson15_1.c(55): error C141: syntax error near '}'


/********************************源程序*********************************/
  1. #include <reg52.h>


  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define DataPort P0 //定義數據端口 程序中遇到DataPort 則用P0 替換

  5. uchar code DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  6. sbit Bit_Latch = P2^3;
  7. sbit Seg_Latch = P2^2;

  8. sbit infrared_receiver = P3^2;//P3^2是外部中斷0的引腳
  9. uchar irtime;//紅外全局變量

  10. bit irpro_ok, irok;//紅外數據處理標志位,紅外接收標志位
  11. uchar ircord[4], irdata[33];


  12. void IR_work();
  13. void IRcordpro();
  14. void Init_Timer0();
  15. void EX0_Init();


  16. void main()
  17. {
  18.         Init_Timer0();//定時器0初始化
  19.         EX0_Init();//外部中斷初始化
  20.         
  21.         DataPort = 0xfe;
  22.         Bit_Latch = 1;
  23.         Bit_Latch = 0;
  24.         
  25.         while(1)
  26.         {
  27.                 if(irok)
  28.                 {
  29.                         IRcordpro();
  30.                         irok = 0;
  31.                 }
  32.                 if(irpro_ok)//如果處理好后進行工作處理,如按對應的按鍵后顯示對應的數字等
  33.                 {
  34.                         IR_work();
  35.                 }
  36.         }
  37. }

  38. void Init_Timer0();
  39. {
  40.         TMOD = 0x02;
  41.         TH0 = 0x00;
  42.         TL0 = 0x00;
  43.         ET0 = 1;
  44.         TR0 = 0;
  45. }

  46. void EX0_Init()
  47. {
  48.         IT0 = 0;//外部中斷0下降沿觸發
  49.         EX0 = 1;
  50.         EA = 1;//開總中斷
  51. }

  52. void IRcordpro()
  53. {
  54.         uchar i, j, k;
  55.         uchar cord, value;
  56.         
  57.         k = 1;
  58.         for(i=0;i<4;i++)
  59.         {
  60.                 for(j=0;j<8;j++)
  61.                 {
  62.                         cord = irdata[k];
  63.                         if(cord > 7)
  64.                         {
  65.                                 value |= 0x80;
  66.                         }
  67.                         if(j<7)
  68.                         {
  69.                                 value >>= 1;
  70.                         }
  71.                         k++;
  72.                 }
  73.                 ircord[i] = value;
  74.                 value = 0;
  75.         }
  76.         irpro_ok = 1;
  77. }

  78. void IR_work()
  79. {
  80.         switch(ircord[2])
  81.         {
  82.                 case 0x0c: DataPort = DuanMa[1];break;
  83.                 case 0x18: DataPort = DuanMa[2];break;
  84.                 case 0x5e: DataPort = DuanMa[3];break;
  85.                 case 0x08: DataPort = DuanMa[4];break;
  86.                 case 0x1c: DataPort = DuanMa[5];break;
  87.                 case 0x5a: DataPort = DuanMa[6];break;
  88.                 case 0x42: DataPort = DuanMa[7];break;
  89.                 case 0x52: DataPort = DuanMa[8];break;
  90.                 case 0x4a: DataPort = DuanMa[9];break;
  91.                 default: break;
  92.         }
  93.         irpro_ok = 1;
  94. }


  95. void Timer0() interrupt 1 using 1//定時器0中斷
  96. {
  97.         irtime++;
  98. }

  99. void EX0_IR()  interrupt 0   //外部中斷0
  100. {
  101.         static uchar i;
  102.         static bit startflag;
  103.         
  104.         if(startflag)
  105.         {
  106.                 if(irtime < 63 && irtime > 33)
  107.                 {
  108.                         i = 0;
  109.                 }
  110.                 irdata[i] = irtime;
  111.                 irtime = 0;
  112.                 i++;
  113.                 if(i == 33)
  114.                 {
  115.                         irok = 1;
  116.                         i = 0;
  117.                 }
  118.                
  119.         }
  120.         else
  121.         {
  122.                 irtime = 0;
  123.                 startflag = 1;
  124.         }
  125. }
復制代碼

各位大佬走過路過進來幫我看看呀。
回復

使用道具 舉報

ID:388197 發表于 2019-6-17 03:30 | 顯示全部樓層
48行,把
void Init_Timer0();

后面的分號去掉就好了.
回復

使用道具 舉報

ID:523537 發表于 2019-6-17 21:29 | 顯示全部樓層
董董 發表于 2019-6-17 08:10
/*********************************************新的問題*******************************************/
...

我知道了,單片機默認電平為高電平,所以段選默認是打開的。
回復

使用道具 舉報

ID:207421 發表于 2019-6-17 05:33 | 顯示全部樓層
void Init_Timer0();
多了個分號(;)而已
回復

使用道具 舉報

ID:523537 發表于 2019-6-17 06:24 | 顯示全部樓層
不好意思,我找錯誤原因了,定義函數后面不能有分號。
回復

使用道具 舉報

ID:523537 發表于 2019-6-17 08:02 | 顯示全部樓層
cjm82 發表于 2019-6-17 03:30
48行,把
void Init_Timer0();

您說的對,是我自己疏忽了,多謝提醒。
回復

使用道具 舉報

ID:523537 發表于 2019-6-17 08:02 | 顯示全部樓層
lwh999995 發表于 2019-6-17 05:33
void Init_Timer0();
多了個分號(;)而已

您說的對,是我自己疏忽了,多謝提醒。
回復

使用道具 舉報

ID:164385 發表于 2019-6-17 08:06 | 顯示全部樓層
函數的后面多了個分號(;),函數是不能有的親
回復

使用道具 舉報

ID:523537 發表于 2019-6-17 08:10 | 顯示全部樓層
/*********************************************新的問題*******************************************/
我現在有個新問題,是這樣的,我在主函數里令P0為0xfe,并打開了位選芯片,只選擇第一個數碼管,但是我全程沒有打開段選信號,為什么我后面使用紅外接收器改變數碼管數字的時候會正確顯示,不是應該DataPort = 0xff(DataPort賦值一個數);Seg_Latch = 1; Seg_Latch = 0;這樣才會打開段選,然后才會顯示數字嗎?我上面的程序里除了定義sbit Seg_Latch = P2^2, 后面都沒有打開,但是居然也有用,我想請問下為啥啊?
回復

使用道具 舉報

ID:93224 發表于 2019-6-17 08:32 | 顯示全部樓層
應該加了兩個51的頭文件導致的
回復

使用道具 舉報

ID:207421 發表于 2019-6-17 10:05 | 顯示全部樓層
你的段選本來就開了,共陰數碼管兩位? 沒電路圖,別人都是瞎猜,說不定共陰都連一塊了。
回復

使用道具 舉報

ID:517466 發表于 2019-6-17 22:26 | 顯示全部樓層
學程序之前,一定要把用到的芯片的基本資料搞清楚。51系列單片機默認初始化后,P1,P2,P3端口的輸出都是高電平的。繼續深入的話,你還需要了解內部寄存器、內存區的初始化狀態是什么樣子,否則,程序看起來沒問題,實際一運行,可能還會出問題的。想要深入學習開發,基本知識一定要扎實。
回復

使用道具 舉報

ID:523537 發表于 2019-6-18 11:06 | 顯示全部樓層
suncat0504 發表于 2019-6-17 22:26
學程序之前,一定要把用到的芯片的基本資料搞清楚。51系列單片機默認初始化后,P1,P2,P3端口的輸出都是高電 ...

說的很有道理,我也是初學所以很多東西搞不清楚或者當時記得后面忘記了,以后要好好練基本功。
回復

使用道具 舉報

ID:123289 發表于 2019-6-18 13:41 | 顯示全部樓層
芯片手冊上都有,仔細讀一遍芯片手冊,你的收獲何止一點點。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区小视频 | 欧美日韩国产在线观看 | 日一区二区| 欧美极品在线 | 欧美黑人一区二区三区 | 欧美一区二区三区精品免费 | 亚洲视频第一页 | 国内精品久久久久久久影视简单 | 香蕉视频黄色 | 亚洲欧美国产毛片在线 | 福利视频网站 | 国产精品视频一区二区三区四区国 | 亚洲视频二区 | 国产精品欧美一区二区三区 | 国产伦一区二区三区久久 | 麻豆精品久久久 | 1区2区3区视频 | 中文字幕日韩一区 | 91热在线 | 涩涩视频网站在线观看 | 久草资源在线 | 亚洲www| 日本三级电影在线看 | 亚洲不卡在线观看 | 天天插天天操 | 国产一区二区三区在线 | 久久久久国产成人精品亚洲午夜 | 国产精品99免费视频 | 一区二区三区国产视频 | 日韩区| 日韩精品免费在线观看 | 国产情侣久久 | 国产精品黄色 | 日韩欧美字幕 | 欧美成人二区 | 成人国产在线观看 | 欧洲视频一区二区 | 奇米影视在线 | 99re在线视频免费观看 | 亚洲国产精品91 | 国产成人精品一区二区三区在线 |