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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2312|回復: 1
打印 上一主題 下一主題
收起左側

stc15單片機+1602+ds1302+18b20+串口源程序

[復制鏈接]
跳轉到指定樓層
樓主
使用15單片機+1602+ds1302+18b20+串口。因為是15沒有仿真圖圖,有pro的設計圖,可以看一下。引腳的連線在子程序里有。

制作出來的實物圖如下:


Proteus畫的電路圖:


單片機源程序如下:
  1. #include "STC15.h"
  2. #include "LCD1602.h"
  3. #include "ds18b20.h"
  4. #include "ds1302.h"
  5. #include "delay.h"

  6. u16 dispbuf[]={0,0,0,0};                //存放溫度值
  7. uchar CNCHAR[6] = "WenDu ";


  8. //函數聲明
  9. void temp_dis();       //溫度顯示
  10. void LcdDisplay();     //時間顯示
  11. void LCD1602xianshi();  //屏幕顯示
  12. void GPIO();            //端口
  13. void Delay200us();      //延時
  14. void UartInit();          //串口

  15. void main()       //主函數
  16. {
  17.         GPIO();           //串口初始化
  18.         LCD_init();      //屏幕初始化
  19.         UartInit();
  20.         LCD1602xianshi();   //屏幕顯示
  21.         while(1)
  22.         {
  23.                 temp_dis();             //顯示溫度
  24.                 Ds1302ReadTime();      //讀取時間
  25.                 Delay200us();
  26.                 LcdDisplay();          //顯示時間
  27.         }
  28. }


  29. //溫度顯示
  30. void temp_dis()
  31. {
  32.         u16 j;
  33.         u8 i;
  34.         j=ReadTemperature();
  35.         for(i=0; i<6; i++)
  36.         {
  37.                  SBUF = CNCHAR[i];//將接收到的數據放入到發送寄存器
  38.                 while (!TI);                                 //等待發送數據完成
  39.                 TI = 0;
  40.         }
  41.         if(j<0)
  42.         {
  43.                 dispbuf[0]= j/100;                        //十位
  44.                 dispbuf[1]= j%100/10;                //個位
  45.                 dispbuf[2]= j%100%10;                //取溫度小數點1位
  46.                 LCD1602_char(2,3,'-');
  47.                 {SBUF='-';              //將接收到的數據放入到發送寄存器
  48.                 while(!TI);                                 
  49.                 TI=0;}        
  50.                 LCD1602_char(2,4,dispbuf[0]+'0');
  51.                 {SBUF = dispbuf[0]+'0';//將接收到的數據放入到發送寄存器
  52.            while (!TI);                                 
  53.            TI = 0;}
  54.                 LCD1602_char(2,5,dispbuf[1]+'0');
  55.                  {SBUF = dispbuf[1]+'0'; //將接收到的數據放入到發送寄存器
  56.            while (!TI);                              
  57.            TI = 0;}
  58.                 LCD1602_char(2,6,'.');
  59.                 {SBUF='.';              //將接收到的數據放入到發送寄存器
  60.                 while(!TI);                                 
  61.                 TI=0;}
  62.                 LCD1602_char(2,7,dispbuf[2]+'0');
  63.                 {SBUF = dispbuf[2]+'0';//將接收到的數據放入到發送寄存器
  64.            while (!TI);                                
  65.            TI = 0;}
  66.         }
  67.         else
  68.         {
  69.                 dispbuf[0]= j/100;                        //十位
  70.                 dispbuf[1]= j%100/10;                //個位
  71.                 dispbuf[2]= j%100%10;                //取溫度小數點1位
  72.                 LCD1602_char(2,3,'+');
  73.                 {SBUF='+';              //將接收到的數據放入到發送寄存器
  74.                 while(!TI);                                 //等待發送數據完成
  75.                 TI=0;}
  76.                 LCD1602_char(2,4,dispbuf[0]+'0');
  77.                 {SBUF = dispbuf[0]+'0';//將接收到的數據放入到發送寄存器
  78.            while (!TI);                                 
  79.            TI = 0;}
  80.                 LCD1602_char(2,5,dispbuf[1]+'0');
  81.                  {SBUF = dispbuf[1]+'0'; //將接收到的數據放入到發送寄存器
  82.            while (!TI);                              
  83.            TI = 0;}
  84.                 LCD1602_char(2,6,'.');
  85.                 {SBUF='.';              //將接收到的數據放入到發送寄存器
  86.                 while(!TI);                                 //等待發送數據完成
  87.                 TI=0;}
  88.                 LCD1602_char(2,7,dispbuf[2]+'0');
  89.                 {SBUF = dispbuf[2]+'0';//將接收到的數據放入到發送寄存器
  90.            while (!TI);                                
  91.            TI = 0;}
  92.         }
  93. }

  94. //時間顯示
  95. void LcdDisplay()
  96. {
  97.         LCD1602_char(1,3,'0'+TIME[6]/16);                        //年
  98.         LCD1602_char(1,4,'0'+(TIME[6]&0x0f));
  99.         LCD1602_char(1,5,'0'+TIME[4]/16);                        //月
  100.         LCD1602_char(1,6,'0'+(TIME[4]&0x0f));
  101.         LCD1602_char(1,7,'0'+TIME[3]/16);                        //日
  102.         LCD1602_char(1,8,'0'+(TIME[3]&0x0f));
  103.         
  104.         
  105.         LCD1602_char(1,10,'0'+TIME[2]/16);                                //時
  106.         LCD1602_char(1,11,'0'+(TIME[2]&0x0f));                                 
  107.         LCD1602_char(1,12,'0'+TIME[1]/16);                                //分
  108.         LCD1602_char(1,13,'0'+(TIME[1]&0x0f));        
  109.         LCD1602_char(1,15,'0'+TIME[0]/16);                                //秒
  110.         LCD1602_char(1,16,'0'+(TIME[0]&0x0f));
  111. }


  112. void LCD1602xianshi()      //1602屏幕顯示
  113. {
  114.         LCD1602_string(2,1,"Tm");  
  115.   LCD1602_string(1,1,"20");
  116.   LCD1602_char(1,9,'-');
  117.         LCD1602_char(1,14,':');
  118.         Ds1302Init();
  119. }

  120. void GPIO()                   //串口初始化
  121. {
  122.         P0M0=0X00;P0M1=0X00;
  123.         P2M0=0X00;P2M1=0X00;
  124.         P3M0=0X00;P3M1=0X00;
  125.         P4M0=0X00;P4M1=0X00;
  126.         P5M0=0X00;P5M1=0X00;        
  127. }

  128. void Delay200us()                //@11.0592MHz   軟件延時200微秒
  129. {
  130.         unsigned char i, j;

  131.         i = 3;
  132.         j = 35;
  133.         do
  134.         {
  135.                 while (--j);
  136.         } while (--i);
  137. }



  138. void UartInit(void)                //9600bps@11.0592MHz串口初始化
  139. {
  140.         PCON &= 0x7F;                //波特率不倍速
  141.         SCON = 0x50;                //8位數據,可變波特率
  142.         AUXR |= 0x40;                //定時器1時鐘為Fosc,即1T
  143.         AUXR &= 0xFE;                //串口1選擇定時器1為波特率發生器
  144.         TMOD &= 0x0F;                //清除定時器1模式位
  145.         TMOD |= 0x20;                //設定定時器1為8位自動重裝方式
  146.         TL1 = 0xDC;                //設定定時初值
  147.         TH1 = 0xDC;                //設定定時器重裝值
  148.         ET1 = 0;                //禁止定時器1中斷
  149.         TR1 = 1;                //啟動定時器1
  150. }
