|
大學剛剛學單片機沒多久,老師要求做一個程序,數碼管計時交通燈的[img=0,1]file:///C:\Users\boom\Documents\Tencent Files\775481073\Image\Group\5E[A0ZEWM)%%A8]5U~3MHRM.jpg[/img],大部分程序老師已經改了,只是要按照圖片里要求閃爍的做不出來,求幫助,急用,下面是我編好的,這些是不能改的,只能往里面加程序。求大神幫忙指導一下那兩個閃爍的部分,樓主新手不太會#include "stc15.h"
#include "intrins.h"
unsigned char miao;
unsigned char i;
unsigned char code DM[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40,0x00}; //共陰段碼
// 0 1 2 3 4 5 6 7 8 9
unsigned char code WM[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //位碼
unsigned char code daojs[]={22,3,27,3};
unsigned char code jtd[]={0XF3,0XEB,0XDE,0XDD};
sbit SER_595=P3^2; //pin 14 SER data input
sbit RCLK_595=P3^3; //pin 12 RCLK store(latch)clock
sbit SRCLK_595=P3^5; //pin 11 SRCLK shift data clock
void send_595(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
dat <<= 1;
SER_595= CY;
SRCLK_595 = 1;
SRCLK_595 = 0;
}
}
void DisplayScan(unsigned char disp_index,unsigned char disp_data)
{
send_595(WM[disp_index]); //位碼
send_595(DM[disp_data]); //數碼管顯示數字的段碼
RCLK_595=1; //595鎖存輸出數據的時鐘信號上升沿有效
RCLK_595=0;
}
void Delay4ms() //@11.0592MHz
{
unsigned char i, j;
_nop_();
i = 44;
j = 4;
do
{
while (--j);
} while (--i);
}
void Delay2ms() //@11.0592MHz
{
unsigned char i, j;
_nop_();
_nop_();
i = 22;
j = 128;
do
{
while (--j);
} while (--i);
}
void xianshi()
{
if(miao>15)
{
DisplayScan(0,11);
Delay2ms();
DisplayScan(1,11);
Delay2ms();
}
else
{
if(miao>=10)
{
DisplayScan(0,miao/10);
Delay2ms();
DisplayScan(1,miao%10);
Delay2ms();
}
else
{
DisplayScan(1,miao%10);
Delay4ms();
}
}
}
void main()
{
unsigned char i,j;
while(1)
{
miao=daojs;
while(miao!=0)
{
P0=jtd;
for(j=0;j<250;j++)
{
xianshi();
}
miao--;
}
i++;
if(i>3)(i=0);
}
}
[img]file:///C:\Users\boom\Documents\Tencent Files\775481073\Image\Group\5E[A0ZEWM)%%A8]5U~3MHRM.jpg[/img]
|
|