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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1754|回復(fù): 0
收起左側(cè)

51單片機 幾個未定義錯誤 麻煩大佬幫忙看看具體怎么定義

[復(fù)制鏈接]
ID:656393 發(fā)表于 2020-4-12 15:17 | 顯示全部樓層 |閱讀模式
51單片機,基本功能已全部完成,有幾個未定義錯誤,麻煩大佬幫忙看看具體怎么定義謝謝!
電路工程文件和源程序在附件里
要實現(xiàn)的功能如下:
密碼檢測狀態(tài):系統(tǒng)啟動時,進入密碼檢測狀態(tài),默認顯示PA----
                      若正確輸入4位密碼時,進入學(xué)號顯示狀態(tài)
                      若輸入密碼錯誤,數(shù)碼管顯示EE----,蜂鳴器在密碼錯誤時發(fā)生報警,仍處于密碼檢測狀態(tài)
學(xué)號顯示狀態(tài):學(xué)號顯示nE+學(xué)號后四位,一直閃爍直到離開本狀態(tài)
                      按下按鍵*,可實現(xiàn)工作狀態(tài)切換
DAC輸出狀態(tài):DAC輸出狀態(tài)啟動DAC0832,實時顯示dAC+3位輸出值,默認值為255

單片機源程序如下:
  1. #include<reg51.h>

  2. sbit BEEP = P2^3;
  3. sbit DACS = P2^4;
  4. sbit DAWR = P2^5;
  5. sbit DULA = P2^6;
  6. sbit WELA = P2^7;


  7. unsigned char code segCC[] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};//共陰數(shù)碼管段碼
  8. unsigned char code segCA[] = { 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};//共陽數(shù)碼管段碼

  9. //關(guān)鍵性變量
  10. unsigned char sysflg; //系統(tǒng)狀態(tài)變量,0-密碼檢測,1-密碼錯誤檢測,2-學(xué)號顯示,3-DAC轉(zhuǎn)換

  11. //3-1、增加狀態(tài)變量,修改顯示函數(shù)Display0()
  12. unsigned char segWE6[] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20};
  13. unsigned char segDU6[] = { 0x8C, 0x88, 0xBF, 0xBF, 0xBF, 0xBF};
  14. unsigned char segDU2[] = { 0xAB, 0x86, 0xC0, 0xF9, 0xA4, 0xB0};
  15. unsigned char segDU3[] = { 0xA1, 0x88, 0xC6, 0xA4, 0x92, 0x92};


  16. void Delay(unsigned int i)//延時函數(shù)
  17. {
  18.                 unsigned int j;
  19.                 while(i--)
  20.                 {
  21.                                 for(j=0;j<32;j++);                //延時
  22.                 }
  23. }


  24. //-----------------------顯示密碼檢測界面-----------------------//
  25. void Display0()
  26. {
  27.                 char i;
  28.                 for( i = 0; i < 6; i++)
  29.                 {
  30.                 DULA = 0;
  31.                 WELA = 0;
  32.                 P0 = segWE6[i]; WELA = 1; WELA = 0;
  33.                 P0 = segDU6[i]; DULA = 1; DULA = 0;
  34.                 Delay(5);
  35.                 }
  36. }

  37. //-----------------------顯示學(xué)號界面-----------------------//
  38. void Display2()
  39. {
  40.         char i;
  41.         for(i = 0; i < 6; i++)
  42.         {
  43.                 DULA = 0;WELA = 0;
  44.                 P0 = segWE6[i];WELA = 1;WELA = 0;
  45.                 P0 = segDU2[i];DULA = 1;DULA = 0;
  46.                 Delay(5);
  47.         }
  48. }

  49. //-----------------------顯示dac界面-----------------------//
  50. void Display3()
  51. {
  52.                 char i;
  53.                 for( i = 0; i < 6; i++)
  54.                 {
  55.                 DULA = 0;WELA = 0;
  56.                 P0 = segWE6[i]; WELA = 1; WELA = 0;
  57.                 P0 = segDU3[i]; DULA = 1; DULA = 0;
  58.                 Delay(5);
  59.                 }
  60. }

  61. //------------按鍵掃描函數(shù),返回值為對應(yīng)的按鍵編碼--------------//
  62. unsigned char GetKey()
  63. {       
  64.                 unsigned char i,j,k = 0,l;
  65.                 unsigned char KeyScanCode[] = { 0xef, 0xdf, 0xbf, 0x7f};                //行列掃描的行列碼
  66.                 unsigned char KeyCodeTable[] = { 0xee, 0xed, 0xeb, 0xde, 0xdd, 0xdb, 0xbe, 0xbd, 0xbb, 0x7e, 0x7d, 0x7b};
  67.                
  68.                 P3 = 0x0f;
  69.                 if(P3 != 0x0f)                //如果有按鍵被按下
  70.                 {
  71.                         for( i = 0; i < 4; i++)                //依次進行掃描
  72.                         {
  73.                                 P3 = KeyScanCode[i];
  74.                                 for( j = 0; j < 3; j++)
  75.                                 {
  76.                                         k = i*3+j;                                                //計算對應(yīng)的按鍵編碼
  77.                                         if(P3 == KeyCodeTable[k])
  78.                                         {
  79.                                                 l = k+1;                                                        //根據(jù)鍵值調(diào)整到對應(yīng)按鍵
  80.                                                 if(l == 11)        l = 0;                //按鍵0,調(diào)整鍵值為0
  81.                                                 if(l == 12)        l = 11;                //按鍵#,調(diào)整鍵值為11,按鍵*鍵值仍為10
  82.                                                 return        l;                                        //返回按鍵編碼
  83.                                         }
  84.                                 }
  85.                         }
  86.                 }
  87.                 else
  88.                 {
  89.                         return 0xFF;                                        //或者返回0xff
  90.                 }
  91.                
  92.                 return 0;
  93. }

  94. void main(void)
  95. {
  96.                 unsigned char code pwd[]={1,2,3,4};                                //存儲的密碼
  97.                 unsigned char keyA = 0,keyB = 0,segidx = 0,errflg = 0,sysCNT = 0;
  98.                 while(1)
  99.                 {
  100.                 //-----1、數(shù)碼管顯示部分-----//
  101.                 if(sysflg == 0)
  102.                 {
  103.                                 segDU6[0] = 0x8C;
  104.                                 segDU6[1] = 0x88;
  105.                                 Display0();
  106.                 }
  107.                 else if(sysflg == 1)
  108.                 {
  109.                                 segDU6[0] = 0x86;
  110.                                 segDU6[1] = 0x86;
  111.                                 Display0();
  112.                                 BEEP = 0;
  113.                                 Delay(5);
  114.                                 BEEP = 1;
  115.                                 Delay(3);
  116.                 }
  117.                 else if(sysflg == 2)
  118.                 {
  119.                         P1=0;                        //關(guān)閉DAC
  120.                         DACS=1;
  121.                         DAWR=1;
  122.                        
  123.                         //閃爍顯示學(xué)號
  124.                         if(sysCNT < 200)Display2();
  125.                         else
  126.                         {
  127.                                 DULA = 0;WELA = 0;
  128.                                 P0 = 0;WELA = 1;WELA = 0;
  129.                                 P0 = 0;DULA = 1;DULA = 0;
  130.                         }
  131.                 }
  132.                 else if(sysflg == 3)
  133.                 {
  134.                                 DACS=0;                        //開啟DAC
  135.                                 DAWR=0;
  136.                                 P1=DAC;
  137.                                 Display3();
  138.                 }
  139.                
  140.                
  141.                 //-----2、按鍵檢測部分-----//
  142.                 keyA = GetKey();
  143.                 if(keyB != keyA)
  144.                 {
  145.                                 keyB = keyA;
  146.                                 if((keyA >= 0) && (keyA < 10))
  147.                                 {                if(sysflg <= 1)
  148.                                                 {                segDU6[segidx+2] = 0xBD;
  149.                                                                 if(keyA != pwd[segidx])        errflg = 1;
  150.                        
  151.                                                                 segidx++;
  152.                                
  153.                                                                 if(segidx == 4)
  154.                                                                 {
  155.                                                                         segidx = 0;
  156.                                        
  157.                                                                         if(errflg == 1)        sysflg = 1;
  158.                                                                         else if(errflg == 1)        sysflg = 2;
  159.                                        
  160.                                                                         errflg = 0;
  161.                                                                         segDU6[2] = 0xBF;segDU6[3] = 0xBF;
  162.                                                                         segDU6[4] = 0xBF;segDU6[5] = 0xBF;
  163.                                                                 }
  164.                                                 }
  165.                                                 else if(sysflg == 3)
  166.                                                 {                segDU3[segidx+3] = segCA[keyA];
  167.                                                                 DACtmp = DACtmp*10+keyA;
  168.                                                        
  169.                                                                 segidx++;
  170.                                
  171.                                                                 if(segidx == 3)
  172.                                                                 {
  173.                                                                         segidx = 0;
  174.                                                        
  175.                                                                         if(DACtmp >=255)
  176.                                                                         {                DACtmp = 255;
  177.                                                                                         segDU3[3] = 0xA4;
  178.                                                                                         segDU3[4] = 0x92;
  179.                                                                                         segDU3[5] = 0x92;
  180.                                                                         }
  181.                                                                         DAC = DACtmp;
  182.                                                                         DACtmp = 0;
  183.                                                                 }
  184.                                                 }
  185.                                 else if(keyA == 10)
  186.                                 {
  187.                                                 if(sysflg == 2)        sysflg = 3;
  188.                                                 else if(sysflg == 3)        sysflg = 2;
  189.                                 }
  190.                                 else if(keyA == 11)
  191.                                 {                                                        }
  192.                 }
  193.                

  194.                 //-----3、延時計數(shù)部分-----//                       
  195.                         sysCNT++;
  196.                         if(sysCNT == 500)        sysCNT = 0;
  197.                         Delay(5);
  198.                 }       
  199.         }
  200. }
