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

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

QQ登錄

只需一步,快速開始

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

單片機(jī)俄羅斯方塊問題 io設(shè)定在頭文件里不知道怎么改

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:199694 發(fā)表于 2017-5-16 17:31 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
10黑幣
新人小白,在論壇看到一個(gè)大神的51單片機(jī)俄羅斯方塊程序,可是在開發(fā)板上運(yùn)行,io設(shè)定在頭文件里不知道怎么改?有時(shí)候用源代碼還有未定義錯(cuò)誤,希望大家給點(diǎn)具體    詳細(xì)  建議。
* IO口設(shè)定:按鍵
                        sbit key_sr_left=P3^7;
                        sbit key_sr_turn=P3^6;
                        sbit key_sr_right=P3^5;
                        sbit key_sr_down=P3^4;
                        LCD12864
                        sbit RS_Port=P1^0;
                        sbit RW_Port=P1^1;
                        sbit E_Port=P2^5;
                        sbit PSB_Port=P1^2;
                        sbit RST_Port=P1^4;
                        數(shù)碼管鎖存器
                        sbit dula=P2^6;
                        sbit wela=P2^7;

*******************************************************/以下為c語(yǔ)言程序代碼

  1. /*****************************頭文件區(qū)*****************************************************/
  2. #include<reg52.h>
  3. //#include"STC15F2K60S2.h"
  4. #include"task_key.h"
  5. #include"task_activation.h"
  6. #include"12864b.h"
  7. #include"TaskBlock.h"
  8. #include"Block.h"
  9. /*****************************宏定義區(qū)*****************************************************/

  10. //需要判斷是否刷新的任務(wù)總數(shù)
  11. //1KeyLeft,2KeyTurn,3KeyRight,4KeyDown,5TaskGoingDown,6KeyPause
  12. #define NUM_TASK_FLAG 7
  13. //需要定時(shí)刷新的任務(wù)總數(shù)
  14. //1TaskGoingDown,2KeyService
  15. #define NUM_TASK_REFRESH 3
  16. //刷新頻率
  17. #define TIME_PER_SEC 200                                                        //每次進(jìn)入中斷的頻率,200Hz
  18. #define TIME_CLOCK 11059200                                                        //晶振頻率
  19. #define TIME_KEY_SERVICE_50HZ  TIME_PER_SEC/50          //按鍵服務(wù)頻率,0.02s
  20. #define TIME_TASKGOINGDOWN_2HZ  TIME_PER_SEC/2          //下落頻率,0.5s

  21. /******************************子函數(shù)聲明區(qū)***********************************************/

  22. void initial_myself(void);   
  23. void initial_peripheral(void);
  24. void delay100ms(void);        

  25. /******************************全局變量定義區(qū)***********************************************/
  26. unsigned char uc_state=1;//狀態(tài)標(biāo)示:1歡迎界面,2等待開始界面,3下落界面,4死亡界面,5暫停界面
  27. enum Block{S1,S2,Z1,Z2,L1,L2,L3,L4,J1,J2,J3,J4,I1,I2,O1,T_1,T_2,T_3,T_4}enumBlock;//方塊編號(hào)
  28. unsigned char ucBlockNow=0;//當(dāng)前方塊
  29. unsigned char ucBlockNext=0;//下一個(gè)方塊

  30. unsigned char ucFlagScreenChange=1;//界面變更標(biāo)志,界面更改時(shí)置1,激活task_activation

  31. unsigned char ucCoordinate[2];//方塊的旋轉(zhuǎn)點(diǎn)坐標(biāo),橫H,豎S
  32. unsigned char xdata ucxMap[10][20];//整張屏幕的標(biāo)記地圖,用來記錄未消除方塊位置,有方塊則為1
  33. unsigned char ucxBlockPosition[4][2];//方塊的4個(gè)小方塊坐標(biāo),[0][0],[0][1]為旋轉(zhuǎn)點(diǎn)坐標(biāo)H,S

  34. unsigned int uc_delay_task_cnt[NUM_TASK_REFRESH];//任務(wù)刷新延遲
  35. unsigned char uc_flag_taskrefresh[NUM_TASK_FLAG];//任務(wù)刷新標(biāo)志

  36. unsigned long int ucScore=0;//得分

  37. /******************************主函數(shù)開始***********************************************/
  38. void main(void)
  39. {
  40.         unsigned char i=0;
  41.         initial_myself();
  42.         delay100ms();   
  43.     initial_peripheral();


  44.         while(1)
  45.         {
  46.                 if(ucFlagScreenChange==1)//界面變更標(biāo)志為1時(shí),進(jìn)行任務(wù)激活,防止一直刷新界面
  47.                 {
  48.                         task_activation(uc_state);
  49.                         ucFlagScreenChange=0;
  50.                 }
  51.                 if(uc_delay_task_cnt[2]==0)//20HZ頻率刷新key_service
  52.                 {
  53.                         task_key_service();
  54.                         ET0=0;//在中斷中也有可能變化的變量在更改前時(shí)先關(guān)閉中斷
  55.                         uc_delay_task_cnt[2]=TIME_KEY_SERVICE_50HZ;//延遲重置
  56.                         ET0=1;
  57.                 }
  58.                 if(uc_flag_taskrefresh[5]&&uc_delay_task_cnt[1]==0)//需要時(shí),2HZ頻率刷新TaskGoingDown
  59.                 {
  60.                         if(!TaskGoingDown())//下落失敗
  61.                         {
  62.                                 //將當(dāng)前方塊位置寫入Map
  63.                                 for(i=0;i<4;i++)
  64.                                 {
  65.                                         ucxMap[ ucxBlockPosition[i][0] ][ ucxBlockPosition[i][1] ]=1;
  66.                                 }
  67.                                 //調(diào)用消除方塊函數(shù)
  68.                                 TaskClear();
  69.                         }
  70.                         ET0=0;//在中斷中也有可能變化的變量在更改前時(shí)先關(guān)閉中斷
  71.                         uc_delay_task_cnt[1]=TIME_TASKGOINGDOWN_2HZ;//延遲重置
  72.                         ET0=1;
  73.                 }

  74.         }
  75. }

  76. //中斷函數(shù)
  77. void timer0(void) interrupt 1
  78. {
  79.         unsigned char i;
  80.         TR0=0;
  81.         TH0=255-TIME_CLOCK/TIME_PER_SEC/12/256;
  82.         TL0=255-TIME_CLOCK/TIME_PER_SEC/12%256;
  83.         //task_delay[]減到0時(shí),相應(yīng)的函數(shù)準(zhǔn)備就緒
  84.         for(i=0;i<NUM_TASK_REFRESH;i++)
  85.         {
  86.                 if(uc_delay_task_cnt[i]!=0)//延遲不為0時(shí)才減
  87.                         {uc_delay_task_cnt[i]--;};
  88.         }
  89.         task_key_scan();//按鍵掃描函數(shù),放在中斷中,保證準(zhǔn)時(shí)掃描
  90.         TR0=1;
  91. }

  92. //初始化區(qū)
  93. void initial_myself(void)//第一區(qū) 初始化單片機(jī)
  94. {
  95.         unsigned char i;
  96.         for(i=0;i<NUM_TASK_REFRESH;i++)uc_delay_task_cnt[i]=0;//初始化讓所有任務(wù)就緒
  97.         TMOD=0X21; //定時(shí)器0為16位不自動(dòng)重裝,用來定時(shí);定時(shí)器1為8位自動(dòng)重裝,用來產(chǎn)生隨機(jī)數(shù)
  98.         TH0=255-TIME_CLOCK/TIME_PER_SEC/12/256;
  99.         TL0=255-TIME_CLOCK/TIME_PER_SEC/12%256;
  100.         TH1=0;
  101.         TL1=0;
  102. }

  103. void initial_peripheral(void) //第二區(qū) 初始化外圍
  104. {
  105.         Lcd_Init();//初始化12864
  106.         EA=1;     //開總中斷
  107.         ET0=1;    //允許定時(shí)器0中斷,定時(shí)器1無需開啟中斷
  108.     TR0=1;    //啟動(dòng)定時(shí)器0
  109.     TR1=1;         //啟動(dòng)定時(shí)器1
  110. }

  111. void delay100ms(void)                //@11.0592MHz
  112. {
  113.         unsigned char i, j, k;

  114.         ;
  115.         ;
  116.         i = 5;
  117.         j = 52;
  118.         k = 195;
  119.         do
  120.         {
  121.                 do
  122.                 {
  123.                         while (--k);
  124.                 } while (--j);
  125.         } while (--i);
  126. }
