仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
粗糙的流星雨代码,每隔0.3下落一条
单片机源程序如下:
- #include<reg52.h>
- #include<stdlib.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define DATA P0
- uchar Col_w[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
- uchar RowLed[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
- uchar DelayTab[]={25,21,16,12,8,5,2,1};
- sbit SH595 =P1^2;
- sbit ST595 =P1^1;
- sbit DA595 =P1^0;
- void delayms(uint x)
- {
- uint j;
- for(;x>0;x--)
- for(j=0;j<113;j++);
- }
- void SIPO(uchar dat){
- uchar i;
- SH595 = 0;
- for(i=0;i<8;i++){
- if(dat&0x80) DA595 = 1;
- else DA595 = 0;
- dat = dat<<1;
- SH595=0;_nop_();_nop_();SH595=1;
- }
- ST595=0;_nop_();_nop_();ST595=1;
- }
- void Shower(uchar Col_wVal){
- uchar i;
- for(i=0;i<8;i++){
- SIPO(RowLed);
- P0 = Col_wVal;
- delayms(DelayTab);
- }
- SIPO(0xff);
- delayms(300);
- }
- void main(){
- uchar uRandNum;
- while(1){
- uRandNum=rand()%8;
- Shower(Col_w[uRandNum]);
- }
- }
复制代码
Keil代码与Proteus仿真下载:
仿真代码.7z
(37.21 KB, 下载次数: 36)
|