扫描嘛,书上有基本原理的介绍,也有最基本的实现方法。去看看,理解了才好下手!<br />//=====================================<br />#include "main.h"<br />#include "IO_Port.h"<br />#include "18b20.h"<br />//=====================================<br /><br />unsigned char keyBuf[3],key;<br />unsigned int KCountL,KCountH;<br /><br />unsigned char event;<br />unsigned char ClearScr;<br /><br />#define NKDBONCE 5<br />#define NKPAUSE 5<br />#define NKCOUNT 5<br />//=====================================<br />//函数声明<br />//--------<br />void Ram_Init(void);<br />void IO_Init(void);<br />void delay(unsigned int t);<br />void onEventProc(void);<br /><br />extern void CT2_Init(void);<br />extern void CT1_Init(void);<br />//=====================================<br />code unsigned char NUM_TAB[]={NUM_0,NUM_1,NUM_2,NUM_3,NUM_4,NUM_5,NUM_6,NUM_7,NUM_8,NUM_9,NUM_A,NUM_b,NUM_C,NUM_d,NUM_E,NUM_F};<br />//#define _NUM_DEC 0x0B<br />//#define _NUM_BLANK 0x0D<br /><br />const unsigned char SCAN_Port[4]={0x80,0x40,0x20,0x10};<br /><br />unsigned char myNum;<br />unsigned char Led7s_Buf[4];<br /><br />unsigned char Counter_T1,Counter_2ms,Counter_500ms,Counter_1Kms;<br />unsigned char rCOM_S7LED,ucScanBIT;<br />unsigned char rFlag_T_En;<br /><br />/*-------------------------------*/<br />#define COUNTER_2MS 4<br />#define COUNTER_500MS 250<br />#define COUNTER_1KMS 2<br /><br />/*-------------------------------*/<br />unsigned int uiHEX2BCD(unsigned int uintdata);<br />/*主程序开始<br />=================================<br />//主程序<br />---------------------------------<br />*/<br />void main(void)<br />{<br /><br /> Ram_Init();<br /> IO_Init();<br /> //delay(20000);//上电延时,等待电源稳定<br /><br /> //lcdinit();<br /> //clrscr();<br /><br /> rCOM_S7LED = 0xff;<br /> pCOM_S7LED = rCOM_S7LED;<br /> pDATA_S7LED = NUM_ALL;<br /> delay(50000);//上电延时,等待电源稳定<br /><br /> rCOM_S7LED = 0xf0;<br /> pCOM_S7LED = rCOM_S7LED;<br /> pDATA_S7LED = NUM_BLANK;<br /> delay(20000);<br /><br /> TemperatuerResult();<br /> Led7s_Buf[0] = NUM_TAB[Temperature & 0x000f];<br /> Led7s_Buf[1] = NUM_TAB[(Temperature & 0x00f0)>>4];<br /> Led7s_Buf[2] = NUM_TAB[(Temperature & 0x0f00)>>8];<br /> Led7s_Buf[3] = NUM_TAB[(Temperature & 0xf000)>>12];<br /><br /> CT2_Init();<br /> CT1_Init();<br /> EA = 1;<br /><br /> while(1)<br /> {<br /> if((Counter_1Kms&0x01)&&rFlag_T_En)<br /> {<br /> GetTemperature();<br /> Temperature = uiHEX2BCD(Temperature);<br /> ET1 = 0;<br /> Led7s_Buf[0] = NUM_TAB[Temperature & 0x000f];<br /> Led7s_Buf[1] = NUM_TAB[(Temperature & 0x00f0)>>4];<br /> Led7s_Buf[2] = NUM_TAB[(Temperature & 0x0f00)>>8];<br /> Led7s_Buf[3] = NUM_TAB[(Temperature & 0xf000)>>12];<br /> Led7s_Buf[1] = Led7s_Buf[1]|SEG_P;<br /> rCOM_S7LED = rCOM_S7LED^0x01;<br /><br /> rFlag_T_En = 0;<br /> ET1 = 1;<br /> }<br /> //KeyScan();<br /> //if(event)<br /> //{<br /> // event = 0;<br /> onEventProc();<br /> // key = 0;<br /> //}<br /> }<br />}<br /><br />//======================================<br />/*<br />void KeyScan(void)<br />{<br /> if(key)<br /> {<br /> event = EVENT_K_DOWN;<br /> //beepout(20);<br /> }<br /> else<br /> {<br /> key=0;<br /> }<br />}<br />*/<br />//============================================<br />//<br />//-----------------------<br />void Ram_Init(void)<br />{<br /> Counter_T1 = 0;<br /> myNum = 0;<br /> rCOM_S7LED = 0x00;<br /> ucScanBIT = 0;<br /> Led7s_Buf[0] = 0;<br /> Led7s_Buf[1] = 0;<br /> Led7s_Buf[2] = 0;<br /> Led7s_Buf[3] = 0;<br />}<br /><br />//============================================<br />//<br />//-----------------------<br />void IO_Init(void)<br />{<br /> pDATA_S7LED = NUM_BLANK;<br /> pCOM_S7LED = rCOM_S7LED;<br /><br /> P1 = 0x00;<br /> P3 = 0x00;<br />}<br /><br />//============================================<br />//<br />//-----------------------<br />void delay(unsigned int t)<br />{<br /> unsigned int i,j;<br /> for(i=t;i>0;i--)<br /> {<br /> j=0;<br /> j=1;<br /> j=2;<br /> }<br />}<br /><br />//============================================<br />//<br />//-----------------------<br />void onEventProc(void)<br />{<br /><br />}<br />//===========================================<br />void INT_CT2_PROC(void) interrupt INT_CT2 using 1<br />{<br /><br />}<br /><br />//===========================================<br />//8位重装模式,间隔:250*2us = 500us<br />//-------------------------------------------<br />void INT_CT1_PROC(void) interrupt INT_CT1 using 1<br />{//500us间隔<br /><br /> P1_0 = ~P1_0;<br /> Counter_T1++;<br /> if(Counter_T1>=COUNTER_2MS)<br /> {//2ms间隔<br /> Counter_T1 = 0;<br /> //处理...<br /> rCOM_S7LED = rCOM_S7LED&0x0F; //清除LED公共端口备份寄存器高位<br /> pCOM_S7LED = rCOM_S7LED;//关闭公共端口,准备更新数据<br /><br /> pDATA_S7LED = Led7s_Buf[ucScanBIT];<br /> rCOM_S7LED = rCOM_S7LED|SCAN_Port[ucScanBIT];//计算扫描端口<br /> pCOM_S7LED = rCOM_S7LED;//输出扫描状态<br /><br /> ucScanBIT++;<br /> if(ucScanBIT >=4 )<br /> {<br /> ucScanBIT = 0;<br /> }<br /> <br /> Counter_2ms++;<br /> if(Counter_2ms >= COUNTER_500MS)<br /> {//500ms间隔<br /> Counter_2ms = 0;<br /> //处理...<br /> Counter_500ms++;<br /> if(Counter_500ms >= COUNTER_1KMS) <br /> {//1Kms间隔<br /> Counter_500ms = 0;<br /> //处理...<br /> Counter_1Kms++;<br /> rFlag_T_En = 1;<br /><br /><br /> }<br /> }<br /> }<br />}<br /><br />//===========================================<br />//unsigned int 16进制转换为BCD<br />//-------------------------------------------<br />unsigned int uiHEX2BCD(unsigned int uintdata)<br />{<br /> unsigned int Tempr[5],i;<br /> <br /> for(i=0;i<5;i++)<br /> {<br /> Tempr=0;<br /> }<br /> if(uintdata>=10000)<br /> {<br /> Tempr[4]=uintdata/10000;<br /> uintdata=uintdata%10000;<br /> }<br /> if(uintdata>=1000)<br /> {<br /> Tempr[3]=uintdata/1000;<br /> uintdata=uintdata%1000;<br /> }<br /> if(uintdata>=100)<br /> {<br /> Tempr[2]=uintdata/100;<br /> uintdata=uintdata%100;<br /> }<br /><br /> Tempr[1]=uintdata/10;<br /> Tempr[0]=uintdata%10;<br /><br /> uintdata=(Tempr[3]<<12)+(Tempr[2]<<8)+(Tempr[1]<<4)+Tempr[0];<br /> return uintdata;<br /><br />}<br />/**/
|