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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

10 數(shù)模/模數(shù)轉(zhuǎn)換類單片機系統(tǒng)& 15 電壓表類單片機系統(tǒng)(proteus仿真+keil5)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:628491 發(fā)表于 2019-12-16 10:19 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機仿真實習(xí)任務(wù):
10 數(shù)模/模數(shù)轉(zhuǎn)換類單片機系統(tǒng)&15 電壓表類單片機系統(tǒng)


  1. //<程序名>:數(shù)字電壓表                                                                                                                                                  **
  2. //<功能>:使用LCD顯示被檢測電壓,精度為0.05V,范圍是0~5V。                                                                         **
  3. #include <reg51.h>

  4. #define TIME0H 0x3C
  5. #define TIME0L 0xB0
  6. typedef unsigned char uchar;
  7. typedef unsigned int  uint;


  8. uchar uc_Clock=0;                //定時器0中斷計數(shù)
  9. bit b_DATransform=0;

  10. sbit START=P2^3;                         //ATART,ALE接口。0->1->0:啟動AD轉(zhuǎn)換。
  11. sbit EOC=P2^4;                           //轉(zhuǎn)換完畢由0變1.
  12. #define OUTPORT P1

  13. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  14. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<LCD1602<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  15. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

  16. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  17. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<LCD設(shè)置函數(shù)>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  18. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  19. #define vdInitialize()        vWriteCMD(0x01);vWriteCMD(0x38);vWriteCMD(0x0C);                //初始化
  20. sbit LCDRS=P2^0;                                                                   //寄存器選擇信號:
  21.                                                                                                    //                0--數(shù)據(jù)寄存器;
  22.                                                                                                    //                1--指令寄存器。
  23. sbit LCDRW=P2^1;                                                                   //讀寫信號:
  24.                                                                                                    //                1--讀LCD;
  25.                                                                                                    //                0--寫LCD。
  26. sbit LCDE=P2^2;                                                                   //片選信號,當輸入下降沿信號時,
  27.                                                                                                    //執(zhí)行指令或傳送數(shù)據(jù)。
  28. #define LCDPORT P0                                                                   //LCD數(shù)據(jù)接口。
  29. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

  30. //***************************************************//
  31. //***********************子函數(shù)定義*******************//
  32. //***************************************************//
  33. void vShowVoltage(uint uiNumber);
  34. unsigned int uiADTransform();


  35. void timeint0();


  36. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<寫數(shù)據(jù)命令函數(shù)>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  37. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  38. void vDelay();                                                                           //延時函數(shù)。
  39. void vWriteCMD(unsigned char ucCommand);                   //把1個命令寫入LCD。
  40. void vWriteData(unsigned char ucData);                           //把1個數(shù)據(jù)寫入LCD。
  41. void vShowOneChar(unsigned char ucChar);
  42. void vShowChar(unsigned char ucaChar[]);

  43. //***************************************************//
  44. //***************************************************//

  45. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  46. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<把電壓顯示在LCD上>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  47. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  48. void vShowVoltage(uint uiNumber)
  49. {
  50.         uchar ucaNumber[3],ucCount;
  51.         if(uiNumber>999)                                       
  52.                 uiNumber=999;
  53.         ucaNumber[0]=uiNumber/100;                                                                //把計算數(shù)字的每個位存入數(shù)組。
  54.         ucaNumber[1]=(uiNumber-100*(int)ucaNumber[0])/10;                                                       
  55.         ucaNumber[2]=uiNumber-100*(int)ucaNumber[0]-10*ucaNumber[1];
  56.         for(ucCount=0;ucCount<3;ucCount++)
  57.         {
  58.                 vShowOneChar(ucaNumber[ucCount]+48);                                //從首位到末位逐一輸出。
  59.                 if(ucCount==0)
  60.                         vShowOneChar('.');
  61.         }
  62. }
  63. //*************************************************************************************************
  64. //*                                                                                                                                                                                                  *
  65. //*********************************主函數(shù)******************************                                  *
  66. //*                                                                                                                                                                                                  *
  67. //*************************************************************************************************
  68. void main()
  69. {


  70.         TMOD=0x01;                        //定時器0,模式1。
  71.         TH0=TIME0H;
  72.         TL0=TIME0L;
  73.         TR0=1;                                //啟動定時器。
  74.         ET0=1;                                //開定時器中斷。
  75.         EA=1;                                //開總中斷


  76.         vdInitialize();
  77.         vWriteCMD(0x84);           //寫入顯示起始地址(第一行第4個位置)
  78.         vShowChar("voltage");
  79.         vWriteCMD(0xC9);     
  80.         vShowChar("(V)");
  81.         while(1)
  82.         {
  83.                 if(b_DATransform==1)
  84.                 {
  85.                         b_DATransform=0;
  86.                         vWriteCMD(0xC4);
  87.                         vShowVoltage(uiADTransform());
  88.                 }

  89.         }
  90. }


  91. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  92. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定時器0中斷函數(shù)>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  93. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

  94. void t0() interrupt 1
  95. {
  96.         if(uc_Clock==0)
  97.         {
  98.                 uc_Clock=5;
  99.                 b_DATransform=1;
  100.         }
  101.         else
  102.                 uc_Clock--;
  103.         TH0=TIME0H;                   //恢復(fù)定時器0。
  104.         TL0=TIME0L;
  105. }


  106. /*************************************************************************
  107. //AD轉(zhuǎn)換函數(shù),返回轉(zhuǎn)換結(jié)果。
  108. //轉(zhuǎn)換結(jié)果是3位數(shù),小數(shù)點在百位與十位之間。
  109. **************************************************************************/

  110. unsigned int uiADTransform()
  111. {
  112.         unsigned int uiResult;
  113.         START=1;                         //啟動AD轉(zhuǎn)換。
  114.         START=0;
  115.         while(EOC==0);                 //等待轉(zhuǎn)換結(jié)束。
  116.         uiResult=OUTPORT;         //出入轉(zhuǎn)換結(jié)果。
  117.         uiResult=(100*uiResult)/51;                   //處理運算結(jié)果。
  118.         return uiResult;
  119. }


  120. /*************************************************************************
  121. LCD1602
  122. **************************************************************************/

  123. void vWriteCMD(uchar ucCommand)                                          
  124. {
  125.         vDelay();                                //先延時。
  126.         LCDE=1;                                        //然后把LCD改為寫入命令狀態(tài)。
  127.         LCDRS=0;
  128.         LCDRW=0;
  129.         LCDPORT=ucCommand;                        //再輸出命令。
  130.         LCDE=0;                                        //最后執(zhí)行命令。
  131. }
  132. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  133. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<把1個數(shù)據(jù)寫入LCD>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  134. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  135. void vWriteData(uchar ucData)                                          
  136. {
  137.         vDelay();                           //先延時。
  138.         LCDE=1;                                   //然后把LCD改為寫入數(shù)據(jù)狀態(tài)。
  139.         LCDRS=1;
  140.         LCDRW=0;
  141.         LCDPORT=ucData;                           //再輸出數(shù)據(jù)。
  142.         LCDE=0;                                   //最后顯示數(shù)據(jù)。
  143. }
  144. void vShowOneChar(uchar ucChar)
  145. {
  146.         switch(ucChar)
  147.         {
  148.                 case ' ':        vWriteData(0x20);break;
  149.                 case '!':         vWriteData(0x21);break;
  150.                 case '"':         vWriteData(0x22);break;
  151.                 case '#':         vWriteData(0x23);break;
  152.                 case '




  153. :         vWriteData(0x24);break;
  154.                 case '%':         vWriteData(0x25);break;
  155.                 case '&':         vWriteData(0x26);break;
  156.                 case '>':         vWriteData(0x27);break;
  157.                 case '(':         vWriteData(0x28);break;
  158.                 case ')':         vWriteData(0x29);break;
  159.                 case '*':         vWriteData(0x20);break;
  160.                 case '+':         vWriteData(0x2A);break;
  161.                 case '-':         vWriteData(0x2D);break;
  162.                 case '/':         vWriteData(0x2F);break;
  163.                 case '=':         vWriteData(0x3D);break;
  164.                 case '<':         vWriteData(0x3E);break;
  165.                 case '?':         vWriteData(0x3F);break;
  166.                 case '.':         vWriteData(0x2E);break;
  167.                 case ':':         vWriteData(0x3A);break;

  168.                 case '0':         vWriteData(0x30);break;
  169.                 case '1':         vWriteData(0x31);break;
  170.                 case '2':         vWriteData(0x32);break;
  171.                 case '3':         vWriteData(0x33);break;
  172.                 case '4':         vWriteData(0x34);break;
  173.                 case '5':         vWriteData(0x35);break;
  174.                 case '6':         vWriteData(0x36);break;
  175.                 case '7':         vWriteData(0x37);break;
  176.                 case '8':         vWriteData(0x38);break;
  177.                 case '9':         vWriteData(0x39);break;

  178.                 case 'A':         vWriteData(0x41);break;
  179.                 case 'B':         vWriteData(0x42);break;
  180.                 case 'C':         vWriteData(0x43);break;
  181.                 case 'D':         vWriteData(0x44);break;
  182.                 case 'E':        vWriteData(0x45);break;
  183.                 case 'F':         vWriteData(0x46);break;
  184.                 case 'G':         vWriteData(0x47);break;
  185.                 case 'H':         vWriteData(0x48);break;
  186.                 case 'I':         vWriteData(0x49);break;
  187.                 case 'J':         vWriteData(0x4A);break;
  188.                 case 'K':         vWriteData(0x4B);break;
  189.                 case 'L':         vWriteData(0x4C);break;
  190.                 case 'M':         vWriteData(0x4D);break;
  191.                 case 'N':         vWriteData(0x4E);break;
  192.                 case 'O':         vWriteData(0x4F);break;
  193.                 case 'P':         vWriteData(0x50);break;
  194.                 case 'Q':         vWriteData(0x51);break;
  195.                 case 'R':         vWriteData(0x52);break;
  196.                 case 'S':         vWriteData(0x53);break;
  197.                 case 'T':         vWriteData(0x54);break;
  198.                 case 'U':         vWriteData(0x55);break;
  199.                 case 'V':         vWriteData(0x56);break;
  200.                 case 'W':         vWriteData(0x57);break;
  201.                 case 'X':         vWriteData(0x58);break;
  202.                 case 'Y':         vWriteData(0x59);break;
  203.                 case 'Z':         vWriteData(0x5A);break;

  204.                 case 'a':         vWriteData(0x61);break;
  205.                 case 'b':         vWriteData(0x62);break;
  206.                 case 'c':         vWriteData(0x63);break;
  207.                 case 'd':         vWriteData(0x64);break;
  208.                 case 'e':         vWriteData(0x65);break;
  209.                 case 'f':         vWriteData(0x66);break;
  210.                 case 'g':         vWriteData(0x67);break;
  211.                 case 'h':         vWriteData(0x68);break;
  212.                 case 'i':         vWriteData(0x69);break;
  213.                 case 'j':         vWriteData(0x6A);break;
  214.                 case 'k':         vWriteData(0x6B);break;
  215.                 case 'l':         vWriteData(0x6C);break;
  216.                 case 'm':         vWriteData(0x6D);break;
  217.                 case 'n':         vWriteData(0x6E);break;
  218.                 case 'o':         vWriteData(0x6F);break;
  219.                 case 'p':         vWriteData(0x70);break;
  220.                 case 'q':         vWriteData(0x71);break;
  221.                 case 'r':         vWriteData(0x72);break;
  222.                 case 's':         vWriteData(0x73);break;
  223.                 case 't':         vWriteData(0x74);break;
  224.                 case 'u':         vWriteData(0x75);break;
  225.                 case 'v':         vWriteData(0x76);break;
  226.                 case 'w':         vWriteData(0x77);break;
  227.                 case 'x':         vWriteData(0x78);break;
  228.                 case 'y':         vWriteData(0x79);break;
  229.                 case 'z':         vWriteData(0x7A);break;
  230.                 default:         break;
  231.         }
  232. }
  233. void vShowChar(uchar ucaChar[])
  234. {
  235.         uchar ucCount;
  236.         for(ucCount=0;;ucCount++)
  237.         {
  238.                 vShowOneChar(ucaChar[ucCount]);
  239.                 if(ucaChar[ucCount+1]=='\0')
  240.                         break;
  241.         }
  242. }
  243. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  244. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<延時函數(shù)>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  245. //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  246. void vDelay()
  247. {
  248.         uint uiCount;
  249.         for(uiCount=0;uiCount<250;uiCount++);
  250. }

