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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8320|回復: 6
收起左側

關于ad0809的模數轉換與顯示的單片機程序

[復制鏈接]
ID:330927 發表于 2018-5-16 00:37 | 顯示全部樓層 |閱讀模式
adc0809的51程序及仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png

單片機源程序如下:
  1. /***************   writer:shopping.w   ******************/
  2. #include <reg52.h>
  3. #include<intrins.h>
  4. #include<math.h>
  5. #define uint unsigned int
  6. #define uchar unsigned char

  7. uchar code LCD[10]={"0123456789"};
  8. uchar code CL[]={"CL%:0.00"} ;
  9. uchar code DW[]={"MOL/L"};
  10. uchar code CW[]={"      error     "} ;
  11. sbit OE  = P1^0;
  12. sbit EOC = P1^1;
  13. sbit ST  = P1^2;
  14. sbit CLK = P1^3;
  15. void delay1ms()
  16. {
  17.    unsigned char i,j;       
  18.          for(i=0;i<10;i++)
  19.           for(j=0;j<33;j++)
  20.            ;}       
  21. void delaynms(unsigned char n)
  22. {
  23.    unsigned char i;
  24.         for(i=0;i<n;i++)
  25.            delay1ms();
  26. }
  27. bit BusyTest(void)
  28.   {
  29.     bit result;
  30.         RS=0;       //根據規定,RS為低電平,RW為高電平時,可以讀狀態
  31.     RW=1;
  32.     E=1;        //E=1,才允許讀寫
  33.     _nop_();   //空操作
  34.     _nop_();
  35.     _nop_();
  36.     _nop_();   //空操作四個機器周期,給硬件反應時間       
  37.     result=BF;  //將忙碌標志電平賦給result
  38.    E=0;         //將E恢復低電平
  39.    return result;
  40.   }
  41. void WriteInstruction (unsigned char dictate)
  42. {   
  43.     while(BusyTest()==1);   //如果忙就等待
  44.          RS=0;                  //根據規定,RS和R/W同時為低電平時,可以寫入指令
  45.          RW=0;   
  46.          E=0;                   //E置低電平(根據表8-6,寫指令時,E為高脈沖,
  47.                            // 就是讓E從0到1發生正跳變,所以應先置"0"
  48.          _nop_();
  49.          _nop_();               //空操作兩個機器周期,給硬件反應時間
  50.          P0=dictate;            //將數據送入P0口,即寫入指令或地址
  51.          _nop_();
  52.          _nop_();
  53.          _nop_();
  54.          _nop_();               //空操作四個機器周期,給硬件反應時間
  55.          E=1;                   //E置高電平
  56.          _nop_();
  57.          _nop_();
  58.          _nop_();
  59.          _nop_();               //空操作四個機器周期,給硬件反應時間
  60.           E=0;              }
  61.           void WriteAddress(unsigned char x)
  62. {
  63.      WriteInstruction(x|0x80); }//顯示位置的確定方法規定為"80H+地址碼x"

  64.   void WriteData(unsigned char y)
  65. {
  66.     while(BusyTest()==1);  
  67.           RS=1;           //RS為高電平,RW為低電平時,可以寫入數據
  68.           RW=0;
  69.           E=0;            //E置低電平(根據表8-6,寫指令時,E為高脈沖,
  70.                      // 就是讓E從0到1發生正跳變,所以應先置"0"
  71.           P0=y;           //將數據送入P0口,即將數據寫入液晶模塊
  72.           _nop_();
  73.           _nop_();
  74.           _nop_();
  75.      _nop_();       //空操作四個機器周期,給硬件反應時間
  76.           E=1;           //E置高電平
  77.           _nop_();
  78.           _nop_();
  79.           _nop_();
  80.          _nop_();        //空操作四個機器周期,給硬件反應時間
  81.          E=0;            //當E由高電平跳變成低電平時,液晶模塊開始執行命令
  82. }
  83. void LcdInitiate(void)
  84. {
  85.     delaynms(15);               //延時15ms,首次寫指令時應給LCD一段較長的反應時間
  86.     WriteInstruction(0x38);     //顯示模式設置:16×2顯示,5×7點陣,8位數據接口
  87.         delaynms(5);                //延時5ms ,給硬件一點反應時間
  88.     WriteInstruction(0x38);
  89.         delaynms(5);               //延時5ms ,給硬件一點反應時間
  90.         WriteInstruction(0x38);     //連續三次,確保初始化成功
  91.         delaynms(5);               //延時5ms ,給硬件一點反應時間
  92.         WriteInstruction(0x0c);     //顯示模式設置:顯示開,無光標,光標不閃爍
  93.         delaynms(5);               //延時5ms ,給硬件一點反應時間
  94.         WriteInstruction(0x06);     //顯示模式設置:光標右移,字符不移
  95.         delaynms(5);                //延時5ms ,給硬件一點反應時間
  96.         WriteInstruction(0x01);     //清屏幕指令,將以前的顯示內容清除
  97.         delaynms(5);             //延時5ms ,給硬件一點反應時間

  98. }

  99.   void xianshi(void)
  100.   {  unsigned char i;
  101.                       WriteAddress(0x00);    //寫顯示地址,將在第1行第1列開始顯示
  102.                            i = 0;                //從第一個字符開始顯示
  103.                                 while(CL[i] != '\0')  //只要沒有寫到結束標志,就繼續寫
  104.                                 {                                               
  105.                                         WriteData(CL[i]);   //將字符常量寫入LCD
  106.                                         i++;                 //指向下一個字符
  107.                                         delaynms(100);        //延時100ms較長時間,以看清關于顯示的說明
  108.                                 }        }
  109.         void danwei(void)
  110.         {
  111.        unsigned char h;
  112.                       WriteAddress(0x0b);    //寫顯示地址,將在第1行第1列開始顯示
  113.                            h = 0;                //從第一個字符開始顯示
  114.                                 while(DW[h]!= '\0')  //只要沒有寫到結束標志,就繼續寫
  115.                                 {                                               
  116.                                         WriteData(DW[h]);   //將字符常量寫入LCD
  117.                                        h++;                 //指向下一個字符
  118.                                         delaynms(100);        //延時100ms較長時間,以看清關于顯示的說明
  119.                                 }        }
  120.        
  121.           void  panduan(void)
  122.         {
  123.        unsigned char k;
  124.                          LcdInitiate()         ;
  125.                       WriteAddress(0x00);    //寫顯示地址,將在第1行第1列開始顯示
  126.                           k = 0;                //從第一個字符開始顯示
  127.                                 while(CW[k] != '\0')  //只要沒有寫到結束標志,就繼續寫
  128.                                 {                                               
  129.                                         WriteData(CW[k]);   //將字符常量寫入LCD
  130.                                        k++;                 //指向下一個字符
  131.                                         delaynms(100);        //延時100ms較長時間,以看清關于顯示的說明
  132.                                 }        }





  133. void Display_Result(uchar d)
  134. {  double x,y;
  135. uchar xs1, xs2,ds, xs3;
  136.         d=d*5*100/256 ;
  137.         x=(d-110)/59;
  138.         y=pow(10,x);
  139. if(y*10000<1||y*10000>100)
  140. {panduan(); }
  141. else if(y*1000>0)
  142. {ds=y*100000;
  143. xs1=ds%1000;
  144. xs2=ds%100;
  145. xs3=ds%10;
  146. xianshi();
  147. danwei();
  148. WriteAddress(0x08);
  149. WriteData(LCD[xs1]);
  150. delaynms(10);
  151. WriteData(LCD[xs2]);
  152. delaynms(10);
  153. WriteData(LCD[xs3]) ;
  154. delaynms(10);     }
  155. else if(y*10000>0) {
  156. xs2=ds%100;
  157. xs3=ds%10;
  158. xianshi();
  159. danwei();
  160. WriteAddress(0x08);
  161. WriteData(LCD[0]);
  162. delaynms(10);
  163. WriteData(LCD[xs2]);
  164. delaynms(10);
  165. WriteData(LCD[xs3]) ;
  166. delaynms(10);
  167. }
  168. else xs3=ds%10;
  169. xianshi();
  170. danwei();
  171. WriteAddress(0x08);
  172. WriteData(LCD[0]);
  173. delaynms(10);
  174. WriteData(LCD[0]);
  175. delaynms(10);
  176. WriteData(LCD[xs3]) ;
  177. delaynms(10);}





  178. void main()
  179. ……………………

  180. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
