请用定时器实现流水灯,定时间隔不限,肉眼可见流水灯样式即可proteus工程文件夹为test12led

2020 9.30号

我加入的机器人实验平台由于人数过多,因此当晚进行3小时的实验室考核,以下是单片机题目及自己提交的代码。

test1
请用定时器实现流水灯,定时间隔不限,肉眼可见流水灯样式即可proteus工程文件夹为test12led

在这里插入图片描述test1图

#include<reg52.h>
#define unchar unsigned char
#define unint unsigned int
unsigned char times=0,alltime=0;
unsigned char rtimes=0;

void main()
{
alltime=10;
TMOD =0x01;
TH0 =(65535-46080)/256;
TL0 =(65535-46080)%256;
EA=1;
ET0=1;
P0=0xff;
TR0=1;
while(1)
{
;
}
}

void Timer0() interrupt 1
{
TH0=(65535-46080)/256;
TL0=(65535-46080)%256;
if(++times==alltime)
{
times=0;
P0=~(1<<rtimes);
if(rtimes<7)
rtimes++;
else
rtimes=0;
}
}

test2
请用外部中断实现流水灯的样式切换,切换样式至少三种,(不要求复杂规矩,实现即可),proteus工程文件同上

在这里插入图片描述test2图

#include<reg52.h>
#define unchar unsigned char
#define unint unsigned int

unsigned char times=0,alltime=0;
unsigned char rtimes=0;
unsigned char fMode=1;

void main()
{
alltime=10;
TMOD =0x01;
TH0 =(65535-46080)/256;
TL0 =(65535-46080)%256;
ET0=1;
P0=0xff;
IT0=1;
EX0=1;
TR0=1;
EA=1;
while(1)
{;}
}

void Mode1()
{
if(++times==alltime)
{
times=0;
P0=~(1<<rtimes);
if(rtimes<7)
rtimes++;
else
rtimes=0;
}
}

void Mode2()
{
if(++timesalltime)
{
times=0;
if(rtimes>0)
rtimes–;
else
rtimes=8;
P0=~(1<<(rtimes-1));
}
}
void Mode3()
{
if(++times
alltime)
{
times=0;
P0=~P0;
}
}
void Mode4()
{
if(++timesalltime)
{
times=0;
P0=~P0;
}
}
void Mode5()
{
if(++times
alltime)
{
times=0;
P0=~(0x03<<rtimes);
if(rtimes>7)
rtimes++;
else
rtimes=0;
}
}
void Mode6()
{
if(++timesalltime)
{
times=0;
P0=~(0x07<<rtimes);
if(rtimes<7)
rtimes++;
else
rtimes=0;
}
}
void EX_INT0() interrupt 0
{
if(fMode<6)
fMode++;
else
fMode=1;
if(fMode
3)
P0=0x55;
if(fMode4)
P0=0xf0;
if(fMode
5)
P0=0xff;
if(fMode==6)
P0=0xff;
}
void Timer0() interrupt 1
{
TH0=(65535-46080)/256;
TL0=(65535-46080)%256;
switch(fMode)
{
case 1:Mode1();break;
case 2:Mode2();break;
case 3:Mode3();break;
case 4:Mode4();break;
case 5:Mode5();break;
case 6:Mode6();break;
}
}

在这里插入图片描述
实现按下按钮三种灯的转换
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
test3
单片机输出PWM波形,规定周期为20ms,用8两个外部中断按键实现波形占空比的调制(可缩进),以1ms为分度调制,proteus中示波器能够查看波形周期,单片机时钟频率为11.0592MHZ,proteus仿真工程文件夹为test3pwm
在这里插入图片描述test3图

#include<reg52.h>
#define unchar unsigned char
#define unint unsigned int

unsigned char alltime =0;
unsigned char rtime=10;
sbit PWM =P1^2;

void main ()
{
P3=0xff;
IT0=1;
IT1=1;
alltime =0;
TMOD=0x01;
TL0=0x66;
TH0=0xFC;
EA=1;
ET0=1;
EX0=1;
EX1=1;
TR0=1;
while(1)
{
;
}
}

void EX_INT0() interrupt 0
{
if(rtime<19)
rtime++;
}

void EX_INT1() interrupt 1
{
if(rtime>1)
rtime–;
}
void Timer0() interrupt 1
{
TL0=0x66;
TH0=0xFC;
if(alltime<19)
alltime++;
else
alltime=0;
if(alltime<rtime)
{
PWM=1;
}
else
PWM=0;
}

在这里插入图片描述
test4
用数码管显示加矩阵按键扫描完成一个可调时钟,数码管八格显示分别为hh.mm.ss(小时.分钟.秒)数码管的点字符十六进制码为0x7F,为矩阵按键定义功能,两个按键设定小时,两个按键设定分钟,两个按键设定秒,一个启动时钟按键,一个停止时钟按键,一个时钟/倒计时功能切换按键,proteus仿真文件为test4key.
数码管共阳极
真值表0~F
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e
在这里插入图片描述test4图

在这里插入图片描述
结语

成绩
第一题100
第二题100
第三题83
第四题0
在这里插入图片描述图5

总的排实验室第二名,说实话,我觉得很扯。就很扯。
三小时里面,就写了前三题,第四题没写。

从大一到外地读书至今已经变成大二的学生了,岁月如梭,在过去的一年多里,我一次家都没回,乃至这次国庆中秋同庆我都没有回去。

也不知道未来的日子会怎么样,就好好走下去吧。

猜你喜欢

转载自blog.csdn.net/tenju/article/details/108942463