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

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

QQ登錄

只需一步,快速開始

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

求大神,用STC89C52芯片程序需要怎樣修改,TM1637和DS18B20

[復(fù)制鏈接]
ID:917238 發(fā)表于 2021-8-12 18:07 來(lái)自觸屏版 | 顯示全部樓層 |閱讀模式
#include "STC15W4K.H"
#include "DS18b20.h"
#include "myfun.h"
#include "TM1637.h"
unsigned char str[6];                   // 最長(zhǎng)字符10字節(jié),比如:-123.4567/0
unsigned char zf;
//****************溫度數(shù)據(jù)處理函數(shù)************************/
void gettemp()                           //讀取溫度值
{                     
         unsigned int temp0,temp;      // 存放小數(shù)、整數(shù)、符號(hào),10000倍小數(shù)值
         temp=DS18B20_ReadTemperature();         // 從18B20中讀取2字節(jié)原始溫度值
         
         if ((temp&0xf800)!=0)                   // 如果是負(fù)溫,將補(bǔ)碼取反加1變?yōu)樵a
         {
                 temp=~temp        +1;
                 zf=1;                 //負(fù)值
     temp0=temp*0.0625*100+0.5;        
                }        
         
         else            //溫度>0
          {        
                        zf=0;                 //正值
                        temp0=temp*0.0625*100+0.5;
                }
                 str[1]=temp0 / 10000;
                str[2]=temp0 % 10000 / 1000;
                str[3]=temp0 % 1000 / 100;
                str[4]=temp0 % 100 / 10;
                str[5]=temp0 % 10;               
}
void xsled(void)   //送顯示
{
    SDA=1;
    SCL=1;
    start_IIC(); //調(diào)用開始信號(hào)
    WriteByte(0x44);//寫命令40H(數(shù)據(jù)設(shè)置)
    stop_IIC(); //調(diào)用結(jié)束信號(hào),一個(gè)字節(jié)命令發(fā)送完畢,可以發(fā)送下一個(gè)命令

        switch(zf)
        {
                case 0:    //正值
                             if (str[1]==0)
                                         {
                                         write_LEDSROM(0xC0,xsbcdbuf[str[2]]); //第一個(gè)數(shù)碼管顯示十位
                       write_LEDSROM(0xC1,xsbcdbuf[str[3]]|0x80);  //第二個(gè)數(shù)碼管 個(gè)位
           write_LEDSROM(0xC2,xsbcdbuf[str[4]]); //第三個(gè)數(shù)碼管  小數(shù)1位
           write_LEDSROM(0xC3,xsbcdbuf[str[5]]);//第四個(gè)數(shù)碼管  小數(shù)2位
                                   }
                                         else
                                         {
                                         write_LEDSROM(0xC0,xsbcdbuf[str[2]]); //第一個(gè)數(shù)碼管顯示十位
                       write_LEDSROM(0xC1,xsbcdbuf[str[3]]|0x80);  //第二個(gè)數(shù)碼管 個(gè)位
           write_LEDSROM(0xC2,xsbcdbuf[str[4]]); //第三個(gè)數(shù)碼管  小數(shù)1位
           write_LEDSROM(0xC3,xsbcdbuf[11]);//第四個(gè)數(shù)碼管 顯示 A               
                                         }
                                                 break;
                case 1:   //負(fù)值
                             write_LEDSROM(0xC0,xsbcdbuf[str[2]]); //第一個(gè)數(shù)碼管顯示 十位
                                   write_LEDSROM(0xC1,xsbcdbuf[str[3]]|0x80);  //第二個(gè)數(shù)碼管  個(gè)位
           write_LEDSROM(0xC2,xsbcdbuf[str[4]]); //第三個(gè)數(shù)碼管  小數(shù)1位        
           write_LEDSROM(0xC3,0x40);//第四個(gè)數(shù)碼管  -
                                         break;        
        }
   
    IIC_delay();
    start_IIC(); //調(diào)用開始信號(hào)
    WriteByte(0x8a); //送開屏命令,(8BH),亮度可以根據(jù)低三位調(diào)節(jié)。//顯示亮度
    stop_IIC(); //調(diào)用結(jié)束信號(hào),一個(gè)字節(jié)命令發(fā)送完畢,可以發(fā)送下一個(gè)命令
}
void port_mode()            // 端口模式
{
        P0M1=0x00; P0M0=0x00;P1M1=0x00; P1M0=0x00;P2M1=0x00; P2M0=0x00;P3M1=0x00; P3M0=0x00;
        P4M1=0x00; P4M0=0x00;P5M1=0x00; P5M0=0x00;P6M1=0x00; P6M0=0x00;P7M1=0x00; P7M0=0x00;
}
void main()
{
        unsigned char *s="Now temp is:";
        port_mode();                      // 所有IO口設(shè)為準(zhǔn)雙向弱上拉方式。
        DS18B20_SetResolution(3);     // 設(shè)置DS18B20的分辨率為12位(默認(rèn)值,新器件可以不作任何設(shè)置)
        while(1)
        {               
                gettemp();
                xsled();
                delay60us();
        }
}
回復(fù)