adc0808.rar (63.75 KB, 下載次數: 75)
回復

使用道具 舉報

ID:335078 發表于 2018-6-13 23:46 | 顯示全部樓層
剛好需要,看一下能不能用
回復

使用道具 舉報

ID:335078 發表于 2018-6-13 23:59 | 顯示全部樓層
程序不完整,還是得慢慢改才行。望完善
回復

使用道具 舉報

ID:334094 發表于 2019-1-2 15:09 | 顯示全部樓層
很好,學習學習
回復

使用道具 舉報

ID:334094 發表于 2019-1-2 15:10 | 顯示全部樓層
很好,學習學習
回復

使用道具 舉報

ID:512403 發表于 2019-4-25 15:45 來自手機 | 顯示全部樓層
收藏起來,看看
回復

使用道具 舉報

ID:528654 發表于 2019-5-11 01:45 | 顯示全部樓層
仿真不了啊
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本中出视频 | www.亚洲| 黄色网页在线 | 成人超碰 | 免费观看黄 | 国产一区二区影院 | 精品国产99 | 岛国av免费观看 | 亚洲精品一区二区三区在线 | 成人在线免费观看视频 | 日韩在线看片 | 久久久久久久久久久久久91 | 在线激情视频 | 精品亚洲第一 | 日韩中文字幕在线播放 | 久久精品二区 | 欧美人妇做爰xxxⅹ性高电影 | 丁香五月网久久综合 | 51ⅴ精品国产91久久久久久 | 日韩精品一区在线 | 波多野结衣二区 | 欧美三级视频在线观看 | 91精品国产综合久久婷婷香蕉 | 91超碰在线观看 | 国产在线精品一区二区三区 | 国产精品久久久久久久久久软件 | 日本不卡一区二区三区 | 国内av在线 | a级黄色网 | 国产美女在线看 | 日韩中文字幕一区二区 | 国产高清在线观看 | 在线91| 国产小视频在线观看 | 日韩在线精品视频 | 久久久久久99 | 欧美黄在线观看 | a级免费观看视频 | 三级av在线| 亚洲成人在线视频播放 | 视频一区在线观看 |