51单片机晶体管显示学号变化
学号使用 202107051234 作为演示
流水显示
效果 重新一轮
代码如下 下面展示一些 流水显示的代码 。
#include<reg52.h>
#include<intrins.h>
void delay(unsigned int n)
{
unsigned int i=0,j=0;
for(i=0;i<n;i++)
for(j=0;j<123;j++);
}
void main()
{
int i=0,t=0,j,r,a=0,shu=0;
while(1){
r = t+a;
if(r>=13){r=r-13;}
P2 = dofly_WeiMa[i];
P0 = dofly_DuanMa[r];
delay(3);
i++;
t++;
if(t==8){t=0;}
if(i==8){i=0;}
if(shu==300){a = a+1;if(a==13){a=0;}shu=0;}
shu++;
}
}
循环显示
效果
然后开始下一轮循环
代码如下 下面展示一些 循环显示的代码 。
#include<reg52.h>
#include<intrins.h>
void delay(unsigned int n)
{
unsigned int i=0,j=0;
for(i=0;i<n;i++)
for(j=0;j<123;j++);
}
void main()
{
int i_2=0,shu_2=0,r_2,a_2=0;
while(1){
r_2 = i_2+a_2;
P2 = dofly_WeiMa[i_2];
P0 = dofly_DuanMa[r_2];
delay(3);
i_2++;
shu_2++;
if(i_2==8){i_2=0;}
if(shu_2==500){a_2=8;}
else if(shu_2==1000){a_2 = 0;shu_2 = 0;}
}
}
顺序显示
效果如下 依次循环
代码如下 下面展示一些 顺序显示的代码 。
#include<reg52.h>
#include<intrins.h>
void delay(unsigned int n)
{
unsigned int i=0,j=0;
for(i=0;i<n;i++)
for(j=0;j<123;j++);
}
void main()
{
int i_3 = 0;
while(1){
P2 = dofly_WeiMa[0];
P0 = dofly_DuanMa[i_3];
delay(300) ;
i_3++;
if(i_3==13){i_3=0;}
}
}
protues用仿真实现
仿真图如下 左边很多器件没有体现是因为与次实验无关
#include<reg52.h>
#include<intrins.h>
typedef unsigned char uchar;
typedef unsigned int uint;
unsigned char code dofly_DuanMa[]={0x5b,0x3f,0x5b,0x06,0x3f,0x07,0x3f,0x6d,0x06,0x5b,0x4f,0x66,0x00,0x00,0x00,0x00};
unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
sbit key1 = P3^2;
sbit key2 = P3^3;
sbit key3 = P3^7;
void delay(unsigned int n)
{
unsigned int i=0,j=0;
for(i=0;i<n;i++)
for(j=0;j<123;j++);
}
uint x = 3;
void main()
{
int i=0,t=0,j,r,a=0,shu=0;
int i_2=0,shu_2=0,r_2,a_2=0;
int i_3 = 0;
IE = 0X85;
IT0 = 1;
IT1 = 1;
while(1){
if(key3==0){x=3;}
if(x==0){
r = t+a;
if(r>=13){r=r-13;}
P2 = dofly_WeiMa[i];
P0 = dofly_DuanMa[r];
delay(3);
i++;
t++;
if(t==8){t=0;}
if(i==8){i=0;}
if(shu==300){a = a+1;if(a==13){a=0;}shu=0;}
shu++;
i_2=0;shu_2=0;a_2=0;
}
else if(x==1)
{
r_2 = i_2+a_2;
P2 = dofly_WeiMa[i_2];
P0 = dofly_DuanMa[r_2];
delay(3);
i_2++;
shu_2++;
if(i_2==8){i_2=0;}
if(shu_2==500){a_2=8;}
else if(shu_2==1000){a_2 = 0;shu_2 = 0;}
i=0;t=0;a=0;shu=0;
}
else{
P2 = dofly_WeiMa[0];
P0 = dofly_DuanMa[i_3];
delay(300) ;
i_3++;
if(i_3==13){i_3=0;}
i_2=0;shu_2=0;a_2=0;
i=0;t=0;a=0;shu=0;
}
}
}
void EX0_INT(void) interrupt 0
{
x=0;
}
void EX1_INT(void) interrupt 2
{
x=1;
}
|