復制代碼


1602 18b20 ds1302 串口.zip

141.08 KB, 下載次數: 30, 下載積分: 黑幣 -5

電路設計圖.zip

16.44 KB, 下載次數: 18, 下載積分: 黑幣 -5

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:102963 發表于 2020-11-5 07:21 | 只看該作者
STC15為什么沒有仿真圖呢?Proteus仿真里面有單片機STC15W4K32S4,8.9版本上可以用的!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美午夜影院 | 91九色视频 | 日韩中文字幕第一页 | av网站在线免费观看 | 91精品国产91久久久久青草 | 在线视频一区二区 | 国产欧美精品一区二区 | 三级高清| 在线观看日本网站 | 一本色道久久综合亚洲精品高清 | 久久久亚洲成人 | 亚洲成人免费视频在线 | 一区二区三区国产精品 | 成人一区二区在线 | 欧美亚洲网站 | 亚洲国产欧美精品 | 亚洲一区在线日韩在线深爱 | 成人免费日韩 | 在线播放亚洲 | 亚洲精品视频观看 | 欧美簧片 | 免费一级片 | 国产一级片免费视频 | 亚洲精品视频在线播放 | 久久久不卡网国产精品一区 | 午夜精品久久久久久久星辰影院 | 久久乐国产精品 | 天堂中文av| 有码在线 | 久久美国 | 天堂一区二区三区 | 日日夜夜天天综合 | 久久久五月天 | 中文字幕三区 | 亚洲欧美激情国产综合久久久 | 夜夜草| 国产成人jvid在线播放 | 一级欧美 | 91麻豆精品国产91久久久久久久久 | 午夜久久久久久久久久一区二区 | 一区二区三区精品 |