數字溫濕度計(帶程序) - 圖文 - 下載本文

西南交通大學本科課程設計(論文) 第34頁

}

void timer0() interrupt 1 {

TH0=(65536-45871)/256; TL0=(65536-45871)%6; timeflag++; if(timeflag==20) { }

while(!ReadTempAndHumi()); timeflag=0;

OLED_Clear(); constant_dis(); while(1)

variate_dis();

顯示器驅動程序oled.c

#include \#include \

void delay_ms(unsigned int ms) {

unsigned int a; while(ms) { }

a=1800; while(a--); ms--;

西南交通大學本科課程設計(論文) 第35頁

}

#if OLED_MODE==1 //向SSD1106寫入一個字節。 //dat:要寫入的數據/命令

//cmd:數據/命令標志 0,表示命令;1,表示數據; void OLED_WR_Byte(u8 dat,u8 cmd) {

DATAOUT(dat); if(cmd)

OLED_DC_Set(); else

OLED_DC_Clr(); OLED_CS_Clr(); OLED_WR_Clr(); OLED_WR_Set(); OLED_CS_Set(); OLED_DC_Set();

return;

} #else

//向SSD1306寫入一個字節。 //dat:要寫入的數據/命令

//cmd:數據/命令標志 0,表示命令;1,表示數據; void OLED_WR_Byte(u8 dat,u8 cmd) {

u8 i; if(cmd)

OLED_DC_Set(); else

西南交通大學本科課程設計(論文) 第36頁

OLED_DC_Clr(); OLED_CS_Clr(); for(i=0;i<8;i++) {

OLED_SCLK_Clr(); if(dat&0x80)

{

OLED_SDIN_Set();

}

else } #endif

void OLED_Set_Pos(unsigned char x, unsigned char y) {

OLED_WR_Byte(0xb0+y,OLED_CMD);

OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD); OLED_WR_Byte((x&0x0f)|0x01,OLED_CMD);

}

OLED_SDIN_Clr();

OLED_SCLK_Set();

dat<<=1;

OLED_CS_Set(); OLED_DC_Set();

}

//清屏函數,清完屏,整個屏幕是黑色的!和沒點亮一樣!!! void OLED_Clear(void) {

u8 i,n;

西南交通大學本科課程設計(論文) 第37頁

}

//在指定位置顯示一個字符,包括部分字符 //x:0~127 //y:0~63

//mode:0,反白顯示;1,正常顯示 //size:選擇字體 16/12

void OLED_ShowChar(u8 x,u8 y,u8 chr) {

unsigned char c=0,i=0;

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

OLED_WR_Byte (0xb0+i,OLED_CMD); //設置頁地址(0~7) OLED_WR_Byte (0x00,OLED_CMD); //設置顯示位置—列低地址 OLED_WR_Byte (0x10,OLED_CMD); //設置顯示位置—列高地址 for(n=0;n<128;n++)OLED_WR_Byte(0,OLED_DATA);

} //更新顯示

c=chr-' ';//得到偏移后的值

if(x>Max_Column-1){x=0;y=y+2;} if(SIZE ==16)

{

OLED_Set_Pos(x,y); for(i=0;i<8;i++)

OLED_WR_Byte(F8X16[c*16+i],OLED_DATA); OLED_Set_Pos(x,y+1); for(i=0;i<8;i++)

OLED_WR_Byte(F8X16[c*16+i+8],OLED_DATA); }

西南交通大學本科課程設計(論文) 第38頁

}

//m^n函數

u32 oled_pow(u8 m,u8 n) { }

u32 result=1;

while(n--)result*=m; return result;

//顯示2個數字 //x,y :起點坐標 //len :數字的位數 //size:字體大小

//mode:模式 0,填充模式;1,疊加模式 //num:數值(0~4294967295);

void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len) {

u8 t,temp; u8 enshow=0;

for(t=0;t

temp=(num/oled_pow(10,len-t-1)); if(enshow==0&&t<(len-1)) {

if(temp==0) {

OLED_ShowChar(x+(len&4)*t,y,' '); continue;

}else enshow=1;





海南麻将怎么玩图解 全天飞艇pk10在线计划 25选5走势图 股票交易时间规则 安徽十一选五开奖 双色球怎样投注不会亏 香港二分彩开奖号码 青海快三哪里可以买 中国软件股票怎么样 湖南快乐十分一定牛 股票融配资