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

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

QQ登錄

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

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

STC單片機(jī)直驅(qū)LED數(shù)碼管顯示DS18B20溫度 電子溫度計(jì)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1029542 發(fā)表于 2022-12-9 21:27 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
放一下之前寫(xiě)的程序,單片機(jī)IO直接驅(qū)動(dòng)4位數(shù)碼管,同時(shí)具備顯示ds18b20溫度功能,可作為溫度電子溫度計(jì)。

單片機(jī)源程序如下:
  1. #include "sys.h"
  2. #include "temp.h"


  3. #define FOSC 24000000L      //時(shí)鐘頻率
  4. #define tm0_delay 1                                        //tm0_delay*ms
  5. //STC老單片機(jī)使用  
  6. //#define T1MS         (int)(65536-(int)((float)1000*(float)tm0_delay/((float)1/((float)FOSC/(float)1000000/(float)12))))     //12T模式 定時(shí)器定時(shí)時(shí)間自動(dòng)計(jì)算
  7. //STC1T單片機(jī)使用  
  8. #define T1MS         (int)(65536-(int)((float)1000*(float)tm0_delay/((float)1/((float)FOSC/(float)1000000/(float)1))))     //1T模式 定時(shí)器定時(shí)時(shí)間自動(dòng)計(jì)算

  9. //根據(jù)自己硬件的實(shí)際硬件連接來(lái)設(shè)定
  10. sbit led_a         =        P1^3; //數(shù)碼管段引腳 11
  11. sbit led_b         =        P1^7; //數(shù)碼管段引腳 7
  12. sbit led_c         =        P3^6; //數(shù)碼管段引腳 4
  13. sbit led_d         =        P1^0; //數(shù)碼管段引腳 2
  14. sbit led_e         =        P1^1; //數(shù)碼管段引腳 1
  15. sbit led_f         =        P1^4; //數(shù)碼管段引腳 10
  16. sbit led_g         =        P3^5; //數(shù)碼管段引腳 5
  17. sbit led_dp        =        P3^7; //數(shù)碼管段引腳 3

  18. sbit led_w1        =        P1^2; //數(shù)碼管位引腳 12
  19. sbit led_w2        =        P1^5; //數(shù)碼管位引腳 9
  20. sbit led_w3        =        P1^6; //數(shù)碼管位引腳 8
  21. sbit led_w4        =        P3^2; //數(shù)碼管位引腳 6

  22.   
  23. u8 code led_duan[16]={
  24. 0X3F,0X06,0x5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0X77,0X7C,0X39,0X5E,0X79,0X71 //共陰段碼
  25. //0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e  //共陽(yáng)段碼
  26. };
  27. u8 code led_wei[8]={
  28. 0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F//共陰位碼
  29. //0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80//共陽(yáng)位碼
  30. };//位碼

  31. u8 bdata daun_gpio; //段碼 位尋址
  32. sbit duan_bit7=daun_gpio^7;
  33. sbit duan_bit6=daun_gpio^6;
  34. sbit duan_bit5=daun_gpio^5;
  35. sbit duan_bit4=daun_gpio^4;
  36. sbit duan_bit3=daun_gpio^3;
  37. sbit duan_bit2=daun_gpio^2;
  38. sbit duan_bit1=daun_gpio^1;
  39. sbit duan_bit0=daun_gpio^0;

  40. u8 bdata wei_gpio; //位碼 位尋址
  41. sbit wei_bit3=wei_gpio^3;
  42. sbit wei_bit2=wei_gpio^2;
  43. sbit wei_bit1=wei_gpio^1;
  44. sbit wei_bit0=wei_gpio^0;


  45. u16 time_clk=0;

  46. void duan_gpio_out(u8 dat,u8 dat1);  //解碼段位
  47. void disp_num_dat(int dat);                //顯示最大數(shù)字0-9999
  48. void InitTimer0();//定時(shí)器0初始化

  49. u8 disp_num[4]; //數(shù)碼管顯示緩存
  50. void duan_gpio_out(u8 dat,u8 dat1)  //解碼段位,位碼
  51. {       
  52.         daun_gpio=dat;
  53.         wei_gpio=dat1;
  54.         led_a =duan_bit0;
  55.         led_b =duan_bit1;
  56.         led_c =duan_bit2;
  57.         led_d =duan_bit3;
  58.         led_e =duan_bit4;
  59.         led_f =duan_bit5;
  60.         led_g =duan_bit6;
  61.         led_dp=duan_bit7;

  62.         led_w1=wei_bit0;
  63.         led_w2=wei_bit1;
  64.         led_w3=wei_bit2;
  65.         led_w4=wei_bit3;
  66. }
  67. void int_start(void)  //外部中斷,定時(shí)器中斷初始化
  68. {
  69.         //TMOD = 0x01;
  70.   TMOD=0X00;
  71.         TL0 = T1MS;
  72.         TH0 = T1MS>>8;
  73.         EA = 1;
  74.         ET0 = 1;
  75.         TR0 = 1;
  76. }
  77. void disp_num_dat(int dat)//顯示解碼 0-9999
  78. {
  79.   //  disp_num[0]=0x00;
  80.                 disp_num[1]=led_duan[(dat%1000)/100];
  81.                 disp_num[2]=led_duan[(dat%100)/10];
  82.                 disp_num[3]=led_duan[(dat%10)/1];
  83. }

  84. void temp_disp(int temp)//溫度顯示
  85. {  
  86.         float tp;  
  87.         if(temp< 0)                                //當(dāng)溫度值為負(fù)數(shù)
  88.           {
  89.       disp_num[0]=0x40; //負(fù)溫度符號(hào)  
  90.                 //因?yàn)樽x取的溫度是實(shí)際溫度的補(bǔ)碼,所以減1,再取反求出原碼
  91.                 temp=temp-1;
  92.                 temp=~temp;
  93.                 tp=temp;
  94.                 temp=tp*0.0625*100+0.5;       
  95.                 //留兩個(gè)小數(shù)點(diǎn)就*100,+0.5是四舍五入,因?yàn)镃語(yǔ)言浮點(diǎn)數(shù)轉(zhuǎn)換為整型的時(shí)候把小數(shù)點(diǎn)
  96.                 //后面的數(shù)自動(dòng)去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進(jìn)1了,小于0.5的就
  97.                 //算由?.5,還是在小數(shù)點(diǎn)后面。

  98.           }
  99.         else
  100.           {               
  101.        disp_num[0]=0x76;   
  102.                 tp=temp;//因?yàn)閿?shù)據(jù)處理有小數(shù)點(diǎn)所以將溫度賦給一個(gè)浮點(diǎn)型變量
  103.                 //如果溫度是正的那么,那么正數(shù)的原碼就是補(bǔ)碼它本身
  104.                 temp=tp*0.0625*100+0.5;       
  105.                 //留兩個(gè)小數(shù)點(diǎn)就*100,+0.5是四舍五入,因?yàn)镃語(yǔ)言浮點(diǎn)數(shù)轉(zhuǎn)換為整型的時(shí)候把小數(shù)點(diǎn)
  106.                 //后面的數(shù)自動(dòng)去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進(jìn)1了,小于0.5的就
  107.                 //算加上0.5,還是在小數(shù)點(diǎn)后面。
  108. }
  109.   temp=temp/100;
  110. if(temp<10)
  111.   {
  112.                 //disp_num[0]=0x00;
  113.                 disp_num[1]=0x00;
  114.                 disp_num[2]=0x00;
  115.                 disp_num[3]=led_duan[(temp%10)/1];
  116.   }
  117.   if(temp>9)
  118.   {
  119.     if(temp<100)
  120.     {
  121.     //disp_num[0]=0x00;
  122.                 disp_num[1]=0x00;
  123.                 disp_num[2]=led_duan[(temp%100)/10];
  124.                 disp_num[3]=led_duan[(temp%10)/1];
  125.     }
  126.      if(temp>99)
  127.     {
  128.    // disp_num[0]=0x00;
  129.                 disp_num[1]=led_duan[(temp%1000)/100];
  130.                 disp_num[2]=led_duan[(temp%100)/10];
  131.                 disp_num[3]=led_duan[(temp%10)/1];
  132.     }
  133.   }
  134. }

  135. void main()
  136. {
  137.   char mode_dat=0;
  138.   
  139.         AUXR = AUXR|0x80;  // T0, 1T Mode
  140.         int_start();//初始化中斷和定時(shí)器
  141.         P1M1 = 0<<0|0<<1|0<<2|0<<3|0<<4|0<<5|0<<6|0<<7;//配置端口模式
  142.         P1M0 = 1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7;//配置端口模式
  143.         P3M1 = 0<<0|0<<1|0<<2|0<<3|0<<4|0<<5|0<<6|0<<7;//配置端口模式
  144.         P3M0 = 0<<0|0<<1|1<<2|1<<3|0<<4|1<<5|1<<6|1<<7;//配置端口模式
  145.         P5M0=0X00;
  146.         P5M1=0X00;
  147.   Ds18b20Init();
  148.   
  149.         while(1)
  150.         {
  151.     if(time_clk==1000)//溫度調(diào)取周期
  152.     {
  153.    
  154.       temp_disp(Ds18b20ReadTemp());//讀取解析時(shí)間
  155.       time_clk=0;
  156.     }
  157.    
  158.         }
  159. }
  160. void time0(void) interrupt 1//
  161. {
  162.         static u8 i;
  163.         TL0 = T1MS;
  164.         TH0 = T1MS>>8;
  165.   time_clk++;
  166.   i++;
  167.   i=i&0x03;
  168.   duan_gpio_out(0x00,0xff);//消影
  169.   duan_gpio_out(disp_num[i],led_wei[i]);        //刷新LED
  170. }
