在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

12位AD DS1621與12864液晶的單片機程序概述

2oON_changxuemc ? 來源:未知 ? 作者:易水寒 ? 2018-07-19 16:46 ? 次閱讀

DS1621與lcd12864和單片機接口仿真原理圖



//EDM12864B DRIVE//

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

PAGEADD為頁地址起使

TIERADD為行地址起使

DIS_STARTADD為開始命令

CTABLE為漢字字庫數組

ETABLE為英文字庫數組

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

#include

#define uchar unsigned char

#define uint unsigned int

#define High 1

#define Low 0

#define _nop {}

#define PAGEADD 0xb8

#define TIERADD 0x40

#define DIS_STARADD 0xc0

uint key_value;

sbit DI=P1^4;

sbit E=P1^2;

sbit CS1=P1^1;

sbit CS2=P1^0;

sbit RW=P1^3;

sbit cs=P1^7;

sbit sclk=P1^6;

sbit dout=P1^5;

sbit I2C_SCL = P3^7;

sbit I2C_SDA = P3^6;

//uchar ntable[]={61,49,57,60,19,49,62,49,60,63,55,2,0,0,6,22,56,

//63,68,61,49,57,60,17,51,63,61};//email:analog2006@hotmail.com

uchar data voltage_display[8];

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

字符表

顯示"Welcome Use"

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