使用道具 舉報(bào)

ID:401564 發(fā)表于 2021-8-13 00:11 | 顯示全部樓層
如果是軟件延時(shí),那主要就是延時(shí)部分要修改
回復(fù)

使用道具 舉報(bào)

ID:190577 發(fā)表于 2021-8-13 06:47 | 顯示全部樓層
主要要修改延時(shí)函數(shù),還有單片機(jī)接口定義。
回復(fù)

使用道具 舉報(bào)

ID:584195 發(fā)表于 2021-8-13 07:07 | 顯示全部樓層
建議你用邏輯分析儀看看你的寫18B20的時(shí)序?qū)Σ粚?duì)。按理來(lái)講18B20如果時(shí)序不對(duì),也會(huì)讀出來(lái)FF值來(lái),你顯示會(huì)看到的。
回復(fù)

使用道具 舉報(bào)

ID:917238 發(fā)表于 2021-8-13 08:36 來(lái)自觸屏版 | 顯示全部樓層
Y_G_G 發(fā)表于 2021-8-13 00:11
如果是軟件延時(shí),那主要就是延時(shí)部分要修改

IO口,時(shí)鐘口和數(shù)據(jù)口怎么定義?不好意思小白一個(gè)
回復(fù)

使用道具 舉報(bào)

ID:917238 發(fā)表于 2021-8-13 11:51 來(lái)自觸屏版 | 顯示全部樓層
bbxyliyang 發(fā)表于 2021-8-13 06:47
主要要修改延時(shí)函數(shù),還有單片機(jī)接口定義。

謝謝!還是不會(huì)
回復(fù)

使用道具 舉報(bào)

ID:917238 發(fā)表于 2021-8-13 11:52 來(lái)自觸屏版 | 顯示全部樓層
zyluglugl 發(fā)表于 2021-8-13 07:07
建議你用邏輯分析儀看看你的寫18B20的時(shí)序?qū)Σ粚?duì)。按理來(lái)講18B20如果時(shí)序不對(duì),也會(huì)讀出來(lái)FF值來(lái),你顯示會(huì) ...

謝謝!感謝您的幫助
回復(fù)

使用道具 舉報(bào)

ID:917238 發(fā)表于 2021-8-13 11:53 來(lái)自觸屏版 | 顯示全部樓層
bbxyliyang 發(fā)表于 2021-8-13 06:47
主要要修改延時(shí)函數(shù),還有單片機(jī)接口定義。

謝謝你們啦
回復(fù)

使用道具 舉報(bào)

ID:401564 發(fā)表于 2021-8-13 13:13 | 顯示全部樓層
a18075128066 發(fā)表于 2021-8-13 08:36
IO口,時(shí)鐘口和數(shù)據(jù)口怎么定義?不好意思小白一個(gè)

這???
難道你學(xué)C語(yǔ)言不是一步一步來(lái)的嗎?這可是基礎(chǔ)呀
在包含的頭文件中,但不知道是哪個(gè),你在Keil雙擊打開.h文件,看里面哪里有SDA=P....之類的,這就是端口的定義,你可以修改成你的
比如,里頭是 SDA=P1^6;
而你是用的P3.0
那就改成 SDA=P3^0;
回復(fù)

使用道具 舉報(bào)