復(fù)制代碼

Keil代碼下載(附件內(nèi)只有代碼 無(wú)原理圖等其他資料,如介意請(qǐng)勿下載):
代碼.7z (30.37 KB, 下載次數(shù): 30)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1063134 發(fā)表于 2023-3-12 10:12 | 只看該作者
問(wèn)題不在代碼在于是否能帶動(dòng),電流是否夠
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩日韩日韩日韩日韩日韩日韩 | 久久小视频 | 在线午夜 | 国产粉嫩尤物极品99综合精品 | 国产一级电影在线观看 | 黄色毛片在线观看 | 亚洲欧美精品 | 视频一区二区在线观看 | 欧美一区二区三区在线播放 | 中文字幕亚洲国产 | 综合二区 | 国产精品久久久久久福利一牛影视 | 成人免费久久 | 日韩欧美一区二区三区四区 | 国产欧美在线 | 亚洲人成一区二区三区性色 | 国产欧美一区二区三区在线看 | 操人网 | 黄色大片免费网站 | 亚洲免费在线视频 | 99免费在线观看 | 国产激情一区二区三区 | 精品国产31久久久久久 | 国产精品久久久久久久久久久久久久 | 中文字幕 在线观看 | 国产成人精品一区二区三区视频 | 成年视频在线观看 | 一区二区三区中文字幕 | 亚洲一区二区国产 | 99免费在线观看 | 黄色在线免费观看 | 午夜伦理影院 | 欧美精品一区二区三区在线播放 | 91视频进入 | 天天操网| 国产91综合 | 精品亚洲一区二区 | 黄色一级免费观看 | 中文字幕四虎 | 亚洲区视频 | 天天射影院 |