实测通过6位数码管显示程序

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

0.1~10累加控制数码管低2位显示从0.1到9.9累加,步进为0.1实验源程序://***********************************************************************************//主函数//***********************************************************************************voidmain()//主函数{num=0;//初始化段码为0while(1)//进入while死循环{scan();//数码管扫描函数}}//***********************************************************************************//动态扫描函数//***********************************************************************************scan(){uchari;for(i=0;i10;i++){//显示个位P1=0xbf;//0xbf=10111111,即选通个位LE1=1;//锁存位LE1=0;//断开锁存,位选573的Q7~Q0仍保持wei=num*10;P1=dis[wei/10]|0x80;//dis[wei/10]为0~9的编码,0x80为小数点LE2=1;//锁存段码LE2=0;//断开锁存,段选573的Q7~Q0仍保持delay(100);//延时保持一下,延时过大会闪动,延时过小会有重影P1=0x00;LE2=1;LE2=0;//清除P1口数据,以免造重影//显示十分位P1=0x7f;//0xbf=01111111,即选通十分位LE1=1;//锁存位LE1=0;//断开锁存,位选573的Q7~Q0仍保持wei=num*10;P1=dis[wei%10];//0~9的编码LE2=1;//锁存段码LE2=0;//断开锁存,段选573的Q7~Q0仍保持delay(100);//延时保持一下,延时过大会闪动,延时过小会有重影P1=0x00;LE2=1;LE2=0;//清除P1口数据,以免造重影}if(num==9.9)num=0;//扫描到显示9.9时,重新开始扫描num+=0.1;//num加0.1}/***********************************************************************************以下各个程序是实测通过的6位共阳数码管显示程序(c51)2014.08.20.实测通过仿TX-3C实验板晶振为11.0592M************************************************************************************//***********************************************************************************共阴led数码管码表:(20140820)/*codeucharshu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴数码管段选码(0-f)*/************************************************************************************//***********************************************************************************高位(7)----低位(0)位00000000共阳数码管段选码(0-f)笔画hgfedcba(小数点不亮码):0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};0123456789abcdef//共阳数码管段选码(0-f)(高位减8即可,在段码中加上'&0x7f'即:P0=table[ge]&0x7f;)(带小数点亮码)://P0=table[ge]&0x7f;或P0=table[ge]&0x80;该位小数点也亮。注:'7f'与'80'互为'反码'。0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e};0123456789abcdef************************************************************************************/㈠:静态方式显示6位数字#includereg52.h//52单片机头文件sbitdula=P2^6;//单片机管脚位声明sbitwela=P2^7;//#defineuintunsignedint//宏定义//#defineucharunsignedchar//宏定义//#includeintrins.h//包含有左右循环移位子函数的库voiddelay(unsignedintz)//延时函数(z的取值为这个函数的延时ms数,如:delay(200);大约延时200ms).{unsignedintx,y;//定义2个int型变量for(x=z;x0;x--)for(y=110;y0;y--);}voidmain()//主函数{//P1=0xff;//将单片机P1口清零while(1)//程序停止在这里(大循环){/*dula=1;P0=0xff;//送位数据前关闭所有显示,防止打开位选锁存后段选数据通过位选锁存器//delay(500);P0=!P0;qdelay(500);//延时500毫秒dula=0;delay(2);//延时2毫秒*//*P0=0x00;delay(2);wela=1;P0=0x03;wela=0;delay(5);*/dula=1;P0=0x99;//送段码dula=0;delay(2);P0=0xff;//送位数据前关闭所有显示,防止打开位选锁存后段选数据通过位选锁存器wela=1;P0=0x01;//送位码/*0x00000000006个数码管全部不亮0x0100000001从左往右第1位都亮0x0300000011前2位都亮0x0700000111前3位都亮0x0f00001111前4位都亮0x1f00011111前5位都亮0x3f00111111前6位都亮//0x7f01111111前6位亮0x2000100000从左往右第6位亮0x1000010000从左往右第5位亮0x0800001000从左往右第4位亮0x0400000100从左往右第3位亮0x0200000010从左往右第2位亮0x0100000001从左往右第1位亮*/wela=0;delay(2);/*delay(1000);P1=~P1;*/}}㈡:动态方式稳定显示6个数字:‘123456’#includereg52.h#defineuintunsignedint#defineucharunsignedcharsbitdula=P2^6;sbitwela=P2^7;ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};voiddelayms(uint);voidmain(){while(1){dula=1;P0=table[1];dula=0;P0=0xff;wela=1;P0=0x01;wela=0;delayms(500);//改小延时时间,即成为动态显示了。改到10ms时仍有闪烁感,改成1ms~5ms内较为合适。dula=1;P0=table[2];dula=0;P0=0xff;wela=1;P0=0x02;wela=0;delayms(500);dula=1;P0=table[3];dula=0;P0=0xff;wela=1;P0=0x04;wela=0;delayms(500);dula=1;P0=table[4];dula=0;P0=0xff;wela=1;P0=0x08;wela=0;delayms(500);dula=1;P0=table[5];dula=0;P0=0xff;wela=1;P0=0x10;wela=0;delayms(500);dula=1;P0=table[6];dula=0;P0=0xff;wela=1;P0=0x20;wela=0;delayms(500);}}voiddelayms(uintxms){uinti,j;for(i=xms;i0;i--)for(j=110;j0;j--);}/******************************************************************voidxianshi()//显示函数{uchari;for(i=0;i6;i++){P0=wen[i];//位选wei=1;//开74HC573锁存wei=0;//关74HC573锁存P0=huancun[i];//段选duan=1;duan=0;P0=0xff;//消影delay(5);}}voidinit(){uchari;TMOD=0x01;TH0=(65536-50000)/256;//10ms定时初值(T0计时用)TL0=(65536-50000)%256;TR0=1;//T0计时关断ET0=1;//T0中断允许位关断EA=1;//开总中断for(i=0;i6;i++){huancun[i]=shu[i];//段选送缓存}}voidmain(){init();while(1){xianshi();}}voidtime_intt0(void)interrupt1//50ms中断{uchart,i,j;TH0=(65536-50000)/256;//重置初值TL0=(65536-50000)%256;t++;if(t==20)//1秒到50ms*20=1s{t=0;j++;//j+1for(i=0;i6;i++)//使段选数据移位输入缓存{huancun[i]=shu[i+j];}if(j9)//移到最后面回到初始状态(即显示第8位后的第9位就是回到原来的第1位循环){j=0;}}}*******************************************************************/㈢:6位共阳数码管循环显示0123456789ABCDEF,六个数码管是连续不同的六个数#includereg52.h#defineuintunsignedint#defineucharunsignedcharcodeucharshu[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳数码管段选码(0-f)//ucharcodeDIS_BIT[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//数码管位选(8位)/*codeucharshu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴数码管段选码(0-f)*/codeucharwen[]={0x01

1 / 18
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功