uchar code table1[]={

0x00,0x3e,0x51,0x49,0x45,0x3e,0x00,0x00,//0(0)

0x00,0x00,0x42,0x7f,0x40,0x00,0x00,0x00,//1

0x00,0x42,0x61,0x51,0x49,0x46,0x00,0x00,//2

0x00,0x21,0x41,0x45,0x4b,0x31,0x00,0x00,//3

0x00,0x18,0x14,0x12,0x7f,0x10,0x00,0x00,//4

0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00,//5

0x00,0x3c,0x4a,0x49,0x49,0x30,0x00,0x00,//6

0x00,0x01,0x01,0x79,0x05,0x03,0x00,0x00,//7

0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00,//8

0x00,0x06,0x49,0x49,0x29,0x1e,0x00,0x00,//9

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// (10)

0x00,0x00,0x00,0x47,0x00,0x00,0x00,0x00,//!

0x00,0x23,0x13,0x08,0x64,0x62,0x00,0x00,//%

0x00,0x36,0x49,0x55,0x22,0x50,0x00,0x00,//&

0x00,0x14,0x08,0x3e,0x08,0x14,0x00,0x00,//*

0x00,0x08,0x08,0x3e,0x08,0x08,0x00,0x00,//+

0x00,0x08,0x08,0x08,0x08,0x08,0x00,0x00,//-

0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x00,//.

0x00,0x20,0x10,0x08,0x04,0x02,0x00,0x00,///

0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,//:(19)

0x00,0x14,0x14,0x14,0x14,0x14,0x00,0x00,//=

0x00,0x02,0x01,0x51,0x09,0x06,0x00,0x00,//?

0x00,0x32,0x49,0x79,0x41,0x3E,0x00,0x00,//@(22)

0x00,0x7e,0x11,0x11,0x11,0x7f,0x00,0x00,//A

0x00,0x41,0x7f,0x49,0x49,0x36,0x00,0x00,//B

0x00,0x3e,0x41,0x41,0x41,0x22,0x00,0x00,//C

0x00,0x41,0x7f,0x41,0x41,0x3e,0x00,0x00,//D

0x00,0x7f,0x49,0x49,0x49,0x49,0x00,0x00,//E

0x00,0x7f,0x09,0x09,0x09,0x01,0x00,0x00,//F

0x00,0x3e,0x41,0x41,0x49,0x7a,0x00,0x00,//G(29)

0x00,0x7f,0x08,0x08,0x08,0x7f,0x00,0x00,//H

0x00,0x00,0x41,0x7f,0x41,0x00,0x00,0x00,//I

0x20,0x40,0x41,0x3f,0x01,0x01,0x00,0x00,//J

0x00,0x7f,0x08,0x14,0x22,0x41,0x00,0x00,//K

0x00,0x7f,0x40,0x40,0x40,0x40,0x00,0x00,//L

0x00,0x7f,0x02,0x0c,0x02,0x7f,0x00,0x00,//M

0x00,0x7f,0x06,0x08,0x30,0x7f,0x00,0x00,//N

0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00,//O

0x00,0x7f,0x09,0x09,0x09,0x06,0x00,0x00,//P

0x00,0x3e,0x41,0x51,0x21,0x5e,0x00,0x00,//Q(39)

0x00,0x7f,0x09,0x19,0x29,0x46,0x00,0x00,//R

0x00,0x26,0x49,0x49,0x49,0x32,0x00,0x00,//S

0x00,0x01,0x01,0x7f,0x01,0x01,0x00,0x00,//T

0x00,0x3f,0x40,0x40,0x40,0x3f,0x00,0x00,//U

0x00,0x1f,0x20,0x41,0x20,0x1f,0x00,0x00,//V

0x00,0x7f,0x20,0x80,0x20,0x7f,0x00,0x00,//W

0x00,0x63,0x14,0x08,0x14,0x63,0x00,0x00,//X

0x00,0x07,0x08,0x70,0x08,0x07,0x00,0x00,//Y

0x00,0x61,0x51,0x49,0x45,0x43,0x00,0x00,//Z

0x00,0x20,0x54,0x54,0x54,0x78,0x00,0x00,//a(49)

0x00,0x20,0x54,0x54,0x54,0x78,0x00,0x00,//b

0x00,0x38,0x44,0x44,0x44,0x28,0x00,0x00,//c

0x00,0x38,0x44,0x44,0x48,0x7f,0x00,0x00,//d

0x00,0x38,0x54,0x54,0x54,0x18,0x00,0x00,//e

0x00,0x00,0x08,0x7e,0x09,0x02,0x00,0x00,//f

0x00,0x0c,0x52,0x52,0x4c,0x3e,0x00,0x00,//g

0x00,0x7f,0x08,0x04,0x04,0x78,0x00,0x00,//h

0x00,0x00,0x44,0x7d,0x40,0x00,0x00,0x00,//i

0x00,0x20,0x40,0x44,0x3d,0x00,0x00,0x00,//j

0x00,0x00,0x7f,0x10,0x28,0x44,0x00,0x00,//k(59)

0x00,0x00,0x41,0x7f,0x40,0x00,0x00,0x00,//l

0x00,0x7c,0x04,0x78,0x04,0x78,0x00,0x00,//m

0x00,0x7c,0x08,0x04,0x04,0x78,0x00,0x00,//n

0x00,0x38,0x44,0x44,0x44,0x38,0x00,0x00,//o

0x00,0x7e,0x0c,0x12,0x12,0x0c,0x00,0x00,//p

0x00,0x0c,0x12,0x12,0x0c,0x7e,0x00,0x00,//q

0x00,0x7C,0x08,0x04,0x04,0x08,0x00,0x00,//r

0x00,0x58,0x54,0x54,0x54,0x64,0x00,0x00,//s

0x00,0x04,0x3f,0x44,0x40,0x20,0x00,0x00,//t

0x00,0x3c,0x40,0x40,0x3c,0x40,0x00,0x00,//u(69)

0x00,0x1c,0x20,0x40,0x20,0x1c,0x00,0x00,//v

0x00,0x3c,0x40,0x30,0x40,0x3c,0x00,0x00,//w

0x00,0x44,0x28,0x10,0x28,0x44,0x00,0x00,//x

0x00,0x1c,0xa0,0xa0,0x90,0x7c,0x00,0x00,//y

0x00,0x44,0x64,0x54,0x4c,0x44,0x00,0x00,//z(74)

};

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

中文字符表

顯示"歡迎使用液晶模塊"

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

