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

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

QQ登錄

只需一步,快速開(kāi)始

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

關(guān)于ad0809的模數(shù)轉(zhuǎn)換與顯示的單片機(jī)程序

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

單片機(jī)源程序如下:
  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;       //根據(jù)規(guī)定,RS為低電平,RW為高電平時(shí),可以讀狀態(tài)
  31.     RW=1;
  32.     E=1;        //E=1,才允許讀寫(xiě)
  33.     _nop_();   //空操作
  34.     _nop_();
  35.     _nop_();
  36.     _nop_();   //空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間       
  37.     result=BF;  //將忙碌標(biāo)志電平賦給result
  38.    E=0;         //將E恢復(fù)低電平
  39.    return result;
  40.   }
  41. void WriteInstruction (unsigned char dictate)
  42. {   
  43.     while(BusyTest()==1);   //如果忙就等待
  44.          RS=0;                  //根據(jù)規(guī)定,RS和R/W同時(shí)為低電平時(shí),可以寫(xiě)入指令
  45.          RW=0;   
  46.          E=0;                   //E置低電平(根據(jù)表8-6,寫(xiě)指令時(shí),E為高脈沖,
  47.                            // 就是讓E從0到1發(fā)生正跳變,所以應(yīng)先置"0"
  48.          _nop_();
  49.          _nop_();               //空操作兩個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間
  50.          P0=dictate;            //將數(shù)據(jù)送入P0口,即寫(xiě)入指令或地址
  51.          _nop_();
  52.          _nop_();
  53.          _nop_();
  54.          _nop_();               //空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間
  55.          E=1;                   //E置高電平
  56.          _nop_();
  57.          _nop_();
  58.          _nop_();
  59.          _nop_();               //空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間
  60.           E=0;              }
  61.           void WriteAddress(unsigned char x)
  62. {
  63.      WriteInstruction(x|0x80); }//顯示位置的確定方法規(guī)定為"80H+地址碼x"

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

  98. }

  99.   void xianshi(void)
  100.   {  unsigned char i;
  101.                       WriteAddress(0x00);    //寫(xiě)顯示地址,將在第1行第1列開(kāi)始顯示
  102.                            i = 0;                //從第一個(gè)字符開(kāi)始顯示
  103.                                 while(CL[i] != '\0')  //只要沒(méi)有寫(xiě)到結(jié)束標(biāo)志,就繼續(xù)寫(xiě)
  104.                                 {                                               
  105.                                         WriteData(CL[i]);   //將字符常量寫(xiě)入LCD
  106.                                         i++;                 //指向下一個(gè)字符
  107.                                         delaynms(100);        //延時(shí)100ms較長(zhǎng)時(shí)間,以看清關(guān)于顯示的說(shuō)明
  108.                                 }        }
  109.         void danwei(void)
  110.         {
  111.        unsigned char h;
  112.                       WriteAddress(0x0b);    //寫(xiě)顯示地址,將在第1行第1列開(kāi)始顯示
  113.                            h = 0;                //從第一個(gè)字符開(kāi)始顯示
  114.                                 while(DW[h]!= '\0')  //只要沒(méi)有寫(xiě)到結(jié)束標(biāo)志,就繼續(xù)寫(xiě)
  115.                                 {                                               
  116.                                         WriteData(DW[h]);   //將字符常量寫(xiě)入LCD
  117.                                        h++;                 //指向下一個(gè)字符
  118.                                         delaynms(100);        //延時(shí)100ms較長(zhǎng)時(shí)間,以看清關(guān)于顯示的說(shuō)明
  119.                                 }        }
  120.        
  121.           void  panduan(void)
  122.         {
  123.        unsigned char k;
  124.                          LcdInitiate()         ;
  125.                       WriteAddress(0x00);    //寫(xiě)顯示地址,將在第1行第1列開(kāi)始顯示
  126.                           k = 0;                //從第一個(gè)字符開(kāi)始顯示
  127.                                 while(CW[k] != '\0')  //只要沒(méi)有寫(xiě)到結(jié)束標(biāo)志,就繼續(xù)寫(xiě)
  128.                                 {                                               
  129.                                         WriteData(CW[k]);   //將字符常量寫(xiě)入LCD
  130.                                        k++;                 //指向下一個(gè)字符
  131.                                         delaynms(100);        //延時(shí)100ms較長(zhǎng)時(shí)間,以看清關(guān)于顯示的說(shuō)明
  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. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

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



回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

ID:334094 發(fā)表于 2019-1-2 15:09 | 顯示全部樓層
很好,學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

ID:334094 發(fā)表于 2019-1-2 15:10 | 顯示全部樓層
很好,學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

ID:512403 發(fā)表于 2019-4-25 15:45 來(lái)自觸屏版 | 顯示全部樓層
收藏起來(lái),看看
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产高清精品一区二区三区 | 亚洲精品视频观看 | 亚洲色图插插插 | 国产japanhdxxxx麻豆 | 国产成人高清视频 | 青娱乐自拍 | 97色综合| 国产精品亚洲精品 | 欧美亚洲高清 | 嫩草懂你的影院入口 | 欧美一区二区二区 | 久久精品色视频 | 国产精品久久久久久久久久久久 | avtt国产| 日韩精品免费一区 | 中文字幕高清 | av中文字幕网 | 91免费福利视频 | 国产成人免费视频网站高清观看视频 | 欧美不卡一区二区三区 | 亚洲精品国产区 | 日韩精品在线一区 | 成人影院在线 | 日韩欧美一区二区在线播放 | 人人艹人人爽 | 亚洲第一天堂 | 欧美精品一区二区三区四区 在线 | 亚洲人成人一区二区在线观看 | 国产精品美女久久久久久不卡 | 日韩免 | 精品亚洲一区二区 | 中文字幕国产视频 | 久草在线视频中文 | 一区二区免费在线视频 | xxxxx免费视频 | 91视频免费 | 欧美精品一区二区在线观看 | 午夜理伦三级理论三级在线观看 | 久久久夜色精品亚洲 | 免费看av大片 | 亚洲精品v日韩精品 |