ID:158375 發(fā)表于 2021-8-13 15:16 | 顯示全部樓層
a18075128066 發(fā)表于 2021-8-13 08:36
IO口,時(shí)鐘口和數(shù)據(jù)口怎么定義?不好意思小白一個(gè)

按照
Y_G_G 發(fā)表于 2021-8-13 13:13 | 只看該作者
說(shuō)的修改管教定義
回復(fù)

使用道具 舉報(bào)

ID:917238 發(fā)表于 2021-8-13 16:40 來(lái)自觸屏版 | 顯示全部樓層
#include<reg52.h>
#include<intrins.h>
sbit SCL=P1^2;
sbit SDA=P1^3;
unsigned char t,shi,ge,bai,dadt;
unsigned char code xsbcdbuf[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77};
/*************************************************************************

********************
LCD WRITE 模式 連續(xù)寫入數(shù)據(jù)
*************************************************************************/
/*********************************************************

*IIC_delay

*******************************************************/

void init()
{
  TMOD=0X01;
  TH0=(65535-50000)/256;
  TL0=(65535-50000)%256;
  ET0=1;
  EA=1;
  TR0=1;
}

void IIC_delay(void)
{
  unsigned char i;
  for(i=0;i<20;i++) _nop_();
}

/*********************************************************
*
啟動(dòng)IIC
*********************************************************/

void start_IIC(void)

{
  SCL=1; //給芯片發(fā)送開始信號(hào)
  SDA=1;
  IIC_delay();
  SDA=0;
  IIC_delay();
  SCL=0; //開始信號(hào)傳送完
  IIC_delay();
}

/*******************************************************
*
停止IIC
*******************************************************/
void stop_IIC(void)
{
  SCL=0;
  IIC_delay();
  SDA=0;
  IIC_delay();
  SCL=1;
  IIC_delay();
  SDA=1;
}

void ack_IIC()
{
  SCL=0;
  _nop_();_nop_();_nop_();
  while(SDA);
  SCL=1;
  _nop_();_nop_();_nop_();
  SCL=0;
}

/*******************************************************
*
寫一個(gè)字節(jié)數(shù)據(jù)
*******************************************************/

void WriteByte(unsigned char WriteData)
{
  unsigned char i;
  for(i=0;i<8;i++)//開始傳送8位數(shù)據(jù),每循環(huán)一次傳送一位數(shù)據(jù)
  {
  SCL=0;
  IIC_delay();
  WriteData=WriteData>>1;
  SDA=CY;
  IIC_delay();
  SCL=1;
  IIC_delay();
  }
//8位數(shù)據(jù)傳送完
  ack_IIC(); //判斷芯片發(fā)過來(lái)的ACK應(yīng)答信號(hào)
}
/*******************************************************

/************************************************
寫一字節(jié)數(shù)據(jù)到LEDSROM
**************************************************/

void write_LEDSROM(unsigned char addr,unsigned char WData)
{
  start_IIC(); //調(diào)用開始信號(hào)
  WriteByte(addr); //寫起始地址命令(0C0H),地址00H單元。
  WriteByte(WData);//給顯示寄存器寫顯示數(shù)據(jù),值可根據(jù)實(shí)參改變
  stop_IIC(); //調(diào)用結(jié)束信號(hào),一個(gè)字節(jié)命令發(fā)送完畢,可以發(fā)送下一個(gè)命令
}
/************************************************
/************************************************
*
分開寫數(shù)據(jù)到LED
**************************************************/
void xsled(void)
{
  SDA=1;
  SCL=1;
  start_IIC(); //調(diào)用開始信號(hào)
  WriteByte(0x44);//寫命令40H(數(shù)據(jù)設(shè)置)
  stop_IIC(); //調(diào)用結(jié)束信號(hào),一個(gè)字節(jié)命令發(fā)送完畢,可以發(fā)送下一個(gè)命令
  write_LEDSROM(0xC0,0x00); //第一個(gè)數(shù)碼管
  write_LEDSROM(0xC1,xsbcdbuf[bai]);//第二個(gè)數(shù)碼管
  write_LEDSROM(0xC2,xsbcdbuf[shi]); //第三個(gè)數(shù)碼管
  write_LEDSROM(0xC3,xsbcdbuf[ge]);//第四個(gè)數(shù)碼管
  IIC_delay();
  start_IIC(); //調(diào)用開始信號(hào)
  WriteByte(0x8a); //送開屏命令,(8BH),亮度可以根據(jù)低三位調(diào)節(jié)。//顯示亮度
  stop_IIC(); //調(diào)用結(jié)束信號(hào),一個(gè)字節(jié)命令發(fā)送完畢,可以發(fā)送下一個(gè)命令
}