復(fù)制代碼

51黑論壇_俄羅斯方塊全部源碼.zip

147.88 KB, 下載次數(shù): 4

最佳答案

查看完整內(nèi)容

1、打開頭文件,參照其它句子改動(dòng)。 2、未定義的就自己定義。 從樓主的提問中,看得出:樓主對(duì)單片機(jī)的內(nèi)部構(gòu)成、結(jié)構(gòu)還了解得不夠充分。 C的編譯器,對(duì)單片機(jī)的結(jié)構(gòu)很明確,但就是不知道其數(shù)量及地址分布,遇到了就報(bào)錯(cuò)。需要程序員用頭文件的方式或者自定義的方式將用到的變量告訴它:變量的地址是如何分配的。 例如:你用到P0,如果沒有定義P0的地址,就報(bào)錯(cuò)。通常文件中會(huì)定義P0對(duì)應(yīng)80H單元。 再例如:你用到TL2,這個(gè)在8 ...
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:123289 發(fā)表于 2017-5-16 17:31 | 只看該作者
1、打開頭文件,參照其它句子改動(dòng)。
2、未定義的就自己定義。
從樓主的提問中,看得出:樓主對(duì)單片機(jī)的內(nèi)部構(gòu)成、結(jié)構(gòu)還了解得不夠充分。
C的編譯器,對(duì)單片機(jī)的結(jié)構(gòu)很明確,但就是不知道其數(shù)量及地址分布,遇到了就報(bào)錯(cuò)。需要程序員用頭文件的方式或者自定義的方式將用到的變量告訴它:變量的地址是如何分配的。
例如:你用到P0,如果沒有定義P0的地址,就報(bào)錯(cuò)。通常文件中會(huì)定義P0對(duì)應(yīng)80H單元。
再例如:你用到TL2,這個(gè)在8051頭文件中是沒有定義的,而在8052頭文件中才有定義。如果這時(shí)你引用51頭文件編譯就會(huì)報(bào)錯(cuò),如果你自己再定義TL2對(duì)應(yīng)地址為CCH,編譯就通過了。當(dāng)然引用52的頭文件,也會(huì)通過。
有意思的是你定義TL2對(duì)應(yīng)地址其它地址,編譯也會(huì)通過,但是這是個(gè)定義不符合芯片實(shí)際的定義,將產(chǎn)生不可預(yù)期的結(jié)果。這就里要盡可能引用頭文件的原因。自定義可能定義錯(cuò)了,但自定義靈活!頭文件是前人的積累,幾乎不會(huì)錯(cuò)。
回復(fù)

