|
各位大佬,2個595驅(qū)動八位數(shù)碼管動態(tài)顯示,為什么不加延時一樣可以正常顯示呢?用兩個573的時候每位之間應(yīng)該是有5ms的延時,我理解是在程序執(zhí)行移位等操作的時候消耗了一定時間,已經(jīng)起到了延時的作用,這樣理解正確嗎?還是有其它的解釋?本人初學(xué),小白都算不上,請各位指導(dǎo),萬分感謝。
單片機源程序如下:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char code fseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段選碼表
unsigned char code segbit[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//位選碼表
unsigned char disbuf[8]={0,0,0,0,0,0,0,0};
sbit Dio=P1^0;
sbit Rclk=P1^1;
sbit Sclk=P1^2;
uint num;
uchar i;
//void delay(uchar z)
//{
// uchar x,y;
// for(x=114;x>0;x--)
// for(y=z;y>0;y--);
//}
//發(fā)數(shù)據(jù),段8位,位8位
void SendByte(uchar wei,uchar duan)
{
uchar a,b;
a=fseg[duan];
b=segbit[wei-1];
for(i=0;i<8;i++)
{
Sclk=0;
if(a&0x80)
Dio=1;
else
Dio=0;
Sclk=1;
a<<=1;
}
for(i=0;i<8;i++)
{
Sclk=0;
if(b&0x80)
Dio=1;
else
Dio=0;
Sclk=1;
b<<=1;
}
Rclk=0;
Rclk=1;
}
void main ()
{
while(1)
{
SendByte(1,1);
SendByte(2,2);
SendByte(3,3);
SendByte(4,4);
SendByte(5,5);
SendByte(6,6);
SendByte(7,7);
SendByte(8,8);
}
}
|
|