uchar code table2[]={

0x14,0x24,0x44,0x84,0x64,0x1c,0x20,0x18,

0x0f,0xe8,0x08,0x08,0x28,0x18,0x08,0x00,

0x20,0x10,0x4c,0x43,0x43,0x2c,0x20,0x10,

0x0c,0x03,0x06,0x18,0x30,0x60,0x20,0x00,//歡(0)

0x40,0x41,0xce,0x04,0x00,0xfc,0x04,0x02,

0x02,0xfc,0x04,0x04,0x04,0xfc,0x00,0x00,

0x40,0x20,0x1f,0x20,0x40,0x47,0x42,0x41,

0x40,0x5f,0x40,0x42,0x44,0x43,0x40,0x00,//迎(1)

0x40,0x20,0xf0,0x1c,0x07,0xf2,0x94,0x94,

0x94,0xff,0x94,0x94,0x94,0xf4,0x04,0x00,

0x00,0x00,0x7f,0x00,0x40,0x41,0x22,0x14,

0x0c,0x13,0x10,0x30,0x20,0x61,0x20,0x00,//使(2)

0x00,0x00,0x00,0xfe,0x22,0x22,0x22,0x22,

0xfe,0x22,0x22,0x22,0x22,0xfe,0x00,0x00,

0x80,0x40,0x30,0x0f,0x02,0x02,0x02,0x02,

0xff,0x02,0x02,0x42,0x82,0x7f,0x00,0x00,//用(3)

0x10,0x61,0x06,0xe0,0x18,0x84,0xe4,0x1c,

0x84,0x65,0xbe,0x24,0xa4,0x64,0x04,0x00,

0x04,0x04,0xff,0x00,0x01,0x00,0xff,0x41,

0x21,0x12,0x0c,0x1b,0x61,0xc0,0x40,0x00,//液(4)

0x00,0x00,0x00,0x00,0x7e,0x2a,0x2a,0x2a,

0x2a,0x2a,0x2a,0x7e,0x00,0x00,0x00,0x00,

0x00,0x7f,0x25,0x25,0x25,0x25,0x7f,0x00,

0x00,0x7f,0x25,0x25,0x25,0x25,0x7f,0x00,//晶(5)

0x10,0xd0,0xff,0x50,0x90,0x04,0xf4,0x54,

0x5f,0x54,0x54,0x5f,0xf4,0x04,0x00,0x00,

0x03,0x00,0xff,0x00,0x00,0x84,0x85,0x45,

0x35,0x0f,0x15,0x25,0x65,0xc4,0x44,0x00,//模(6)

0x10,0x10,0xff,0x10,0x10,0x00,0x08,0x08,

0xff,0x08,0x08,0x08,0xf8,0x00,0x00,0x00,

0x08,0x18,0x0f,0x04,0x85,0x41,0x31,0x0d,

0x03,0x05,0x09,0x11,0x31,0x61,0x21,0x00,//塊(7)

0x00,0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,

0x48,0x48,0x48,0x48,0xF8,0x00,0x00,0x00,

0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0x3F,

0x44,0x44,0x44,0x44,0x4F,0x40,0x70,0x00,//電(8)

0x00,0x00,0xFE,0x02,0x42,0x42,0x42,0x42,

0xFA,0x42,0x42,0x42,0x62,0x42,0x02,0x00,

0x20,0x18,0x27,0x20,0x20,0x20,0x20,0x20,

0x3F,0x20,0x21,0x2E,0x24,0x20,0x20,0x00,//壓(9)

0x10,0x21,0x86,0x70,0x00,0x7E,0x4A,0x4A,

0x4A,0x4A,0x4A,0x7E,0x00,0x00,0x00,0x00,

0x02,0xFE,0x01,0x40,0x7F,0x41,0x41,0x7F,

0x41,0x41,0x7F,0x41,0x41,0x7F,0x40,0x00,//溫(10)

0x00,0x00,0xFC,0x04,0x24,0x24,0xFC,0xA5,

0xA6,0xA4,0xFC,0x24,0x24,0x24,0x04,0x00,

0x80,0x60,0x1F,0x80,0x80,0x42,0x46,0x2A,

0x12,0x12,0x2A,0x26,0x42,0xC0,0x40,0x00,//度(11)

0x08,0x31,0x86,0x60,0x00,0xFE,0x02,0xF2,

0x02,0xFE,0x00,0xF8,0x00,0x00,0xFF,0x00,

0x04,0xFC,0x03,0x00,0x80,0x47,0x30,0x0F,

0x10,0x67,0x00,0x07,0x40,0x80,0x7F,0x00,//測(12)

0x40,0x40,0x40,0xDF,0x55,0x55,0x55,0xD5,

0x55,0x55,0x55,0xDF,0x40,0x40,0x40,0x00,

0x40,0x40,0x40,0x57,0x55,0x55,0x55,0x7F,

0x55,0x55,0x55,0x57,0x50,0x40,0x40,0x00,//量(13)

};

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

顯示用的延時函數

延時長度有參數 n 決定

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

Delay_nms(uchar n)

{ uchar a;

for(;n>0;n--)

{

for(a=0;a<100;a++)

{

_nop;

_nop;

_nop;

_nop;

};

};

}

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

DEM12864B狀態檢測,從EDM12864B讀出數

據檢測標志位BF

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

void LCD_Busy()

