只要用到一片164 就够了,作动态扫描,下面程序是两个数码管动态扫描,164并行输出口再接一片功率驱动芯片,如TD62083。 程序如下: /**************************************/ /* 74LS164 数码管动态显示*/ /**************************************/ //-------------------------------------库函数声明,管脚定义------------ #include
#define uchar unsigned char sbit simuseri_CLK=P1^1; //用P1^1 模拟串口时钟 sbit simuseri_DATA=P1^0; //用P1^0 模拟串口数据 sbit a0=ACC^0; unsigned char code dis_code[11]={0x28,0x7E,0xa2,0x62, //查表显示 0, 1、、9 0x74,0x61,0x21,0x7A,0x20,0x60, 0x01}; uchar numer,temp; uchar ge,shi; //---------------------------------------------------------------------------- // 函数名称:out_simuseri // 输入参数:data_buf // 输出参数:无 // 功能说明:8 位同步移位寄存器,将 data_buf 的数据逐位输出到simuseri_DATA //---------------------------------------------------------------------------- void out_simuseri(uchar data_buf) { uchar i; i=8; ACC=data_buf; do { simuseri_CLK=0; simuseri_DATA=a0; simuseri_CLK=1; ACC=ACC>>1; } while(--i!=0); } /************************************/ void delay(uchar ms) //延时程序 { uchar i; while(ms--) { for (i=0;i<125;i++); }} /***********************************/ void main() { uchar m; while(1) { for(temp=0;temp<99;temp++) { ge=temp/10; shi=temp%10; for(m=0;m<20;m++) //显示频率200ms 加1 次 { P2_0=0; //位段码 numer=dis_code[ge]; out_simuseri(numer); //个位移位显示 delay(5); P2_0=1; P2_1=0; numer=dis_code[shi]; //十位移位 out_simuseri(numer); delay(5); P2_1=1; } m=0; } } } /****************************************/ #i nclude #define uint unsigned int #define uchar unsigned char sbit DAT=P1^1; //模拟串口数据发送端 sbit CLK=P1^2;//模拟时钟控制端 uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};//0-9,-,全灭 (共阳字段表) void sendbyte(uchar byte) { uchar num,c; ...