void jisuan()
{
  bai=dadt/100;
  shi=dadt/10%10;
  ge=dadt%10;
}

void main()
{
  //P1=0xff;
  init();
while(1)
  {
  jisuan();
  xsled();
  if(t==20)
  {
    t=0;
    dadt++;
    if(dadt==1000)
    {
      dadt=0;
    }
  }
  }
}

void T0_time() interrupt 1
{
  TH0=(65535-50000)/256;
  TL0=(65535-50000)%256;
  t++;
回復(fù)

使用道具 舉報(bào)

ID:401564 發(fā)表于 2021-8-13 21:49 | 顯示全部樓層
哥們,你連IO端口定義都還不知道,就搞這么多代碼的程序,你不覺得難度有點(diǎn)大嗎?
但對(duì)于我來(lái)說(shuō),難度并不大,雖然我沒寫過18B20程序,但我覺得這并不難
雖然我七月底才開始學(xué)C語(yǔ)言,我現(xiàn)在已經(jīng)看不上18B20這種程序了,現(xiàn)在在開始學(xué)PID控制
跟你說(shuō)這.并不是說(shuō)我有多能,只是想分享一下學(xué)習(xí)
我學(xué)C語(yǔ)言是對(duì)著教程,一個(gè)一個(gè)的學(xué)的,延時(shí),流水燈,定時(shí)器....一個(gè)一個(gè)小程序的來(lái),一個(gè)一個(gè)都要自己寫,哪怕是已經(jīng)完全看明白了,也要一行一行代碼的寫,基本沒有復(fù)制過一個(gè)別人的程序,就算是抄也是自己抄出來(lái)的
像你這個(gè)程序,就得一個(gè)一個(gè)功能來(lái)的,不能是復(fù)制粘貼,然后燒錄試看一下
先寫LCD的功能,去把LCD的數(shù)據(jù)手冊(cè)看明白了,然后再寫
寫完LCD就開始寫IIC的,如果LCD的是IIC通訊的話,就得先學(xué)IIC
..........就這么多了
回復(fù)

使用道具 舉報(bào)

ID:917238 發(fā)表于 2021-8-14 03:10 來(lái)自觸屏版 | 顯示全部樓層
Y_G_G 發(fā)表于 2021-8-13 21:49
哥們,你連IO端口定義都還不知道,就搞這么多代碼的程序,你不覺得難度有點(diǎn)大嗎?
但對(duì)于我來(lái)說(shuō),難度并不大,雖 ...

謝謝您告訴我這么多東西
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 人妖av| 精品少妇一区二区三区在线播放 | 色资源在线观看 | 极品的亚洲 | re久久 | 亚洲精品一二三区 | 亚洲一区二区三区在线视频 | 午夜小视频在线播放 | 国产精品成人一区二区三区吃奶 | 久久久久久久久精 | 毛片一区二区 | 中文字幕视频在线观看 | 一区二区视频 | 国产精品爱久久久久久久 | 亚洲国产精品一区二区第一页 | 久久综合久色欧美综合狠狠 | 狠狠色综合久久丁香婷婷 | 北条麻妃国产九九九精品小说 | 久久精品一区二区三区四区 | 五月激情婷婷在线 | a看片| 成人影院网站ww555久久精品 | 人人操日日干 | 国产在线网站 | 激情欧美一区二区三区 | 久久久久久免费免费 | 久久久久久高潮国产精品视 | 久久九精品 | 狠狠色综合网站久久久久久久 | 亚洲高清av| 欧美一级片在线观看 | 中文字幕精品一区二区三区精品 | 日韩精品在线观看一区二区三区 | 欧美视频精品 | 欧洲一级视频 | 中文字幕一区在线 | 超碰成人免费 | 国产一区二区精品在线 | 青草福利 | 九九久久99 | 久久精品中文字幕 |