{

uchar busy;

E=Low;

DI=Low;

RW=High;

while(1)

{

E=High;

_nop;

_nop;

busy=P2;//讀狀態標志寄存器

_nop;

E=Low;

if((busy&0x90)==0)//檢測BF和RES位,兩者都為零時表示可進行寫入

break;

};

}

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

寫指令

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

void WRCommand_L(uchar command)

{

CS1=High;

CS2=Low;

LCD_Busy();

DI=Low;

_nop;

RW=Low;

_nop;

E=High;

_nop;

P2=command;

_nop;

E=Low;

_nop;

}

void WRCommand_R(uchar command)

{

CS1=Low;

CS2=High;

LCD_Busy();

DI=Low;

_nop;

RW=Low;

_nop;

E=High;

_nop;

P2=command;

_nop;

E=Low;

_nop;

}

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

寫一個字節的顯示數據

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

void WRdata_L(uchar ucdata)

{

CS1=High;

CS2=Low;

LCD_Busy();

DI=High;

_nop;

RW=Low;

_nop;

E=High;

_nop;

P2=ucdata;

_nop;

E=Low;

_nop;

}

void WRdata_R(uchar ucdata)

{

CS1=Low;

CS2=High;

LCD_Busy();

DI=High;

_nop;

RW=Low;

_nop;

E=High;

_nop;

P2=ucdata;

_nop;

E=Low;

_nop;

}

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

讀顯示數據

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

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

RDdata_L()

{

uchar receiver;

CS1=High;

CS2=Low;

LCD_Busy();

DI=High;

_nop;

WR=High;

_nop;

E=High;

_nop;

receiver=P0;

E=Low;

return(receiver);

}

RDdata_R()

{

uchar receiver;

CS1=Low;

CS2=High;

LCD_Busy();

DI=High;

_nop;

WR=High;

_nop;

E=High;

_nop;

receiver=P0;

E=Low;

return(receiver);

}

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

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

I2C時鐘時序要求的數據建立時間,

nop_可以用其它短延時替代,比如喂狗

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

I2C_delay()

{

uchar n=5;

while(n--)

{

_nop;

_nop;

}

}

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

I2C的時鐘信號可發送和接收.

接收時通過判斷sample對寄存器的值加.

發送的時候只調用程序產生時序.

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

bit I2C_clock(void)

{

bit sample;

I2C_delay();

I2C_SCL=High;

I2C_delay();

sample=I2C_SDA;

I2C_SCL=Low;

I2C_delay();

return(sample);

}

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

I2C確定接收有效的應答信號Acknowledge

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

I2C_ACK()

{

I2C_SDA=Low;

I2C_clock();

I2C_SDA=High;

}

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

I2C的非應答信號

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

I2C_NACK()

{

I2C_SDA=High;

I2C_clock();

I2C_SDA=High;

}

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

I2C的開始信號.發送和接受數據時,必須先調用.

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

I2C_start()

{

I2C_SDA=High;

I2C_delay();

I2C_SCL=High;

I2C_delay();

I2C_SDA=Low;

I2C_delay();

I2C_SCL=Low;

I2C_delay();

}

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

I2C停止信號.發送和接受數據時結束時,需要調用.

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

I2C_stop()

{

I2C_SDA=Low;

I2C_delay();

I2C_SCL=High;

I2C_delay();

I2C_SDA=High;//產生停止控制信號,并且釋放數據線

I2C_delay();

}

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

I2C初始化.在main函數中必須先調用它.

進行初始化后才能調用其他函數.

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

void I2C_init(void)

{

I2C_SDA=High;

I2C_SCL=High;

I2C_delay();

I2C_stop();

}

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

I2C總線寫一個字節,即發送一個字節

發送結束后,需要返回一個檢測應答位

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

bit I2C_send(uchar I2C_data)

{

uchar a;

for(a=0;a<8;a++)

{

I2C_SDA=(bit)(I2C_data&0x80);

I2C_data=I2C_data<<1;

I2C_clock();

};

I2C_SDA=High;

I2C_delay();

return(I2C_clock()); //返回應答信號

}

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

I2C總線讀一個字節,即接收一個字節數據

接收結束后需要發送一個應答位acknowledge

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

uchar I2C_receive()

{

uchar a,receive_data;

for(a=0;a<8;a++)

{

receive_data=receive_data<<1;

if(I2C_clock())

{

receive_data++;

};

};

//I2C_ACK();

return(receive_data);

}

DS1621_start()

{

do

{

I2C_start();

}

while(I2C_send(0x90));//發送數據完地址字節的數據時,檢測從機的應答位

if(I2C_send(0xee)==0)

{

I2C_stop();

return 1;

}

else

return 0;

}

