单片机C语言小程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机C语言小程序

#include

#include

#define V AR XBYTE[0x00] /*V AR为外部位址0000*/

#define read 0 /*93c46读取的识别码READ=0*/

#define write 2 /*93c46写入的识别码WRITE=2*/

#define ewen 4 /*93C46写致能的识别码EWEN=4*/

#define ewds 6 /*93C46写除能的识别码EWDS=6*/

#define cs INT0 /*93C46 CS接脚=8051 RD P3.2*/

#define clk INT1 /*93C46 CLK接脚=8051 WR P3.3*/

#define di T0 /*93C46 DI接脚=8051 T1 P3.4*/

#define d0 T1 /*93C46 DO接脚=8051 T0 P3.5*/

#define LOW 0x49 /*存放测试温度的下限值*/

#define HIGH 0x51 /*存放测试温度的上限值*/

bit FLAG0=0; /*宣告TIMER0响应旗号*/

//外接工业专用温度传感器时,目前设置测量温度为0-99度:

static const char tab[13]={0x3a,0x53,0x6f,0x8a,0xa3, /*0度,10度,20度,30度,40度*/

0xB8,0xC8,0xD5,0xDE,0xE5, /*50度,60度,70度,80度,90度*/

0xEA,0xEE}; /*100度,110度*/

//使用板上AD590温度传感器时,目前设置测量温度为0-99度:

//static const char tab[13]={0x88,0x8d,0x92,0x97,0x9c, /*0度,10度,20度,30度,40度,*/

// 0xa1,0xa6,0xab,0xb0,0xb5, /*50度,60度,70度,80度,90度*/

// 0xba,0xc0}; /*100度,110度*/

char data1[2];

char C,S,k=0;

char MEP[7]; /*显示器值存放阵列*/

//MEP[0]=数码管最低位显示值,温度指示小数点后位

//MEP[1]=数码管次低位显示值,温度指示个位数

//MEP[2]=数码管高位显示值,温度指示十位数

//MEP[3]=数码管最低位显示值,功能显示目前定为1,2,3,4,5

//MEP[4]=

//MEP[5]=暂放置温度显示值,高4位为温度指示十位数值,低4位为温度指示个位数值//MEP[6]=在温度显示与电压调整副程式中,将测量值C暂存MEP[6]中

unsigned char combuf[10];

unsigned char ADR46,CH,CL,m,C1,C2; /*ADR46,93C46位址,CH高位元组,CL低*/ int sec,sec1;

char ptr=0,ptr1=0x10,psr=0; /*ptr显示器值存放阵MEP[]指标,ptr1显示器扫描指标*/ char count=100,sb=0;

void delay (unsigned int value) /*延时副程式*/

{

while (value!=0) value--; /*10us延时*/

}

void COMP(); /*宣告比较现在温度与设定温度副程式*/

void SET();

void disp(); /*宣告设定温度副程式*/

void to9346(char c); /*宣告TO93C46副程式*/

void SDT46(char c); /*宣告串入副程式*/

RDT46(); /*宣告串出副程式*/

void clear(void); /*宣告清除按键存放/显示器阵列MEP[]副副程式*/

void xch(void); /*宣告按键存放/显示器阵列MEP[]右键滚入副程式*/

void sjust(void); /*温度显示慢跳调整副程式*/

void temper(); /*宣告温度显示与电压调整副程式*/

void UP(); /*宣告温度上升键防抖动副程式*/

void UPA(); /*宣告温度设置上升副程式*/

void DOWN(); /*宣告温度下降键防抖动副程式*/

void DOWNA(); /*宣告温度设置下降副程式*/

void FONTION(); /*宣告模式键判断模式副程式*/

void buf(); /*宣告从93C46取设定值副程式*/

void SA VE(); /*宣告设置存储副程式*/

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

main() /*主程式*/

{

TMOD=0x11; /*TIMER0,TIMER1工作在MODE1*/

TH0=(65535-50000)/256; /*设定TIMER0初值,50ms*/

TL0=(65536-50000)%256;

TH1=(65535-4000)/256; /*设定TIMER1初值,4ms*/

TL1=(65536-4000)%256;

IE=0x8a; /*TIMER0,TIMER1中断致能*/

TR1=1; /*启动TIMER1*/

P2_7=1; /*测试用,温度下限指示*/

P2_6=1; /*测试用,温度在正常上下限间指示*/

P2_5=1; /*测试用,温度上限指示*/

buf(); /*从93C46取设定值副程式*/

while(1) /*无条件循环*/

{

P3_1=0;

MEP[3]=0xff; /*将模式位置零*/

V AR=0x00; /*产生写入信号WR=0,令ADC0804开始转换*/

while (P2_0==1); /*侦测ADC0804的接脚INTR=0否?是则转换完成*/

S=V AR; /*读取ADC0804资料,存入C*/

sjust(); /*温度显示慢跳调整副程式*/

temper(); /*呼叫温度显示调整副程式*/

MEP[5]=(MEP[2] < <4)|MEP[1];

if(P2_4==0) SET(); /*如果模式键P2.4按下,则呼叫SET副程式,否则跳过副程式*/

if(MEP[5]

P2_6=P2_5=1; /*关闭指示灯*/

}

相关文档
最新文档