单片机同时控制点阵显示汉字和数码管显示时钟

单片机同时控制点阵显示汉字和数码管显示时钟

这个你的硬件是怎么接线的呢 ,。点阵和数码管分开用两个IO口的,还是使用的373或者244扩展的呢 。。。最好是把图贴出来哦,,,不然及时我写出来了,你可能也用不了。

我说下原理吧 ,就是分时刷新数据,,数码管动态刷新如果你不是用的延时进行的刷新,而是使用的定时器中断刷新的话,这个功能对你来说不会太难的。。。

8*8点阵可以看做是 8个数码管,, 这样一说 你应该就懂了吧 。也就是多了几个数码管而已,,还是按照数码管那样进行动态刷新就可以了啊
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-05-30
#include"reg51.h"
#include"intrins.h"
#define uchar unsigned char
#define uint unsigned int
uchar num=0;

long i=0;
uint k; uint k1; uint k2;
uchar code nu1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar nu2[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
sbit ada=P2^2;
sbit adb=P2^3;
sbit adc=P2^4;
sbit k3=P3^2;
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;
uchar lw[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
uchar ll[]={0x00,0x41,0x41,0x7F,0x41,0x41,0x00,0x10,0x38,0x7C,0x3E,0x1F,0x3E,0x7C,0x38,0x10,
0x00,0x7C,0x02,0x01,0x01,0x02,0x7C,0x00};
/*******************************************************************************
* 函数名 : Hc595SendByte(u8 dat)
* 函数功能 : 向74HC595发送一个字节的数据
* 输入 : 无
* 输出 : 无
*******************************************************************************/
void tuxiang(uchar dat)
{
uchar a;
SRCLK=0;
RCLK=0;
for(a=0;a<8;a++)
{
SER=dat>>7;
dat<<=1;
SRCLK=1;
_nop_();
_nop_();
SRCLK=0;
}
RCLK=1;
_nop_();
_nop_();
RCLK=0;
}
//sbit k1=P3^3;

void delay( );//延时
void delay1( );//消抖
void main()
{
ada=0;
adb=0;
adc=0;
TMOD=0x01;
TH0=0xFE;
TL0=0x0C;
TR0=1;

EA=1;//总中断允许
ET0=1;//允许定时器0中断

while(1)
{ if(k2==1000)
{ k2=0;
k1++;
if(k==2000)
{
k=0;
i++;
nu2[0]=nu1[i%10];
nu2[1]=nu1[i/10%10];
nu2[2]=nu1[i/100%10];
nu2[3]=nu1[i/1000%10];
nu2[4]=nu1[i/10000%10];
nu2[5]=nu1[i/100000%10];
nu2[6]=nu1[i/1000000%10];
nu2[7]=nu1[i/10000000%10];
} }
}
}
void zhongduan() interrupt 1
{
TH0=0xFE;
TL0=0x0C;
k++; k2++;
switch(num++%16)
{
case 0: ada=0; adb=0; adc=0; P0=nu2[0];
break;
case 1: ada=1; adb=0; adc=0; P0=nu2[1];
break;
case 2: ada=0; adb=1; adc=0; P0=nu2[2];
break;
case 3: ada=1; adb=1; adc=0; P0=nu2[3];
break;
case 4: ada=0; adb=0; adc=1; P0=nu2[4];
break;
case 5: ada=1; adb=0; adc=1; P0=nu2[5];
break;
case 6: ada=0; adb=1; adc=1; P0=nu2[6];
break;
case 7: ada=1; adb=1; adc=1; P0=nu2[7];
break;
case 8:
P0=lw[0]; //位选
tuxiang(ll[(0+k1)%24]); //发送段选数据

case 9:
P0=lw[1]; //位选
tuxiang(ll[(1+k1)%24]); //发送段选数据
break;
case 10:
P0=lw[2]; //位选
tuxiang(ll[(2+k1)%24]); //发送段选数据

break;
case 11:
P0=lw[3]; //位选
tuxiang(ll[(3+k1)%24]); //发送段选数据

tuxiang(0x00); //消隐
break;
case 12:
P0=lw[4]; //位选
tuxiang(ll[(4+k1)%24]); //发送段选数据

break;
case 13:
P0=lw[5]; //位选
tuxiang(ll[(5+k1)%24]); //发送段选数据

break;
case 14:
P0=lw[6]; //位选
tuxiang(ll[(6+k1)%24]); //发送段选数据
break;
case 15:
P0=lw[7]; //位选
tuxiang(ll[(7+k1)%24]); //发送段选数据
break;
}
}
/*case 0: ada=0; adb=0; adc=0; P0=nu2[0];
break;
case 1: P0=lw[0]; //位选
tuxiang(ll[(0+k1)%24]); //发送段选数据
break;
case 2:ada=1; adb=0; adc=0; P0=nu2[1];
break;
case 3:P0=lw[1]; //位选
tuxiang(ll[(1+k1)%24]); //发送段选数据
break;
case 4:ada=0; adb=1; adc=0; P0=nu2[2];
break;
case 5:P0=lw[2]; //位选
tuxiang(ll[(2+k1)%24]);
break; //发送段选数据
case 6:ada=1; adb=1; adc=0; P0=nu2[3];
break;
case 7: P0=lw[3]; //位选
tuxiang(ll[(3+k1)%24]); //发送段选数据

tuxiang(0x00); //消隐
break;
case 8:ada=0; adb=0; adc=1; P0=nu2[4];
break;

case 9: P0=lw[4]; //位选
tuxiang(ll[(4+k1)%24]); //发送段选数据

break;

case 10: ada=1; adb=0; adc=1; P0=nu2[5];
break;

case 11: P0=lw[5]; //位选
tuxiang(ll[(5+k1)%24]); //发送段选数据

break;

case 12:ada=0; adb=1; adc=1; P0=nu2[6];
break;

case 13: P0=lw[6]; //位选
tuxiang(ll[(6+k1)%24]); //发送段选数据
break;

case 14:ada=1; adb=1; adc=1; P0=nu2[7];
break;

case 15:
P0=lw[7]; //位选
tuxiang(ll[(7+k1)%24]); //发送段选数据
break;*/
相似回答