使用道具 舉報(bào)

板凳
ID:201483 發(fā)表于 2017-5-16 18:37 | 只看該作者
直接在頭文件里面改不就行了。用到哪個(gè)改哪個(gè)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久综合网 | 韩日在线视频 | 午夜丰满寂寞少妇精品 | 日韩成人av在线 | 亚洲精品一区在线观看 | 国产精品一级 | 青青久久av北条麻妃海外网 | 亚洲精品一区二区 | 亚洲高清免费观看 | 国产高清视频在线观看播放 | 国产成人aⅴ | 精品久久一区 | 久久精品视频12 | 精品久久久久一区二区国产 | 免费一区 | av在线免费网 | 午夜影院 | 99热首页| 欧美xxxx在线 | 在线日韩不卡 | 爱草视频| 国产精品久久久久无码av | 欧美成ee人免费视频 | 日韩成人一区 | 久久国产秒 | 日韩免费视频一区二区 | 日韩精品一区二区三区中文在线 | 成人中文字幕在线观看 | 天天澡天天狠天天天做 | 国产一区2区 | 91精品国产91久久久久游泳池 | 久久久久国色av免费观看性色 | 久久99视频免费观看 | 国产精品人人做人人爽 | 69热视频在线观看 | 成年男女免费视频网站 | 日韩理论电影在线观看 | 在线观看中文字幕亚洲 | 国产精品一区在线 | 在线成人 | 国产一区二区欧美 |