- #include <reg52.h>
- #include <intrins.h>
- #include <stdlib.h>
- #define uint unsigned int
- #define uchar unsigned char
- uchar code table[]= //共阳数码管编码0~F
- {0xc0,0xf9,0xa4,0xb0,
- 0x99,0x92,0x82,0xf8,
- 0x80,0x90,0x88,0x83,
- 0xc6,0xc0,0x86,0x8e};
- uchar t;
- uint a,b,c;
- sbit key1=P2^0;
- sbit D1=P1^1;
- sbit D2=P1^2;
- sbit D3=P1^3;
- void delay(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void display()
- {
- bai=num/100; //输出百位
- shi=num%100/10;//输出十位
- ge=num%10; //输出个位
- D1=0;
- P0=table[a];
- delay(10);
- P0=0xff;
- D1=1;
- D2=0;
- P0=table[b];
- delay(10);
- P0=0xff;
- D2=1;
- D3=0;
- P0=table[c];
- delay(10);
- D3=1;
- }
- void key()
- {
- if(key1==0)
- {
- delay(10);
- if(key1==0)
- {
- while(!key1);
- TR0=~TR0;
- srand(t); //初始化种子,函数srand(t)在stdlib.h
- }
- }
- }
- void main()
- {
- // EX0=1; //使能外部中断0
- // IT0=1; //设置外部中断0触发方式为低脉冲
- num=0;
- EA=1; //开总中断
- ET0=1;
- TMOD=0x01; //设置T1工作方式
- TH0=(65536-45872)/256; //50ms定时
- TL0=(65536-45872)%256;
- TR0=0;
- while(1)
- {
- key();
- display();
- }
- }
- void T0_time() interrupt 1
- {
- // ET0=0; //首先关闭中断
- TH0=(65536-50000)/256; //然后重新装入预制值
- TL0=(65536-50000)%256;
- // ET0=1; //打开T0中断
- t++;
- if(t==20) //如果到了20次,说明1000ms时间到
- {
- t=0; //然后把t清零
- }
- a=rand()%12; //获得0~12之间的随机数,函数rand()在stdlib.h
- b=rand()%12;
- c=rand()%12;
- //randdata=rand()%(300-200+1)+200 //获得200~300之间的随机数,函数rand()在stdlib.h
- }
- /*
- EX_INT0() interrupt 0 using 1 //外部中断0服务函数
- {
- if(TR0==1) //判断当前定时计数器的状态
- {
- TR0=0;
- }
- else
- {
- TR0=1;
- srand(t); //初始化种子,函数srand(t)在stdlib.h
- }
- }
- */
复制代码 |