DS1621_stop()

{

do

{

I2C_start();

//I2C_send(0x90);

}

while(I2C_send(0x90));

if(I2C_send(0x22)==0)

{

I2C_stop();

return 1;

}

else

return 0;

}

char read_count_remain()

{

char temp_remain=0;

do

{

I2C_start();

}

while(I2C_send(0x90));//是否應答

if(I2C_send(0xa8)==0)

{

I2C_start();

if(I2C_send(0x91)==0)

{

temp_remain=I2C_receive();

I2C_NACK();

I2C_stop();

return temp_remain;

}

else

return 0;

}

else

return 0;

}

char read_count_c()

{

char temp_c=0;

do

{

I2C_start();

}

while(I2C_send(0x90));//是否應答

if(I2C_send(0xa9)==0)

{

I2C_start();

if(I2C_send(0x91)==0)

{

temp_c=I2C_receive();

I2C_NACK();

I2C_stop();

return temp_c;

}

else

return 0;

}

else

return 0;

}

bit read_temperature(char *point1)

{

do

{

I2C_start();

}

while(I2C_send(0x90));

if(I2C_send(0xaa)==0)

{

do{

I2C_start();

}

while(I2C_send(0x91));

(*point1)=I2C_receive();

I2C_ACK();

(*(point1+1))=I2C_receive();

I2C_NACK();

I2C_stop();

return 1;

}

else

return 0;

}

DS1621_state()

{

do

{

I2C_start();

}

while(I2C_send(0x90));

if(I2C_send(0xac)==0)

{

do

{

I2C_start();

}

while(I2C_send(0x90));

if(I2C_send(0x00)==0)

//if(I2C_send(0x01)==0)

{

I2C_stop();

return 1;

}

else

return 0;

}

else

return 0;

}

DS1621_th()

{

}

DS1621_tl()

{

}

DS1621_init()

{

while(DS1621_stop()==0)

{};

while(DS1621_state()==0)

{};

DS1621_th();

DS1621_tl();

}

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

字符為16*16顯示,分為兩個部分寫入32個字節

前16個字節寫入第一頁(16*8),后16個字節寫入

第二頁(16*8)

左側寫入"歡迎",右側寫入"使用"

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

C_display_L(uchar C_Pagenum,uchar C_Tiernum,uchar C_Temp)

{

uchar k;

C_Pagenum=PAGEADD|C_Pagenum;

C_Tiernum=TIERADD|C_Tiernum;

WRCommand_L(C_Pagenum);

WRCommand_L(C_Tiernum);

for(k=0;k<16;k++)

{

WRdata_L(table2[C_Temp*32+k]);

};

C_Pagenum=C_Pagenum+1;

WRCommand_L(C_Pagenum);

WRCommand_L(C_Tiernum);

for(k=0;k<16;k++)

{

WRdata_L(table2[C_Temp*32+k+16]);

};

}

C_display_R(uchar C_Pagenum,uchar C_Tiernum,uchar C_Temp)

{

uchar k;

C_Pagenum=PAGEADD|C_Pagenum;

C_Tiernum=TIERADD|C_Tiernum;

WRCommand_R(C_Pagenum);

WRCommand_R(C_Tiernum);

for(k=0;k<16;k++)

{

WRdata_R(table2[C_Temp*32+k]);

};

C_Pagenum=C_Pagenum+1;

WRCommand_R(C_Pagenum);

WRCommand_R(C_Tiernum);

for(k=0;k<16;k++)

{

WRdata_R(table2[C_Temp*32+k+16]);

};

}

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

寫入西文字符,共11個字符,左側寫入6個

右側寫入5個,左側起始從16開始,右側從

0開始

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

E_Display_L(uchar E_Pagenum,uchar E_Tiernum,uchar E_Temp)

{

uchar k;

WRCommand_L(PAGEADD|E_Pagenum);

WRCommand_L(TIERADD|E_Tiernum);

for(k=0;k<8;k++)

{

WRdata_L(table1[E_Temp*8+k]);

};

}

E_Display_R(uchar E_Pagenum,uchar E_Tiernum,uchar E_Temp)

{

uchar k;

WRCommand_R(PAGEADD|E_Pagenum);

WRCommand_R(TIERADD|E_Tiernum);

for(k=0;k<8;k++)

{

WRdata_R(table1[E_Temp*8+k]);

};

}

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

