UID478796
威望20
金钱19800
交易诚信度15
主题175
帖子910
注册时间2008-3-18
最后登录2025-5-1
高级会员
   
交易诚信度15
注册时间2008-3-18
|

楼主 |
发表于 2018-10-17 12:12
|
显示全部楼层
本帖最后由 乡村猎手 于 2018-10-17 12:34 编辑
搞明白了怎么显示了,先写个显示的demo显示数字0,为了便于仿真,不停输出,实际使用的时候,是可以锁在的,不改变数字时,不用写入,然后再用proteus仿真一下,因为proteus里没有SAA1060这个元件,要不可直接看数码管显示,现在只能看虚拟仪器里的时序了,代码附后,代码写得效率可能不是很好,但看仿真的结果应该是没有问题。
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
sbit yData = P2^0;
sbit yDLEN = P2^2;
sbit yCLK = P2^1;
const int dailyCount = 200;
void delay(unsigned int i)
{
while(i--);
}
void disp(unsigned int num )
{
unsigned char i ;
unsigned char dispA[20];
unsigned char dispB[20];
unsigned char num1;
unsigned char num2;
unsigned char num3;
unsigned char num4;
unsigned char segR[10] ; //右
unsigned char segL[10]; //左
//左
segL[0] = 0x12;
segL[1] = 0xFA;
segL[2] = 0x0E;
segL[3] = 0x2A;
segL[4] = 0xE2;
segL[5] = 0x63;
segL[6] = 0x2A;
segL[7] = 0x7A;
segL[8] = 0x02;
segL[9] = 0x22;
//右
segR[0] = 0x88;
segR[1] = 0xEB;
segR[2] = 0x85;
segR[3] = 0x83;
segR[4] = 0xE2;
segR[5] = 0x92;
segR[6] = 0x90;
segR[7] = 0xCB;
segR[8] = 0x80;
segR[9] = 0x82;
num1=num /1000;
num2=(num /100)%10;;
num3=(num /10)%100;;;
num4=num%10;
dispA[0] = 0;
dispB[0] = 0;
for (i=0;i<8;i++)
{
dispA[i+1] = (segR[num2]>>i)&0x01;
dispB[i+1] = (segR[num1]>>i)&0x01;
dispA[i+9] = (segL[num4]>>i)&0x01;
dispB[i+9] = (segL[num3]>>i)&0x01;
}
dispA[17] = 1;
dispB[17] = 0;
dispA[18] = 0;
dispB[18] = 0;
dispA[19] = 0;
dispB[19] = 0;
yCLK = 1;
for (i = 0;i<20;i++)
{
yCLK = 1;
yData = dispA;
delay(2);
if(i>17)
{yDLEN=0;}
else
{yDLEN=1;}
delay(dailyCount);
yCLK = 0 ;
delay(dailyCount);
}
yCLK=0;
yData=0;
yDLEN=0;
delay(dailyCount*10);
for (i = 0;i<20;i++)
{
yCLK = 1;
yData = dispB;
delay(dailyCount/10);
if(i>17)
{yDLEN=0;}
else
{yDLEN=1;}
delay(dailyCount);
yCLK = 0 ;
delay(dailyCount);
}
yCLK=0;
yData=0;
yDLEN=0;
delay(dailyCount*10);
}
void main()
{
while(1)
{
delay(4000);
disp(0);
}
}
|
|