/****************************************************************************************************************************/
/* 功能描述:2个573驱动6位数码管(共阴)的子程序
输入参数:void display(unsigned char a, unsigned char num)
a:显示位数,
num:待显示的数字
管脚分配:单片机 P0.0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~P0.7 P2.6
| | | | | | | | |
| | | | | | | | |
573(1) 2 3 4 5 6 7 8 9 11 1 10 20
19 18 17 16 15 14 13 12 DULA GND GND VCC
| | | | | | | |
| | | | | | | |
数码管 8 2 3 5 4 7 10 9
(a) (b) (c) (d) (e) (f) (g) (dp)
单片机 P0.0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~P0.7 P2.7
| | | | | | | | |
| | | | | | | | |
573(2) 2 3 4 5 6 7 8 9 11 1 10 20
19 18 17 16 15 14 13 12 WELA GND GND VCC
| | | | | | | |
| | | | | | | |
数码管 1 6 1 6 1 6
WE1 WE2 WE3 WE4 WE5 WE6
输出参数:无
作 者:
地 点:汽车电子实验室(1)-B208
版 本 号:2个573驱动6位数码管
日 期:2009年7月6日
注意事项:
应用举例:
#include<reg52.h>
#include<shumaguan.h>
void main()
{
while(1)//死循环;实际上6个数码管是轮流显示的,即动态显示
{
display(1,1);delay(2); //第1位显示数字1;延时2ms
display(2,2);delay(2); //第2位显示数字2;延时2ms
display(3,3);delay(2); //第3位显示数字3;延时2ms
display(4,4);delay(2); //第4位显示数字4;延时2ms
display(5,5);delay(2); //第5位显示数字5;延时2ms
display(6,6);delay(2); //第6位显示数字6;延时2ms
}
}
运行结果:
654321
*/
/*****************************************************************************************************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
uchar code tableduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar code tableduanxs[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //带小数点0~9的代码
uchar code tablewei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
void display(uchar a, uchar num) //a为显示位数,num为待显示的数字
{
switch(a)
{
case 6:
dula=1;P0=tableduan[num],dula=0;//选通段;送数据num;锁存数据num;
wela=1;P0= tablewei[0];wela=0;break;// 选通位;指定第6个数码管显示;锁存位状态;
case 5:
dula=1;P0=tableduan[num],dula=0;//选通段;送数据num;锁存数据num;
wela=1;P0=tablewei[1];wela=0;break;// 选通位;指定第5个数码管显示;锁存位状态;
case 4:
dula=1;P0=tableduan[num],dula=0;//选通段;送数据num;锁存数据num;
wela=1;P0=tablewei[2];wela=0;break;// 选通位;指定第4个数码管显示;锁存位状态;
case 3:
dula=1;P0=tableduan[num],dula=0;//选通段;送数据num;锁存数据num;
wela=1;P0=tablewei[3];wela=0;break;// 选通位;指定第3个数码管显示;锁存位状态;;
case 2:
dula=1;P0=tableduan[num],dula=0;//选通段;送数据num;锁存数据num;
wela=1;P0=tablewei[4];wela=0;break;// 选通位;指定第2个数码管显示;锁存位状态;;
case 1:
dula=1;P0=tableduan[num],dula=0;//选通段;送数据num;锁存数据num;
wela=1;P0=tablewei[5];wela=0;break;// 选通位;指定第1个数码管显示;锁存位状态;
default: break;
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
评论0
最新资源