十六、C语言中的头文件与模块化设计
生活随笔
收集整理的這篇文章主要介紹了
十六、C语言中的头文件与模块化设计
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、txy_smg_ca.c(注意添加ADD)
#include "absacc.h"void SMG_Bit(unsigned pos, unsigned char dat)//數碼管位置、數據 {XBYTE[0xe000] = 0xff;//為了效果好先熄滅,一定的消影作用XBYTE[0xc000] = 0x01 << pos;//MM模式XBYTE[0xe000] = dat; }void SMG_All(unsigned char dat)//操作所有數碼管 {XBYTE[0xc000] = 0xff;//數碼管所有位置XBYTE[0xe000] = dat; }void DelaySMG(unsigned int t) {while(t--); }2、txy_smg_ca.h
#ifndef TXY_SMG_CA_H #define TXY_SMG_CA_Hunsigned char code SMG_duanma[18] = {// 0 1 2 3 4 5 6 70xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,// 8 9 A10 B11 C12 D13 E14 F150x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,// -16 .170xbf,0x7f}; //共陽數碼管unsigned char code SMG_duanmaDot[10] = {// 0. 1. 2. 3. 4. 5. 6. 7.0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,// 8. 9.0x00,0x10}; //數碼管(小數點)void SMG_Bit(unsigned pos, unsigned char dat);//數碼管位置、數據 void SMG_All(unsigned char dat);//操作所有數碼管 void DelaySMG(unsigned int t);#endif3、DS18B20.c
#include "reg52.h" #include "absacc.h" #include "onewire.h" #include "txy_smg_ca.h"unsigned int temp = 0;//溫度void ShowSMG()//顯示溫度 { //567 //百位:567 / 100 = 5.67 = 5 //十位:567 % 100 = 5.67 = 67 67 / 10 = 6.7 = 6 //個位:567 % 10 = 56.7 = 7/*顯示1位小數SMG_Bit(7, SMG_duanma[temp%10]);DelaySMG(100);SMG_Bit(6, SMG_duanmaDot[(temp%100)/10]);DelaySMG(100);SMG_Bit(5, SMG_duanma[temp/100]);DelaySMG(100);*/SMG_Bit(7, SMG_duanma[temp%10]);//顯示整數DelaySMG(100);SMG_Bit(6, SMG_duanma[temp/10]);DelaySMG(100);SMG_Bit(5, 0xff);DelaySMG(100);SMG_Bit(4, 0xff);//不顯示值,一定的消影作用DelaySMG(100);SMG_Bit(3, 0xff); DelaySMG(100);SMG_Bit(2, 0xff); DelaySMG(100);SMG_Bit(1, 0xff); DelaySMG(100);SMG_Bit(0, 0xff); DelaySMG(100);//最后一個數碼管特別亮?SMG_All(0xff);//關掉所有數碼管 }void Delay(unsigned int t) {while(t--)//數碼管動態顯示本質:不斷輪流點亮每一個數碼管,不可以間斷{ShowSMG();//一旦動態掃描間斷,由多個數碼管變成只顯示一個數碼管} //因此在等待時間消化的過程中,仍然要保持數碼管動態掃描,輪流顯示沒有間斷 }void Read_DS18B20_temp()//讀溫度 {unsigned char LSB, MSB;//定義8字節變量接收數據init_ds18b20();//復位Write_DS18B20(0xcc);//寫入0xcc 跳過ROM指令Write_DS18B20(0x44);//寫入0x44 開始溫度轉化Delay(1000);//延時,等待溫度轉化完成(注意延時的時候數碼管不可以間斷:延時里要動態掃描數碼管)init_ds18b20();//復位,開始新一輪操作Write_DS18B20(0xcc);//寫入0xcc 跳過ROM指令Write_DS18B20(0xbe);//寫入0xbe 讀取16位數據 LSB = Read_DS18B20();//讀低8位數據MSB = Read_DS18B20();//讀高8位數據init_ds18b20();//復位,停止數據讀取temp = MSB;//高8位放到temp里temp <<= 8;//左移8位temp = temp | LSB;//或(加)上低8位=>將LSB、MSB整合成為一個16位數據temp >>= 4;//右移4位,移走小數(整數不需要換算)//顯示整數/*顯示1位小數if ((temp & 0xf800) == 0x0000)//正數(16位 高5位為符號位){temp >>= 4;//右移四位,移走小數temp = temp * 10;//放大10倍temp = temp + (LSB & 0x0f) * 0.625;//溫度(*0.625是換算)}*/ }void main() {XBYTE[0x8000] = 0xff;//關閉LEDXBYTE[0xa000] = 0x00;//關閉蜂鳴器與繼電器while(1){Read_DS18B20_temp();ShowSMG();} }?
?
總結
以上是生活随笔為你收集整理的十六、C语言中的头文件与模块化设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机键盘调亮度,电脑屏幕亮度怎么调
- 下一篇: 四阶龙格库塔法的基本思想_四阶龙格—库塔