復(fù)制代碼

所有資料51hei提供下載:
2020.4.12.rar (39.5 KB, 下載次數(shù): 13)

回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: www成年人视频 | 国产蜜臀97一区二区三区 | 91免费观看视频 | 伊人av在线播放 | 久久久www成人免费精品 | 久久久久国产精品 | 精品国产区 | www.久久99 | 狠狠综合网 | 91原创视频 | 日本特黄特色aaa大片免费 | 91av小视频 | 91小视频| 亚洲福利网 | 色婷婷一区二区三区四区 | 国产午夜av片 | 一区二区三区四区不卡视频 | 五月婷六月丁香 | 久久精品亚洲精品国产欧美kt∨ | 天天爱av| 国产在线小视频 | 91久久久久久 | 免费成人高清在线视频 | 国产精品区二区三区日本 | 成人午夜网站 | 欧美一a | 一区二区三区视频免费观看 | 欧美在线观看一区 | 国产成人在线播放 | 国产日韩欧美一区二区在线播放 | 日韩精品一区二 | 国产成人综合网 | 亚洲视频三 | 日韩视频在线观看一区二区 | 99精品视频一区二区三区 | 成人做爰www免费看 午夜精品久久久久久久久久久久 | 久久综合久| 亚洲区一区二 | 午夜久久久 | www.日本在线 | 黄免费观看 |