为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

数码管驱动[教材]

2017-11-26 20页 doc 44KB 18阅读

用户头像

is_768820

暂无简介

举报
数码管驱动[教材]数码管驱动[教材] 数码管驱动 //P201 电压 P202 电流 //LG5641AH管脚 共阴极 1至12脚分别为:e d h c g 4 b 3 2 f a 1 管脚的数法:有字面向自己,左下脚为第一脚,逆时针数。 #define SMYS 1 //扫描延时 #define KJYS 1000 //开机延时 #define AA 10 //A #define bb 11 //b #define CC 12 //C #define dd 13 //d #define EE 14 //E #define...
数码管驱动[教材]
数码管驱动[教材] 数码管驱动 //P201 电压 P202 电流 //LG5641AH管脚 共阴极 1至12脚分别为:e d h c g 4 b 3 2 f a 1 管脚的数法:有字面向自己,左下脚为第一脚,逆时针数。 #define SMYS 1 //扫描延时 #define KJYS 1000 //开机延时 #define AA 10 //A #define bb 11 //b #define CC 12 //C #define dd 13 //d #define EE 14 //E #define FF 15 //F #define HH 16 //H #define LL 17 //L #define PP 18 //P #define rr 19 //r #define UU 20 //U #define ZHX 21 //中横线 #define XHX 22 //下横线 #define OFF 23 //全灭 #define POINT 24 //带点的0 unsigned char code font[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79,0x71, 0x76,0x38,0x73,0x31,0x3e, 0x40,0x08, 0x00, 0x3f+0x80,0x06+0x80,0x5b+0x80,0x4f+0x80,0x66+0x80,0x6d+0 x80,0x7d+0x80,0x07+0x80,0x7f+0x80,0x6f+0x80,}; //不带小数点 +0x80则带小数点 //0-9 A b C d E F H L P r U - _ 全灭 带点的0-9 //0-9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24-33 //unsigned char code led[]={0x31,0x32,0x34, 0x51,0x52,0x54, 0x18, }; //分别为待机,准备,工作 unsigned char data xsbuf[8]; //对应8个数码管 unsigned char data xspos; // void xsinit() { P0M0 =0xff; //提高驱动能力 P0M1 =0x00; // P2M0=0xff; // P2M1=0x00; // P0=0; //全灭 //单片机开机复位后,所有引脚为高电平,全亮,, // P2=0; } void xscl() small //显示任务 { while(1) { xspos=0; // 从第0个xsbuf开始,以下顺序不能巅倒,可以把显示缓冲放在任意数据码中显示 P0=font[xsbuf[xspos]];//加载内容 P24=0; //(低)显示 wait(SMYS); P24=1; //(高)不显示 xspos++; P0=font[xsbuf[xspos]];//加载内容 P25=0; //(低)显示 wait(SMYS); P25=1; //(高)不显示 xspos++; P0=font[xsbuf[xspos]];//加载内容 P26=0; //(低)显示 wait(SMYS); P26=1; //(高)不显示 xspos++; P0=font[xsbuf[xspos]];//加载内容 P27=0; //(低)显示 wait(SMYS); P27=1; //(高)不显示 xspos++; P0=font[xsbuf[xspos]];//加载内容 P20=0; //(低)显示 wait(SMYS); P20=1; //(高)不显示 xspos++; P0=font[xsbuf[xspos]];//加载内容 P21=0; //(低)显示 wait(SMYS); P21=1; //(高)不显示 xspos++; P0=font[xsbuf[xspos]];//加载内容 P22=0; //(低)显示 wait(SMYS); P22=1; //(高)不显示 xspos++; P0=font[xsbuf[xspos]];//加载内容 P23=0; //(低)显示 wait(SMYS); P23=1; //(高)不显示 xspos++; } } //以上为显示驱动 //以下为显示内容 void xskjdh() //P2.(4567 0123)逐个显示 再全灭 { L_ERROR=L_ON; P0=0xff; P24=0; yans(KJYS); P24=1; L_WORK=L_ON; P0=0xff; P25=0; yans(KJYS); P25=1; L_READY=L_ON; P0=0xff; P26=0; yans(KJYS); P26=1; L_STANDBY=L_ON; P0=0xff; P27=0; yans(KJYS); P27=1; L_STANDBY=L_OFF; P0=0xff; P20=0; yans(KJYS); P20=1; L_READY=L_OFF; P0=0xff; P21=0; yans(KJYS); P21=1; L_WORK=L_OFF; P0=0xff; P22=0; yans(KJYS); P22=1; L_ERROR=L_OFF; P0=0xff; P23=0; yans(KJYS); P23=1; /* P0=0; //全灭 P2=0; yans(KJYS); P0=0; //全灭 P2=0xff; yans(KJYS); P0=0xff; //全亮 P2=0; yans(KJYS); */ P0=0xff; //全灭 先全部关闭,给P0赋值,P2决定在哪个 数码管上显示P0值,然后关闭该数码管,扫描显示其它值到其它数码 管。 P2=0xff; yans(KJYS); } void xsbbh() { xsbuf[0]=8; xsbuf[1]=8; xsbuf[2]=HH; // xsbuf[3]=BBH/16; //十位 软件版本号 xsbuf[4]=BBH%16; //个位 xsbuf[5]=ZHX; // xsbuf[6]=dybbh/16; xsbuf[7]=dybbh%16; // 电源版本号 } void xsgztime() //十进制显示 分钟前有点 时间是倒着保存的,所以倒着读出 { xsbuf[0]=Byte_Read(GZADD+erjm+3)%100/10; //十位 xsbuf[1]=Byte_Read(GZADD+erjm+3)%10; //个位 xsbuf[2]=Byte_Read(GZADD+erjm+2)%100/10; //十位 xsbuf[3]=Byte_Read(GZADD+erjm+2)%10; //个位 xsbuf[4]=Byte_Read(GZADD+erjm+1)%100/10; //十位 xsbuf[5]=Byte_Read(GZADD+erjm+1)%10+POINT; //个位 xsbuf[6]=Byte_Read(GZADD+erjm )%100/10; //十位 xsbuf[7]=Byte_Read(GZADD+erjm )%10; //个位 } void xsgzsj() //显示故障接收数据 { xsbuf[0]=Byte_Read(GZADD+erjm )/16; //十位 xsbuf[1]=Byte_Read(GZADD+erjm )%16; //个位 xsbuf[2]=Byte_Read(GZADD+erjm+1)/16; //十位 xsbuf[3]=Byte_Read(GZADD+erjm+1)%16; //个位 xsbuf[4]=Byte_Read(GZADD+erjm+2)/16; //十位 xsbuf[5]=Byte_Read(GZADD+erjm+2)%16; //个位 xsbuf[6]=Byte_Read(GZADD+erjm+3)/16; //十位 xsbuf[7]=Byte_Read(GZADD+erjm+3)%16; //个位 } //-----------------------------显示画面,故障显示 void xsgz() { if(erjm*GZBJ==0||erjm/GZBJ%7==0) //4*0 4*1 4*2 4*3 4*4 4*5 4*6 4*7 xsgztime(); else xsgzsj(); } //-------------------------------------显示时间 void xstime() //十进制显示 分钟前有点 { xsbuf[0]=sjsz[3]/10; //十位 xsbuf[1]=sjsz[3]%10; //个位 xsbuf[2]=sjsz[2]/10; //十位 xsbuf[3]=sjsz[2]%10; //个位 xsbuf[4]=sjsz[1]/10; //十位 xsbuf[5]=sjsz[1]%10+POINT; //个位 xsbuf[6]=sjsz[0]/10; //十位 xsbuf[7]=sjsz[0]%10; //个位 } void xszt() { switch(POW_CON) { case WORK: //工作 L_STANDBY=L_OFF; L_READY=L_OFF; L_WORK=L_ON; break; case READY: //准备 L_STANDBY=L_OFF; L_READY=L_ON; L_WORK=L_OFF; break; default: L_STANDBY=L_ON; L_READY=L_OFF; L_WORK=L_OFF; } } void xserledoff() { L_ERROR=L_OFF; } void xser() small { L_ERROR=L_ON; xsbuf[0]=EE; //最高位 错误 xsbuf[1]=ZHX; //千位 xsbuf[2]=ZHX; //十位 xsbuf[3]=ZHX; //个位 xsbuf[4]=ZHX; //最高位 xsbuf[5]=ZHX; //千位 xsbuf[6]=errno/16; //十位 xsbuf[7]=errno%16; //个位 } void xsxtwd() { xsbuf[0]=dd; //最高位 错误 xsbuf[1]=XHX; //千位 xsbuf[2]=XHX; //十位 xsbuf[3]=XHX; //个位 xsbuf[4]=XHX; //最高位 xsbuf[5]=wdbarr[(unsigned char)(wdsj+wdjz)]%1000/100; // 千位 xsbuf[6]=wdbarr[(unsigned char)(wdsj+wdjz)]%100/10; // 十位 xsbuf[7]=wdbarr[(unsigned char)(wdsj+wdjz)]%10; //个 位 } void xss(unsigned char bs,num) { if(0==(bs&0xc0)) //无小数 0x1100 0000 //192 //0x00 XX XXXX { // xsbuf[3]=((unsigned int )(num*bs))%100000/10000; //万位 xsbuf[4]=((unsigned int )(num*bs))%10000/1000; //千 位 xsbuf[5]=((unsigned int )(num*bs))%1000/100; //百位 xsbuf[6]=((unsigned int )(num*bs))%100/10; //十位 xsbuf[7]=((unsigned int )(num*bs))%10; //个位 } else if((bs&0xc0)==0x80) //一位小数 //0x10 XX XXXX { // xsbuf[3]=((unsigned int )(num*bs))%100000/10000; // 万位 xsbuf[4]=((unsigned int )(num*(bs&0x3f)))%10000/1000; //千位 xsbuf[5]=((unsigned int )(num*(bs&0x3f)))%1000/100; //百位 xsbuf[6]=((unsigned int )(num*(bs&0x3f)))%100/10+POINT ; //十位 xsbuf[7]=((unsigned int )(num*(bs&0x3f)))%10; //个 位 } else if((bs&0xc0)==0xc0) //两位小数 //0x11 XX XXXX { // xsbuf[3]=((unsigned int )(num*bs))%100000/10000; //万位 xsbuf[4]=((unsigned int )(num*(bs&0x3f)))%10000/1000; //千位 xsbuf[5]=((unsigned int )(num*(bs&0x3f)))%1000/100+POINT; //百位 xsbuf[6]=((unsigned int )(num*(bs&0x3f)))%100/10; //十位 xsbuf[7]=((unsigned int )(num*(bs&0x3f)))%10; //个 位 } else if((bs&0xc0)==0x40) //两位小数 取一位有效 //0x01 XX XXXX { // xsbuf[3]=XHX; xsbuf[4]= ((unsigned int )(num*(bs&0x3f)))%100000/10000; //万位 xsbuf[5]=((unsigned int )(num*(bs&0x3f)))%10000/1000; //千位 xsbuf[6]=((unsigned int )(num*(bs&0x3f)))%1000/100+POINT; //百位 xsbuf[7]=((unsigned int )(num*(bs&0x3f)))%100/10; //十位 } } void xsszcs() small { unsigned char i; xsbuf[0]=CC; //最高位 表示设置 xsbuf[1]=xuhao%100/10; //十位 xsbuf[2]=xuhao%10; //个位 xsbuf[3]=XHX; if(9==xuhao) //与温度相关的单独处理 i=wdbarr[(unsigned char)(wdsx+wdjz)]; else if(8==xuhao) i=wdbarr[(unsigned char)(fsqd+wdjz)]; else if(23==xuhao) i=wdbarr[(unsigned char)(wdsx+wdjz)]; else if(2==xuhao) { xss(dlbs,mcdl); return; } else if(4==xuhao) { xss(dlbs,ydl); return; } else i=(*xuhaoarr[xuhao]); xsbuf[4]=XHX; //最高位 switch(xuhao) //使用switch可以快速处理 十/十六进制分流 { case 6: case 7: case 10: case 11: case 12: case 13: case 18: case 19: case 20: case 21: //十六进制 xsbuf[5]=XHX; //千位 xsbuf[6]=(*xuhaoarr[xuhao])/16; //十位 xsbuf[7]=(*xuhaoarr[xuhao])%16; //个位 break; default: //十进制 xsbuf[5]=(*xuhaoarr[xuhao])%1000/100; //千位 xsbuf[6]=(*xuhaoarr[xuhao])%100/10; //十位 xsbuf[7]=(*xuhaoarr[xuhao])%10; //个位 break; } } void xss0123(unsigned char bs,num) //和xss一样 显示位置为0123 { if(0==(bs&0xc0)) //无小数 0x1100 0000 //192 //0x00 XX XXXX { // xsbuf[3]=((unsigned int )(num*bs))%100000/10000; //万位 xsbuf[0]=((unsigned int )(num*bs))%10000/1000; //千位 xsbuf[1]=((unsigned int )(num*bs))%1000/100; //百位 xsbuf[2]=((unsigned int )(num*bs))%100/10; //十位 xsbuf[3]=((unsigned int )(num*bs))%10; //个位 } else if((bs&0xc0)==0x80) //一位小数 //0x10 XX XXXX { // xsbuf[3]=((unsigned int )(num*(bs&0x3f)))%100000/10000; //万位 xsbuf[0]=((unsigned int )(num*(bs&0x3f)))%10000/1000; //千位 xsbuf[1]=((unsigned int )(num*(bs&0x3f)))%1000/100; //百位 xsbuf[2]=((unsigned int )(num*(bs&0x3f)))%100/10+POINT ; //十位 xsbuf[3]=((unsigned int )(num*(bs&0x3f)))%10; //个 位 } else if((bs&0xc0)==0xc0) //两位小数 //0x11 XX XXXX { // xsbuf[3]=((unsigned int )(num*(bs&0x3f)))%100000/10000; //万位 xsbuf[0]=((unsigned int )(num*(bs&0x3f)))%10000/1000; //千位 xsbuf[1]=((unsigned int )(num*(bs&0x3f)))%1000/100+POINT; //百位 xsbuf[2]=((unsigned int )(num*(bs&0x3f)))%100/10; //十位 xsbuf[3]=((unsigned int )(num*(bs&0x3f)))%10; //个位 } else if((bs&0xc0)==0x40) //两位小数 取一位有效 //0x01 XX XXXX { // xsbuf[3]=XHX; xsbuf[0]= ((unsigned int )(num*(bs&0x3f)))%100000/10000; //万位 xsbuf[1]=((unsigned int )(num*(bs&0x3f)))%10000/1000; //千位 xsbuf[2]=((unsigned int )(num*(bs&0x3f)))%1000/100+POINT; //百位 xsbuf[3]=((unsigned int )(num*(bs&0x3f)))%100/10; // 十位 } } void xssddy() { xsbuf[0]=UU; //最高位 xsbuf[1]=XHX; //千位 xsbuf[2]=XHX; // xsbuf[3]=XHX; xss(dybs,sddy); } void xssddl() { xsbuf[0]=AA; //最高位 xsbuf[1]=XHX; //千位 xsbuf[2]=XHX; // xsbuf[3]=XHX; xss(dlbs,sddl); } void xssdgl() { xsbuf[0]=PP; //最高位 xsbuf[1]=XHX; //千位 xsbuf[2]=XHX; // xsbuf[3]=XHX; xss(glbs,sdgl); } void xssdcs() //显示设定参数 { if((szkg&0x03)==0) //设定电压 xssddy(); else if((szkg&0x03)==1) //设定电流 xssddl(); else //设定功率 xssdgl(); } void xscs() small //显示参数 数据更新要调用此 { xss0123(dlbs,scdl); xss(dybs,scdy); xszt(); //显示状态 } void xszjtime() //十进制显示 分钟前有点 时间是倒着保 存的,所以倒着读出 { xsbuf[0]=sjsz[3]%100/10; //十位 xsbuf[1]=sjsz[3]%10; //个位 xsbuf[2]=sjsz[2]%100/10; //十位 xsbuf[3]=sjsz[2]%10; //个位 xsbuf[4]=sjsz[1]%100/10; //十位 xsbuf[5]=sjsz[1]%10+POINT; //个位 xsbuf[6]=sjsz[0]%100/10; //十位 xsbuf[7]=sjsz[0]%10; //个位 } void xszjsj() //显示自检接收数据 { xsbuf[0]=jshc[erjm-4+2]/16; //十位 xsbuf[1]=jshc[erjm-4+2]%16; //个位 xsbuf[2]=jshc[erjm-4+3]/16; //十位 xsbuf[3]=jshc[erjm-4+3]%16; //个位 xsbuf[4]=jshc[erjm-4+4]/16; //十位 xsbuf[5]=jshc[erjm-4+4]%16; //个位 xsbuf[6]=jshc[erjm-4+5]/16; //十位 xsbuf[7]=jshc[erjm-4+5]%16; //个位 } //-----------------------------显示画面,自检显示 void xszj() { if(erjm==0) //4*0 4*1 4*2 4*3 4*4 4*5 4*6 4*7 xszjtime(); else xszjsj(); } //-----------------------------显示序号 方便看 void xsxh() { unsigned char i; for(i=0;i<5;i++) { xsbuf[1]=OFF; //十位 xsbuf[2]=OFF; //个位 yans(2000); xsbuf[1]=xuhao%100/10; //十位 xsbuf[2]=xuhao%10; //个位 yans(2000); } }
/
本文档为【数码管驱动[教材]】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索