欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

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

QQ登錄

只需一步,快速開始

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

STC12單片機(jī)做的NTC電阻測(cè)量計(jì)數(shù)器1602顯示程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:358930 發(fā)表于 2018-12-6 05:38 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
制作出來的實(shí)物圖如下:


單片機(jī)源程序如下:
  1. #include <reg51.h>
  2. #include  <intrins.h>
  3. #define uchar unsigned char
  4. #define uint  unsigned int


  5. //STC12C5A60S2 特殊功能寄存器 關(guān)于AD部分的寄存器定義
  6. sfr ADC_CONTR   =   0xBC;           //ADC控制寄存器 通道配置
  7. sfr ADC_RES     =   0xBD;           //ADC高8位數(shù)據(jù)寄存器(存AD轉(zhuǎn)換的結(jié)果,共10位)
  8. sfr ADC_LOW2    =   0xBE;           //ADC低2位數(shù)據(jù)寄存器(存AD轉(zhuǎn)換的結(jié)果,共10位)
  9. sfr P1ASF       =   0x9D;           //P1第二功能選擇寄存器
  10. unsigned char ch0 ; //ADC通道選擇,本例程選擇P1.0為AD轉(zhuǎn)換,其他P1口做普通IO用 01234567
  11. unsigned int ad_out;//ADC_CONTR寄存器的位變量定義
  12. #define ADC_POWER   0x80            //ADC power control bit
  13. #define ADC_FLAG    0x10            //ADC complete flag
  14. #define ADC_START   0x08            //ADC start control bit
  15. #define ADC_SPEEDLL 0x00            //420 clocks
  16. #define ADC_SPEEDL  0x20            //280 clocks
  17. #define ADC_SPEEDH  0x40            //140 clocks
  18. #define ADC_SPEEDHH 0x60            //70 clocks

  19. /***************************功能定義***************************/
  20. #define LCD12864_W_COM                        0xF8        //寫指令
  21. #define LCD12864_R_COM                        0xFC        //讀指令
  22. #define LCD12864_W_DAT                        0xFA        //寫數(shù)據(jù)
  23. #define LCD12864_R_DAT                        0xFE        //讀數(shù)據(jù)
  24. #ifndef __LCD12864_H__
  25. #define __LCD12864_H__
  26. #define LCD12864_COM 0        //輸入指令
  27. #define LCD12864_DAT 1        //輸入數(shù)據(jù)
  28. #define LCD12864_CLEAR                        0x01        //清除顯示
  29. #define LCD12864_CURSOR                        0x02        //位址歸位,游標(biāo)回原點(diǎn)
  30. #define LCD12864_CURSOR_RLF                0x04        //光標(biāo)左移,整體顯示不移動(dòng)
  31. #define LCD12864_CURSOR_RRF                0x06        //光標(biāo)右移,整體顯示不移動(dòng)
  32. #define LCD12864_CURSOR_RLN                0x05        //光標(biāo)左移,整體顯示移動(dòng)
  33. #define LCD12864_CURSOR_RRN                0x07        //光標(biāo)右移,整體顯示移動(dòng)
  34. #define LCD12864_DIS_OFF                0x08        //顯示狀態(tài)全關(guān)
  35. #define LCD12864_DIS_ON                        0x0E        //顯示狀態(tài)開
  36. #define LCD12864_DIS_CUR_ON                0x0E        //游標(biāo)顯示開
  37. #define LCD12864_DIS_CURS_ON        0x0F        //游標(biāo)位置顯示開
  38. #define LCD12864_CURSOR_RL                0x10        //游標(biāo)左移
  39. #define LCD12864_CURSOR_RR                0x14        //游標(biāo)右移
  40. #define LCD12864_CURDIS_RL                0x18        //整體顯示左移,光標(biāo)跟隨
  41. #define LCD12864_CURDIS_RR                0x1C        //整體顯示又移,光標(biāo)跟隨
  42. #define LCD12864_COM_BASIC                0x30        //基本指令集動(dòng)作
  43. #define LCD12864_COM_PLOT_ON        0x36        //擴(kuò)展指令集動(dòng)作,繪圖顯示ON
  44. #define LCD12864_COM_PLOT_OFF        0x34        //擴(kuò)展指令集動(dòng)作,繪圖顯示OFF
  45. #define LCD12864_STAND_TO                0x31        //進(jìn)入待命模式
  46. #define LCD12864_PLACE_ROLL                0x03        //允許輸入卷動(dòng)位址
  47. #define LCD12864_PLACE_IRAM                0x02        //允許輸入IRAM位址
  48. #define LCD12864_REVERES_13                0x04        //選擇一、三行同時(shí)作反白顯示
  49. #define LCD12864_REVERES_24                0x05        //選擇二、四行同時(shí)作反白顯示
  50. #define LCD12864_REST_ON                0x08        //進(jìn)入睡眠模式
  51. #define LCD12864_REST_OFF                0x0C        //脫離睡眠模式
  52. #define LCD12864_W_COM                        0xF8        //寫指令
  53. #define LCD12864_R_COM                        0xFC        //讀指令
  54. #define LCD12864_W_DAT                        0xFA        //寫數(shù)據(jù)
  55. #define LCD12864_R_DAT                        0xFE        //讀數(shù)據(jù)
  56. uint pcs;//計(jì)數(shù)
  57. uint pcs1;
  58. sbit  bb= P1^7;   //bepp報(bào)警
  59. sbit  ok= P1^6;   //NTC OK
  60. sbit  no= P1^5;   //NTC NO
  61. sbit  k1= P1^4;   //計(jì)數(shù)清零

  62. sbit rs=P2^6;//
  63. sbit rw=P2^5;//
  64. sbit en=P2^7;//      
  65. /*******************************延時(shí)函數(shù)**********************************************/
  66. void Delay1Ms(uchar t)
  67. {
  68.         uchar i;
  69.         for (;t>0;t--)
  70.                 {
  71.                 for (i=0;i<138;i++)
  72.                         {
  73.                         _nop_();_nop_();_nop_();_nop_();_nop_();
  74.                         _nop_();_nop_();_nop_();_nop_();_nop_();
  75.                         }
  76.                 }      
  77. }
  78. void Delay1s(uchar t)
  79. {
  80.         for (;t>0;t--)
  81.                 {
  82.             Delay1Ms(250);
  83.                 Delay1Ms(250);
  84.                 Delay1Ms(250);
  85.                 Delay1Ms(250);
  86.             }      
  87. }
  88. void delayus()//us微秒延時(shí)
  89. {
  90. _nop_();
  91. _nop_();
  92. _nop_();
  93. _nop_();
  94. }
  95. void delay(unsigned int n)
  96. {
  97.     unsigned int x;
  98.     while (n--)
  99.     {
  100.         x = 5000;
  101.         while (x--);
  102.     }
  103. }
  104. void delay3(uint j,i) //1602用
  105.     {      
  106.             for(;j>0;j--)
  107.           {        
  108.                 for(i=0;i<127;i++);
  109.           }
  110.     }
  111. //*******************1602***************** ////
  112. void write_com(uchar com)//寫命令
  113. {
  114. rs=0;//
  115. rw=0;
  116. en=0;
  117. P0=com;
  118. delay3(2);
  119. en=1;
  120. delay3(5);
  121. en=0;
  122. delay3(2);
  123. }
  124. void write_dat(uchar dat)//寫數(shù)據(jù)
  125. {
  126. rs=1;//
  127. rw=0;
  128. en=0;
  129. P0=dat;
  130. delay3(2);
  131. en=1;
  132. delay3(5);
  133. en=0;
  134. delay3(2);
  135. }
  136. void write_zfc(uchar *p)//定義一個(gè)帶指針的函數(shù)?(字符串)
  137. {
  138.         while(*p!=0)//不能用";"
  139.         write_dat(*p++);
  140. }
  141. void init_1602()//1602初始化
  142. {
  143. write_com(0x38);//設(shè)置16X2顯示
  144. delay3(1);
  145. write_com(0x0C);//0e光標(biāo)不閃//0c不顯//0f閃爍顯示
  146. delay3(1);
  147. write_com(0x06);//光標(biāo)移位加1
  148. delay3(1);
  149. write_com(0x01);//清屏
  150. delay3(1);
  151. write_com(0x80);
  152. write_zfc("R=");
  153. write_com(0x80+0x40);
  154. write_zfc("S=");
  155. }
  156. //***********************************************************//
  157.   void InitADC() //10位AD數(shù)據(jù)緩存
  158. {
  159.    unsigned char i;

  160.     P1ASF = 0x01;//設(shè)置P1.0為AD腳,P1ASF = 0x01 其他P1口為普通IO功能      
  161.     ADC_RES = 0;                    //清空AD輸出高8位
  162.         //if(++ch>7)ch=0;        //循環(huán)顯示8個(gè)通道AD采樣
  163.     ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch0;
  164.     delay(8);                       //ADC power-on delay and Start A/D conversion
  165. }
  166. //**************************顯示1***********************//
  167. void dsplay1(uint temp)
  168. {
  169.          uint a,b,c,d;
  170.          //temp=1234;        //測(cè)試數(shù)據(jù)
  171.          temp=39*ad_out*(3470*(1/(273.15+15)-1/(273.15+25))); //溫度計(jì)算與修正約10K
  172.      if(temp>=100&&temp<11000)//>500&&<950/一個(gè)NTC約930K兩個(gè)就大于950用于判斷有幾個(gè)或沒有NTC在線                       
  173.            {  pcs1=1; // 合格品計(jì)數(shù)
  174.                      ok=0;//合格燈開
  175.                   no=1;//不合格燈關(guān)
  176.                   bb=0;//報(bào)警
  177.         a=temp/1000;
  178.         b=temp%1000/100;
  179.         c=temp%100/10;
  180.         d=temp%10;
  181.          
  182.         write_com(0x80+2);
  183.         write_dat(0x30+a);
  184.         write_dat('.');
  185.         write_dat(0x30+b);  
  186.         write_dat(0x30+c);         
  187.         //write_dat(0x30+d);
  188.     write_zfc("K");
  189.         write_zfc("   OK!   ");
  190.          }
  191.          else
  192.          {
  193.                ok=1;//合格燈關(guān)
  194.                    no=0;//不合格燈開      
  195.                    bb=1;//           
  196.                    temp=0;
  197.         a=temp/1000;
  198.         b=temp%1000/100;
  199.         c=temp%100/10;
  200.         d=temp%10;
  201.          
  202.         write_com(0x80+2);
  203.         write_dat(0x30+a);
  204.         write_dat('.');
  205.         write_dat(0x30+b);  
  206.         write_dat(0x30+c);         
  207.         //write_dat(0x30+d);
  208.     write_zfc("K");
  209.     write_zfc("   Error!");
  210.          }


  211.          if(pcs1==1&&bb==1) // 同時(shí)滿足兩個(gè)條件,測(cè)試放手才計(jì)數(shù)
  212. {
  213. pcs++;
  214. if(pcs>9998)pcs=9999;        //如果最高溫度高于99.9度就只顯示99.9
  215. pcs1=0;//用于清除計(jì)數(shù)
  216. }
  217.          }
  218. //**************************顯示2***********************//
  219. void dsplay2(uint temp)
  220. {
  221.          uint a,b,c,d;
  222.          temp=pcs;        //溫度計(jì)算與修正
  223.       
  224.         a=temp/1000;
  225.         b=temp%1000/100;
  226.         c=temp%100/10;
  227.         d=temp%10;
  228.          
  229.         write_com(0x80+0x40+2);
  230.         write_dat(0x30+a);
  231.         write_dat(0x30+b);  
  232.         write_dat(0x30+c);
  233.         //write_dat('.');         
  234.         write_dat(0x30+d);
  235.         write_zfc("psc");
  236.          }
  237. /*****************************main**********************************************/
  238. void main()
  239. {   
  240.            
  241.         init_1602();
  242.         InitADC();                      //AD初始化
  243.     IE = 0xa0;                      //允許AD中斷      
  244.            EA = 1;// 打開AD中斷
  245.     while(1)
  246. {               
  247.          
  248.            dsplay1( );
  249.            dsplay2( );
  250.            if(k1==0)pcs=0;//清除PCS計(jì)數(shù)
  251.          
  252. }
  253. }
  254.   void adc_isr() interrupt 5 using 1 //通道電壓整合
  255. {
  256.     ADC_CONTR &= !ADC_FLAG;                                 //Clear ADC interrupt flag
  257.     ad_out = (ADC_RES << 2) + ADC_LOW2;                     //高8位+低兩位
  258.         //if(++ch>7)ch=0;//循環(huán)顯示8個(gè)通道AD采樣
  259.     ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch0;
  260. }

復(fù)制代碼

所有資料51hei提供下載:
1602顯STC12電阻計(jì)數(shù)測(cè)試儀OK1.zip (42.83 KB, 下載次數(shù): 115)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:129023 發(fā)表于 2018-12-29 09:02 | 只看該作者
不錯(cuò),謝謝分享!好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

無效樓層,該帖已經(jīng)被刪除
無效樓層,該帖已經(jīng)被刪除
5#
ID:227393 發(fā)表于 2021-4-5 14:10 來自觸屏版 | 只看該作者
明明是1602液晶怎么變12864液晶了?
回復(fù)

使用道具 舉報(bào)

6#
ID:328014 發(fā)表于 2021-4-5 15:43 | 只看該作者
sgq657785 發(fā)表于 2021-4-5 14:10
明明是1602液晶怎么變12864液晶了?

我寫程序的時(shí)候比較懶,喜歡移植別人的程序不改變量名,作者可能和我差不多,這程序是從12864移植而來的
回復(fù)

使用道具 舉報(bào)

7#
ID:954102 發(fā)表于 2021-7-17 17:01 | 只看該作者
具體是怎么測(cè)得呢
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表