新手請教問題,關于數碼管顯示問題我照著視頻寫的代碼,想著做模塊化,結果出錯了,求助大神解答,謝謝
功能:數碼管顯示服務
變量:parm
問題一:在頭文件定義了四個變量extern unsigned char parm1,parm2,parm3,parm4; 在主函數賦值,發現附上的值并不會按照標號顯示,按照的是變量的順序顯示
問題二:每次在主函數給parm幅值都要加上顯示服務函數(每一次幅值跟著一次顯示函數),不然會出錯,為什么不能一次性給多個parm幅值再顯示
在主函數給要顯示的數字賦值
結果應該一至四窗口顯示的是 4 3 2 1
EG[FMRM`}M0U@N7`Q%2.png (78.02 KB, 下載次數: 75)
下載附件
2022-1-19 09:25 上傳
但是最后的仿真結果是 1 2 3 4 按照在頭文件的變量順序顯示的
第一個數字是窗口 后面是要顯示的數字
T4ABQ]L$$]T89NUY[I[%X`J.png (8.2 KB, 下載次數: 95)
下載附件
2022-1-19 09:26 上傳
顯示函數代碼:
按理說parm1的數值應該在窗口零
9X}J361`AZBQ2$`5_X)X8.png (47.64 KB, 下載次數: 85)
下載附件
2022-1-19 09:27 上傳
完整代碼
顯示服務函數
- #include "DISSERVICE.H"
- unsigned char wnd; //窗口
- void dis_Service()
- {
- unsigned int i;
- switch (wnd)
- {
- case 0:
- LEDBUF[0]= 0;
- LEDBUF[1]= 22;
- LEDBUF[2]= parm1/10;
- LEDBUF[3]= parm1%10;
- for(i=0;i<1000;i++)
- {
- Display();
- }
- wnd++;
- break;
- case 1:
- LEDBUF[0]= 1;
- LEDBUF[1]= 22;
- LEDBUF[2]= parm2/10;
- LEDBUF[3]= parm2%10;
- for(i=0;i<1000;i++)
- {
- Display();
- }
- wnd++;
- break;
- case 2:
- LEDBUF[0]= 2;
- LEDBUF[1]= 22;
- LEDBUF[2]= parm3/10;
- LEDBUF[3]= parm3%10;
- for(i=0;i<1000;i++)
- {
- Display();
- }
- wnd++;
- break;
- case 3:
- LEDBUF[0]= 3;
- LEDBUF[1]= 22;
- LEDBUF[2]= parm4/10;
- LEDBUF[3]= parm4%10;
- for(i=0;i<1000;i++)
- {
- Display();
- }
- wnd=0;
- break;
- default:break;
- }
- }
復制代碼 頭文件:
- #ifndef __DISSERVICE_H__
- #define __DISSERVICE_H__
- #include "DISPLAY.H"
- extern unsigned char parm1,parm2,parm3,parm4;
- void dis_Service();
- #endif
復制代碼 主函數:
- #include <REGX52.H>
- #include "DELAY.H"
- #include "DISPLAY.H"
- #include "DISSERVICE.H"
- void main()
- {
- unsigned int i;
- for(i=0;i<1000;i++)
- {
- Display();
- }
- while(1)
- {
- parm4 = 1;
- dis_Service();
- parm3 = 2;
- dis_Service();
- parm2 = 3;
- dis_Service();
- parm1 = 4;
- dis_Service();
- }
- }
復制代碼 代碼附件:
數碼管顯示.zip
(110.73 KB, 下載次數: 7)
2022-1-19 09:20 上傳
點擊文件名下載附件
|