单片机C语言小程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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; /*关闭指示灯*/ }