呕心沥血,本人写的单片机例程-----多模式随机显示流水灯_流水灯高级篇

来源:互联网 发布:复合材料刚度矩阵 编辑:程序博客网 时间:2024/05/29 03:01

直接上代码,给实验室大一的培训。随手写了一些例程给他们参考。这个是利用的c标准库的随机函数,通过定时器来转换。实现一系列的流水灯模式。比较炫,嘿嘿。


/*

  多模式随机显示流水灯_流水灯高级篇
  原创 by xiaoguo
*/
#include<reg51.h>
#include<stdlib.h> //c头文件


#define _C_R(byte) ((byte<<1)|(byte>>7))
#define _C_L(byte) ((byte>>1)|(byte<<7))


#define DELAY 200


typedef unsigned char uchar;


int  numVal=0;
//01010101 10101010  11001100 10011001 11111110  11111100  1100001101001011  11110011 10001101 
uchar  ledMod[10]={0x55,0xaa,0xcc,0x99,0xfe,0xbc,0xc3,0x4b,0x73,0x8d};


void init_Timer0(); 


void delay(){
  int i,j;
i=100;
while(i--){
j=80;
while(j--);
}
}


void main(){
//uchar point=0;


srand(1000);  //给一个随机种子
init_Timer0();
P0=ledMod[rand()%10];
while(1){
if(numVal>=DELAY){
P0=ledMod[rand()%10];
//P0=ledMod[point%10];
numVal=0;
//point++;
}else{
P0=_C_R(P0);
delay();
}
}
}


void init_Timer0() //定时器初始化
{
    TMOD=0x01; //设置定时器0为工作方式1
TH0=(65536-5000)/256; //设定高8位计数
TL0=(65536-5000)%256; //设定低八位计数  总共是50ms时间
EA=1;
ET0=1;  // 开定时器0中断
TR0=1; //启动定时器0




}


void timer0(void) interrupt 1     //定时器0的中断服务程序 
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;


  numVal++;
}
0 0
原创粉丝点击