清除所有顯示RAM內容

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

CLR_DisplayRAM()

{

uchar C_page,i,k;

for(i=0;i<8;i++)

{

C_page=PAGEADD|i;//清除起始頁為0

WRCommand_L(C_page);//清除起始頁寫入

WRCommand_L(TIERADD);//清除起始行地址寫入

WRCommand_R(C_page);

WRCommand_R(TIERADD);

for(k=0;k<64;k++)

{

WRdata_L(0x00);

WRdata_R(0x00);//lcm的ram自動加一,只許循環64次即可

};

};

}

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

初始化 設置啟使行

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

void Init_LCD(void)

{

CLR_DisplayRAM();//清除所有顯示寄存器

WRCommand_L(DIS_STARADD);

WRCommand_R(DIS_STARADD);//設置顯示起始行地址

WRCommand_L(0x3f);

WRCommand_R(0x3f);//開顯示

}

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

max1241讀轉換結果

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

uint read_max1241()

{

uint voltage_temp=0;

uchar ucloop=12;

cs=High;

//dout=low;

sclk=Low;

cs=Low;

while(dout==0);//EOC信號為高表示轉換結束

sclk=High;

sclk=Low;

while(ucloop--)

{

sclk=High;//上升沿數據穩定并讀出

voltage_temp<<=1;

if(dout==1)

voltage_temp+=1;

sclk=Low;

};

//sclk=low;

cs=High;

return voltage_temp;

}

main()

{

uchar a=0,temp=0,b=0,number=0,pagenum=0;

uchar etable[]={0,0,0,0,0,45,53,60,51,63,61,53,10,69,67,53};//Welcome use

uchar ttable[]={42,57,61,53,19,10,2,0,0,6,18,1,1,18,0,7};//Time:2006/11/07

char count_remain=0,count_c=0;

bit flag=1;

char temperature_buf[2]={0};

uchar temperature_display[8]={0};

//uchar voltage=0; //測試0831時使用

double voltage=0;

double temp_buffer=0;

cs=High;

sclk=High;

Init_LCD();

I2C_init();

DS1621_init();//初始化

DS1621_start();//開始溫度采集

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

利用開機顯示時間(大概三秒)空讀一次DS1621

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

for(b=0;b<2;b++)

{

for(number=0;number<20;number++)

{

//中文顯示:歡迎使用液晶模塊

pagenum=1;//在第二行開始顯示

for(a=0;a<4;a++)

{

C_display_L(pagenum,a*16,a);

C_display_R(pagenum,a*16,a+4);

};

//英文顯示:Welcome use

pagenum=5;//在第六行顯示

for(a=0;a<3;a++)

{

E_Display_L(pagenum,(a+5)*8,etable[a+5]);

};

for(a=0;a<8;a++)

{

E_Display_R(pagenum,a*8,etable[a+8]);

};

//顯示制作時間:Time:2006/11/07

pagenum=7;//在第八行顯示

for(a=0;a<8;a++)

{

E_Display_L(pagenum,a*8,ttable[a]);

E_Display_R(pagenum,a*8,ttable[a+8]);

}

Delay_nms(100);

};

if(flag)

{

read_temperature(temperature_buf);//在轉到下一個顯示界面之前空讀一次

read_count_remain();

read_count_c();

DS1621_start();

flag=0;

};

};

WRCommand_L(0x3e);

WRCommand_R(0x3e);

CLR_DisplayRAM(); //清除顯示ram

WRCommand_L(0x3f);

WRCommand_R(0x3f);

while(1)

{

while(read_temperature(temperature_buf)==0);//讀溫度值(兩字節有符數),并檢測應答位,只使用第一字節

count_remain=read_count_remain();//讀斜率

count_c=read_count_c();//讀計數器

temp_buffer = temperature_buf[0] -0.75 + (count_c-count_remain) / (double)count_c;

DS1621_start();//讀完數據后,重新開始一次溫度轉化

temperature_display[0]=19;

if(temp_buffer<0)

{

temperature_display[1]=16;//顯示負號

temperature_display[2]=(-temp_buffer)/10;//十位

temperature_display[3]=((uchar)(-temp_buffer))%10;

temperature_display[4]=17;//小數點

temperature_display[5]=(int)((-temp_buffer)*10)%10;

temperature_display[6]=(int)((-temp_buffer)*100)%10;//小數點后兩位

}

else

{

temperature_display[1]=temp_buffer/100;//百位

temperature_display[2]=((uchar)temp_buffer)/10%10;

temperature_display[3]=((uchar)temp_buffer)%10;

temperature_display[4]=17;

temperature_display[5]=((int)(temp_buffer*10))%10;

temperature_display[6]=((int)(temp_buffer*100))%10;//小數點后兩位

}

// 測試從max1241讀出的原始數據

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

//pagenum=3;

voltage=read_max1241();

voltage_display[0]=19;

voltage_display[1]= voltage/1000;

voltage_display[2]=(voltage/100)%10;

voltage_display[3]=(voltage/10)%10;

voltage_display[4]= voltage%10;

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

//LCD顯示第二部分

for(b=0;b<40;b++)

{

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

//更新max1241顯示值

voltage=(double)read_max1241();

voltage=5000*voltage/4095;

voltage_display[0]=19;

voltage_display[5]=(uint)voltage %10;//個位

voltage_display[2]=17;

voltage_display[4]=(uint)(voltage/10)%10;//小數點后1位

voltage_display[3]=(uchar)(voltage/100)%10;//小數點后2位

voltage_display[1]=(uchar)(voltage/1000)%10;//小數點后3位

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

//顯示文字:電壓測量

pagenum=2;

for(a=0;a<2;a++)

C_display_L(pagenum,a*16,a+8);

for(a=0;a<2;a++)

C_display_L(pagenum,(a+2)*16,a+12);

//顯示文字:溫度測量

pagenum=5;

for(a=0;a<2;a++)

C_display_L(pagenum,a*16,a+10);

for(a=0;a<2;a++)

C_display_L(pagenum,(a+2)*16,a+12);

//顯示1241采樣值

pagenum=3;

for(a=0;a<6;a++)

{

E_Display_R(pagenum,a*8,voltage_display[a]);

}

//顯示ds1621采樣值

pagenum=6;

for(a=0;a<7;a++)

{

E_Display_R(pagenum,a*8,temperature_display[a]);

}

};

};

}

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6056

    文章

    44798

    瀏覽量

    643594
  • AD
    AD
    +關注

    關注

    27

    文章

    870

    瀏覽量

    151115
  • 12864
    +關注

    關注

    0

    文章

    125

    瀏覽量

    44850
  • DS1621
    +關注

    關注

    1

    文章

    16

    瀏覽量

    11664

