八路电压巡检系统源程序.docx
- 文档编号:28794622
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:27
- 大小:20.36KB
八路电压巡检系统源程序.docx
《八路电压巡检系统源程序.docx》由会员分享,可在线阅读,更多相关《八路电压巡检系统源程序.docx(27页珍藏版)》请在冰豆网上搜索。
八路电压巡检系统源程序
八路电压巡检系统源程序
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharsecond,minute,hour,day,month,week,year;//分别储存秒、分、小时,日,月,年
ucharReadValue;//储存从1302读取的数据
inti,temp;
voidDisplay_Result(uchartemp);
/***********************************************************************
DS1302芯片的操作程序
************************************************************************/
ucharcodedigit[10]={"0123456789"};//定义字符数组显示数字
sbitRST=P1^7;//位定义1302芯片的接口,复位端口定义
sbitDATA=P1^6;//位定义1302芯片的接口,数据输出端定义
sbitSCLK=P1^5;//位定义1302芯片的接口,时钟输出端口定义
chark=0,q=0,w=0,e=0,r=12,t=11,y=5,u=10;
/***延时函数******/
voiddelaynus(ucharn)
{
uchari;
for(i=0;i } /****向1302写一个字节数据****/ voidWrite1302(uchardat) { uchari; SCLK=0;//拉低SCLK,为脉冲上升沿写入数据做好准备 delaynus (2);//稍微等待,使硬件做好准备 for(i=0;i<8;i++)//连续写8个二进制位数据 { DATA=dat&0x01;//取出dat的第0位数据写入1302 delaynus (2);//稍微等待,使硬件做好准备 SCLK=1;//上升沿写入数据 delaynus (2);//稍微等待,使硬件做好准备 SCLK=0;//重新拉低SCLK,形成脉冲 dat=dat>>1;//将dat的各数据位右移1位,准备写入下一个数据位 } } /************************************************** 向1302写一个字节数据 入口参数: Cmd,储存命令字;dat ***************************************************/ voidWriteSet1302(ucharCmd,uchardat) { RST=0;//禁止数据传递 SCLK=0;//确保写数居前SCLK被拉低 RST=1;//启动数据传输 delaynus (2);//稍微等待,使硬件做好准备 Write1302(Cmd);//写入命令字 Write1302(dat);//写数据 SCLK=1;//将时钟电平置于已知状态 RST=0;//禁止数据传递 } /***************************************************** 函数功能: 从1302读一个字节数据 ***************************************************/ ucharRead1302(void) { uchari,dat; delaynus (2);//稍微等待,使硬件做好准备 for(i=0;i<8;i++)//连续读8个二进制位数据 {dat>>=1;//将dat的各数据位右移1位,因为先读出的是字节的最低位 if(DATA==1)//如果读出的数据是1 dat|=0x80;//将1取出,写在dat的最高位 SCLK=1;//将SCLK置于高电平,为下降沿读出 delaynus (2);//稍微等待 SCLK=0;//拉低SCLK,形成脉冲下降沿 delaynus (2);//稍微等待 } returndat;//将读出的数据返回 } /***************************************************** 函数功能: 根据命令字,从1302读取一个字节数据 入口参数: Cmd ***************************************************/ ucharReadSet1302(ucharCmd) { unsignedchardat; RST=0;//拉低RST SCLK=0;//确保写数居前SCLK被拉低 RST=1;//启动数据传输 Write1302(Cmd);//写入命令字 dat=Read1302();//读出数据 SCLK=1;//将时钟电平置于已知状态 RST=0;//禁止数据传递 returndat;//将读出的数据返回 } /***************************************************** 函数功能: 1302进行初始化 ***************************************************/ voidInit_DS1302(void) { WriteSet1302(0x8E,0x00);//根据写状态寄存器命令字,写入不保护指令 /*WriteSet1302(0x80,((0/10)<<4|(0%10)));//根据写秒寄存器命令字,写入秒的初始值 WriteSet1302(0x82,((0/10)<<4|(0%10)));//根据写分寄存器命令字,写入分的初始值 WriteSet1302(0x84,((9/10)<<4|(9%10)));//根据写小时寄存器命令字,写入小时的初始值 WriteSet1302(0x86,((25/10)<<4|(25%10)));//根据写日寄存器命令字,写入日的初始值 WriteSet1302(0x88,((11/10)<<4|(11%10)));//根据写月寄存器命令字,写入月的初始值 WriteSet1302(0x8a,((4/10)<<4|(4%10)));//根据写星期寄存器命令字,写入星期的初始值 WriteSet1302(0x8c,((10/10)<<4|(10%10)));//根据写年寄存器命令字,写入年的初始值 */ } /****************************************************************************** 以下是对液晶模块的操作程序 *******************************************************************************/ /******************************************************************************* LCD1602液晶控制端口定义 ********************************************************************************/ sbitE=P1^1;//使能信号位,将E位定义 sbitRS=P1^0;//寄存器选择位,将RS位定义 /***************************************************** 函数功能: 延时1ms (3j+2)*i=(3×33+2)×10=1010(微秒),可以认为是1毫秒 ***************************************************/ voiddelay1ms() { uchari,j; for(i=0;i<10;i++) for(j=0;j<33;j++); } /***************************************************** 函数功能: 延时若干毫秒 入口参数: n ***************************************************/ voiddelaynms(ucharn) { uchari; for(i=0;i delay1ms(); } /***************************************************** 函数功能: 将模式设置指令或显示地址写入液晶模块 入口参数: dictate ***************************************************/ voidWriteInstruction(uchardictate) { delaynms(25);//等待空闲 RS=0;//根据规定,RS和R/W同时为低电平时,可以写入指令 E=0;//E置低电平(根据表8-6,写指令时,E为高脉冲, //就是让E从0到1发生正跳变,所以应先置"0" _nop_(); _nop_();//空操作两个机器周期,给硬件反应时间 P0=dictate;//将数据送入P0口,即写入指令或地址 _nop_(); _nop_(); _nop_(); _nop_();//空操作四个机器周期,给硬件反应时间 E=1;//E置高电平 _nop_(); _nop_(); _nop_(); _nop_();//空操作四个机器周期,给硬件反应时间 E=0;//当E由高电平跳变成低电平时,液晶模块开始执行命令 } /***************************************************** 函数功能: 指定字符显示的实际地址 ***************************************************/ voidWriteAddress(ucharx) { WriteInstruction(x|0x80);//显示位置的确定方法规定为"80H+地址码x" } /***************************************************** 函数功能: 将数据(字符的标准ASCII码)写入液晶模块 ***************************************************/ voidWriteData(uchary) { delaynms(25); RS=1;//RS为高电平,RW为低电平时,可以写入数据 E=0;//E置低电平(根据表8-6,写指令时,E为高脉冲, //就是让E从0到1发生正跳变,所以应先置"0" P0=y;//将数据送入P0口,即将数据写入液晶模块 _nop_(); _nop_(); _nop_(); _nop_();//空操作四个机器周期,给硬件反应时间 E=1;//E置高电平 _nop_(); _nop_(); _nop_(); _nop_();//空操作四个机器周期,给硬件反应时间 E=0;//当E由高电平跳变成低电平时,液晶模块开始执行命令 } /***************************************************** 函数功能: LCD初始化 ***************************************************/ voidLcdInitiate(void) { delaynms(15);//延时15ms,首次写指令时应给LCD一段较长的反应时间 WriteInstruction(0x38);//显示模式设置: 16×2显示,5×7点阵,8位数据接口 delaynms(5);//延时5ms ,给硬件一点反应时间 WriteInstruction(0x38); delaynms(5);//延时5ms ,给硬件一点反应时间 WriteInstruction(0x38);//连续三次,确保初始化成功 delaynms(5);//延时5ms ,给硬件一点反应时间 WriteInstruction(0x0c);//显示模式设置: 显示开,无光标,光标不闪烁 delaynms(5);//延时5ms ,给硬件一点反应时间 WriteInstruction(0x06);//显示模式设置: 光标右移,字符不移 delaynms(5);//延时5ms ,给硬件一点反应时间 WriteInstruction(0x01);//清屏幕指令,将以前的显示内容清除 delaynms(5);//延时5ms ,给硬件一点反应时间 } /************************************************************** 以下是1302数据的显示程序 **************************************************************/ /***************************************************** 函数功能: 显示秒 ***************************************************/ voidDisplaySecond(ucharx) { uchari,j;//j,k,l分别储存温度的百位、十位和个位 i=x/10;//取十位 j=x%10;//取个位 WriteAddress(0x46);//写显示地址,将在第2行第7列开始显示 WriteData(digit[i]);//将百位数字的字符常量写入LCD WriteData(digit[j]);//将十位数字的字符常量写入LCD delaynms (2);//延时1ms给硬件一点反应时间 } /***************************************************** 函数功能: 显示分钟 ***************************************************/ voidDisplayMinute(ucharx) { uchari,j;//j,k,l分别储存温度的百位、十位和个位 i=x/10;//取十位 j=x%10;//取个位 WriteAddress(0x43);//写显示地址,将在第2行第7列开始显示 WriteData(digit[i]);//将百位数字的字符常量写入LCD WriteData(digit[j]);//将十位数字的字符常量写入LCD delaynms (2);//延时1ms给硬件一点反应时间 } /***************************************************** 函数功能: 显示小时 ***************************************************/ voidDisplayHour(ucharx) { uchari,j;//j,k,l分别储存温度的百位、十位和个位 i=x/10;//取十位 j=x%10;//取个位 WriteAddress(0x40);//写显示地址,将在第2行第7列开始显示 WriteData(digit[i]);//将百位数字的字符常量写入LCD WriteData(digit[j]);//将十位数字的字符常量写入LCD delaynms (2);//延时1ms给硬件一点反应时间 } /***************************************************** 函数功能: 显示日 ***************************************************/ voidDisplayDay(ucharx) { uchari,j;//j,k,l分别储存温度的百位、十位和个位 i=x/10;//取十位 j=x%10;//取个位 WriteAddress(0x0b);//写显示地址,将在第2行第7列开始显示 WriteData(digit[i]);//将百位数字的字符常量写入LCD WriteData(digit[j]);//将十位数字的字符常量写入LCD delaynms (2);//延时1ms给硬件一点反应时间 } /***************************************************** 函数功能: 显示月 ***************************************************/ voidDisplayMonth(ucharx) { uchari,j;//j,k,l分别储存温度的百位、十位和个位 i=x/10;//取十位 j=x%10;//取个位 WriteAddress(0x08);//写显示地址,将在第2行第7列开始显示 WriteData(digit[i]);//将百位数字的字符常量写入LCD WriteData(digit[j]);//将十位数字的字符常量写入LCD delaynms (2);//延时1ms给硬件一点反应时间 } /***************************************************** 函数功能: 显示星期 ***************************************************/ voidDisplayWeek(ucharx) { uchari,j;//j,k,l分别储存温度的百位、十位和个位 i=x/10;//取十位 j=x%10;//取个位 WriteAddress(0x0e);//写显示地址,将在第2行第7列开始显示 WriteData(digit[i]);//将百位数字的字符常量写入LCD WriteData(digit[j]);//将十位数字的字符常量写入LCD delaynms (2);//延时1ms给硬件一点反应时间 } /*************************************************** 函数功能: 显示年 ***************************************************/ voidDisplayYear(ucharx) { uchari,j;//j,k,l分别储存温度的百位、十位和个位 i=x/10;//取十位 j=x%10;//取个位 WriteAddress(0x05);//写显示地址,将在第2行第7列开始显示 WriteData(digit[i]);//将百位数字的字符常量写入LCD WriteData(digit[j]);//将十位数字的字符常量写入LCD delaynms (2);//延时1ms给硬件一点反应时间 } /* /****************************************************************** //显示ADC0809转换通道和电压值 *******************************************************************/ sbitADDA=P2^5; sbitADDB=P2^4; sbitADDC=P2^3; sbitALE=P2^0; sbitST=P2^4; sbitEOC=P2^5; sbitOE=P2^6; //ucharLCD_DSY_BUFFER1[]={"VOL: 0.00V"}; //ucharLCD_DSY_BUFFER2[]={"NUM1: "}; ucharcode1[]={"12345678"}; voidset_ad_channel(ucharchannel)//带参数 { switch(channel) { case1: {ADDA=0;ADDB=0;ADDC=0;}break; case2: {ADDA=0;ADDB=0;ADDC=1;}break; case3: {ADDA=0;ADDB=1;ADDC=0;}break; case4: {ADDA=0;ADDB=1;ADDC=1;}break; case5: {ADDA=1;ADDB=0;ADDC=0;}break; case6: {ADDA=1;ADDB=0;ADDC=1;}break; case7: {ADDA=1;ADDB=1;ADDC=0;}break; case8: {ADDA=1;ADDB=1;ADDC=1;}break; } } /* voidDisplaychannel(ucharq,uchartemp) { WriteAddress(0x49); WriteData(q+0x30); //temp=0; WriteAddress(0x4c);//写显示地址,将在第2行第7列开始显示 WriteData(temp/100+0x30); WriteAddress(0x4d); WriteData(temp/10%10+0x30); WriteAddress(0x4e);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 八路 电压 巡检 系统 源程序
![提示](https://static.bdocx.com/images/bang_tan.gif)