復(fù)制代碼





10 digital-to-analog analog-to-digital conversion single-chip microcomputer system.rar

147.08 KB, 下載次數(shù): 11, 下載積分: 黑幣 -5

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:674589 發(fā)表于 2019-12-26 14:51 | 只看該作者
感謝樓主分享
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产日批 | 香蕉久久a毛片 | 97av视频在线 | 91在线资源 | 久久久久久国产精品 | 成人免费毛片片v | 国产精品一区二区三区四区 | 国产免费又黄又爽又刺激蜜月al | 二区成人 | 中文字幕日韩欧美一区二区三区 | 午夜精品久久久久久 | 一区二区三区四区在线免费观看 | 精品综合久久久 | 亚洲精品久久久久久一区二区 | 狠狠操狠狠干 | 欧美亚洲视频 | 一区二区三区中文字幕 | 一区二区三区成人 | 中文字幕av第一页 | 日韩欧美国产成人一区二区 | 欧美视频在线观看 | 视频一区二区在线 | a级片在线观看 | 欧美精品欧美精品系列 | 亚洲www. | 国产午夜精品久久久久免费视高清 | 国产一区二区小视频 | 一区二区三区高清 | 精品国产一区二区三区av片 | 91久久 | 一区日韩 | 国产中文原创 | 日韩精品一区二区三区在线观看 | 欧美国产精品 | 香蕉国产在线视频 | 久久国产精品一区 | 国产一区二区精品自拍 | 一级毛片在线播放 | v片网站| 精品视频一区二区 | 日韩欧美久久精品 |