原文標題:51單片機實例:12位AD_DS1621與12864液晶(程序)

文章出處:【微信號:changxuemcu,微信公眾號:暢學單片機】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    誰有12864顯示ds1261采集的溫度程序啊,請各位幫幫忙

    在Proteus中ds1621只能虛擬顯示,要在12864顯示,該怎么寫程序,求一個程序
    發表于 11-28 14:08

    12AD_DS162112864液晶

    12AD_DS162112864液晶,很實用的資料,快來學習吧。
    發表于 05-12 16:25 ?18次下載

    msp430單片機adc+12864液晶顯示菜單程序

    msp430單片機adc+12864液晶顯示菜單程序
    發表于 07-20 14:39 ?11次下載

    DS1621溫度傳感器論文

    DS1621溫度傳感器protues仿真
    發表于 03-01 11:59 ?17次下載

    反向的DS1721數字溫度傳感器DS1621的兼容性

    配置登記 有DS1621DS1721配置寄存器的幾點區別。一個主要的區別是在配置登記DS1621一定位存儲在EEPROM。圖1和圖2顯示,DS1721
    發表于 04-10 09:57 ?4次下載
    反向的<b class='flag-5'>DS</b>1721數字溫度傳感器<b class='flag-5'>DS1621</b>的兼容性

    使用51單片機實現12864液晶的顯示程序免費下載

    本文檔的主要內容詳細介紹的是使用51單片機實現12864液晶的顯示程序免費下載。
    發表于 08-29 17:28 ?17次下載
    使用51<b class='flag-5'>單片機</b>實現<b class='flag-5'>12864</b><b class='flag-5'>液晶</b>的顯示<b class='flag-5'>程序</b>免費下載

    使用51單片機進行12864液晶時鐘的C語言程序免費下載

    本文檔的主要內容詳細介紹的是使用51單片機進行12864液晶時鐘的C語言程序免費下載。
    發表于 06-19 17:44 ?17次下載
    使用51<b class='flag-5'>單片機</b>進行<b class='flag-5'>12864</b><b class='flag-5'>液晶</b>時鐘的C語言<b class='flag-5'>程序</b>免費下載

    LCD12864DS1621數字溫度傳感器的使用仿真資料和工程文件

    本文檔的主要內容詳細介紹的是LCD12864DS1621數字溫度傳感器的使用仿真資料和工程文件。
    發表于 07-24 17:30 ?11次下載
    LCD<b class='flag-5'>12864</b>和<b class='flag-5'>DS1621</b>數字溫度傳感器的使用仿真資料和工程文件

    DS1621溫度傳感器實驗的程序和工程文件免費下載

     本文檔的主要內容詳細介紹的是DS1621溫度傳感器實驗的程序和工程文件免費下載。
    發表于 09-08 18:07 ?11次下載
    <b class='flag-5'>DS1621</b>溫度傳感器實驗的<b class='flag-5'>程序</b>和工程文件免費下載

    使用單片機實現DS1621測溫的仿真文件免費下載

    本文檔的主要內容詳細介紹的是使用單片機實現DS1621測溫的仿真文件免費下載。
    發表于 03-19 13:48 ?17次下載

    使用單片機實現12AD DS162112864液晶C語言實例免費下載

    本文檔的主要內容詳細介紹的是使用單片機實現12AD DS162112864液晶C語言實例免費
    發表于 03-30 14:11 ?16次下載

    使用單片機實現I2C接口溫度傳感器DS1621應用測試的C語言實例

    本文檔的主要內容詳細介紹的是使用單片機實現I2C接口溫度傳感器DS1621應用測試的C語言實例免費下載。
    發表于 03-31 14:45 ?10次下載

    008基于單片機DS1621+MAX1241(12串口ADC)電壓溫度采樣Proteus仿真設計

    008基于單片機DS1621+MAX1241(12串口ADC)電壓溫度采樣Proteus仿真設計(220轉5v電源方案)-008基于單片機
    發表于 07-26 12:15 ?18次下載
    008基于<b class='flag-5'>單片機</b><b class='flag-5'>DS1621</b>+MAX1241(<b class='flag-5'>12</b><b class='flag-5'>位</b>串口ADC)電壓溫度采樣Proteus仿真設計

    DS1621 DS1621 - (Maxim Integrated) - 溫度傳感器 - 模擬和數字輸出

    電子發燒友網為你提供()DS1621相關產品參數、數據手冊,更有DS1621的引腳圖、接線圖、封裝手冊、中文資料、英文資料,DS1621真值表,DS1621管腳等資料,希望可以幫助到廣
    發表于 11-02 08:23
    <b class='flag-5'>DS1621</b> <b class='flag-5'>DS1621</b> - (Maxim Integrated) - 溫度傳感器 - 模擬和數字輸出

    DS1721數字溫度傳感器與DS1621的反向兼容性

    由于許多應用不需要DS0 5線數字溫度傳感器的±1621.2°C精度,因此設計了精度為±1.0°C的DS1721溫度傳感器IC,以提供DS1621的低成本替代方案。在大多數方面,DS1621
    的頭像 發表于 05-16 11:25 ?1116次閱讀
    <b class='flag-5'>DS</b>1721數字溫度傳感器與<b class='flag-5'>DS1621</b>的反向兼容性
    主站蜘蛛池模板: 奇米影视大全 | 四虎影院永久地址 | 黄色三级视频网站 | 四虎国产永久在线精品免费观看 | 日本成人免费观看 | freee性欧美| 国产yw855.c免费视频 | 成人a毛片视频免费看 | 欧美视频小说 | 天天在线天天在线天天影视 | 亚洲专区一 | 欧美三级一区二区三区 | 巨乳色最新网址 | 免费看一级片 | 国产一级特黄aa级特黄裸毛片 | 欧美在线观看www | jiuse视频| 国产黄色小视频 | 5x视频在线观看 | 久久精品视频免费播放 | 黄色福利站 | 中文在线天堂网www 中文在线资源链接天堂 | nxgx欧美| 色精品一区二区三区 | 俺来也俺去啦久久综合网 | 正在播放淫亚洲 | 4hu影院在线观看 | 在线91精品亚洲网站精品成人 | 色婷婷激情综合 | aaaa级日本片免费视频 | 九九午夜 | 亚洲精品色一区色二区色三区 | 男人的天堂色偷偷之色偷偷 | 一本久草 | 日木69xxxhd| 四虎综合九九色九九综合色 | 国产三级一区 | 天天操女人| 色婷婷电影 | 国产普通话一二三道 | 性感美女福利视频 |