數碼管大家應該見得多了,今天給大家帶來了1637 IIC數碼管顯示溫度的例子,供大家參考。我這個IIC數碼管本來是做時鐘用的,閑來無事,用來與DS18B20結合,用來顯示溫度了。所以中間的冒號看起來不美觀。
1.png (239.08 KB, 下載次數: 66)
下載附件
2018-4-18 23:16 上傳
單片機源程序如下:
- #include<reg52.h>
- #include<intrins.h>
- #include "18B20.h"
- sbit SCL=P2^1;
- sbit SDA=P2^0;
- unsigned char t,shi,ge,bai;
- unsigned char code xsbcdbuf[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77};
- /*************************************************************************
- ********************
- LCD WRITE 模式 連續寫入數據
- *************************************************************************/
- /*********************************************************
- *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_();
- }
- /*********************************************************
- *
- 啟動IIC
- *********************************************************/
- void start_IIC(void)
- {
- SCL=1; //給芯片發送開始信號
- SDA=1;
- IIC_delay();
- SDA=0;
- IIC_delay();
- SCL=0; //開始信號傳送完
- 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;
- }
- /*******************************************************
- *
- 寫一個字節數據
- *******************************************************/
- void WriteByte(unsigned char WriteData)
- {
- unsigned char i;
- for(i=0;i<8;i++)//開始傳送8位數據,每循環一次傳送一位數據
- {
- SCL=0;
- IIC_delay();
- WriteData=WriteData>>1;
- SDA=CY;
- IIC_delay();
- SCL=1;
- IIC_delay();
- }
- //8位數據傳送完
- ack_IIC(); //判斷芯片發過來的ACK應答信號
- }
- /*******************************************************
- /************************************************
- 寫一字節數據到LEDSROM
- **************************************************/
- void write_LEDSROM(unsigned char addr,unsigned char WData)
- {
- start_IIC(); //調用開始信號
- WriteByte(addr); //寫起始地址命令(0C0H),地址00H單元。
- WriteByte(WData);//給顯示寄存器寫顯示數據,值可根據實參改變
- stop_IIC(); //調用結束信號,一個字節命令發送完畢,可以發送下一個命令
- }
- /************************************************
- /************************************************
- *
- 分開寫數據到LED
- **************************************************/
- void xsled()
- {
- SDA=1;
- SCL=1;
- start_IIC(); //調用開始信號
- WriteByte(0x40);//寫命令40H(數據設置)
- stop_IIC(); //調用結束信號,一個字節命令發送完畢,可以發送下一個命令
- write_LEDSROM(0xC0,xsbcdbuf[date/10]); //第一個數碼管
- write_LEDSROM(0xC1,xsbcdbuf[date%10]|0x80); //第二個數碼管,0x80打開DP
- //write_LEDSROM(0xC1,0x80);
- write_LEDSROM(0xC2,xsbcdbuf[xiaoshu]); //第三個數碼管
- write_LEDSROM(0xC3,0x39);//第四個數碼管
- IIC_delay();
- start_IIC(); //調用開始信號
- WriteByte(0x8a); //送開屏命令,(8BH),亮度可以根據低三位調節。//顯示亮度
- stop_IIC(); //調用結束信號,一個字節命令發送完畢,可以發送下一個命令
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
IIC 1637 數碼管.rar
(30.44 KB, 下載次數: 23)
2018-4-18 23:16 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|