流水灯实验
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
实验一 流水灯实验 一、 实验目的
(1)简单I/O引脚的输出
(2)掌握软件延时编程方法
(3)简单按键输入捕获判断
二、实验实现的功能
(1)按下KEY1键12个二极管点亮,并闪烁
(2)按下KEY2键按照顺时循环依次针点亮发光二极管
(3)按下KEY3键按照逆时针循环依次点亮发光二极管 三、系统硬件设计
(,)单片机最小系统部分
(,)电源部分
(,)人机界面部分
二极管部分 按键部分 (,)串口通讯部分
四、系统软件设计
实验编程如下:
#include
#include #define uchar unsigned char #define uint unsigned int
uchar tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xfb,0xf7,0xef,0xdf}; // 12支二
极管顺时针点亮的代码
uint i,j,k;
uchar m,n;
sbit H1=P3^6; //对应行1
sbit H2=P3^7; //对应行2
sbit L1=P0^5; //对应列
sbit L2=P0^6;
sbit L3=P0^7;
/***延时函数***/
void delay(uint k)
{
uint i,j; //定义局部变量ij
for(i=0;i0;j--)
{
P3=tab[n];
delay(300);
n--;
}
P3=0xff;
m=7; //前8支二极管逆时针方向依次点亮
for(j=8;j>0;j--)
{
P2=tab[m];
delay(300);
m--;
}
P2=0xff;
}
/**********按键扫描**********/
void keyscan()
{
uchar temp=1;
H1=0;
H2=1;
L1=1;L2=1;L3=1; //检测是否有按键按下
if(L1==0)delay(5); //如果KEY1键按下,二极管闪烁
if(L1==0)
while(temp)
{ H1=0;
H2=1;
L2=1;L3=1; //检测是否有按键按下
temp=L2&L3;
shanshuo();
}
if(L2==0)delay(5);//如果KEY2键按下,顺时针点亮
if(L2==0)
while(temp)
{ H1=0;
H2=1;
检测是否有按键按下 L1=1;L3=1; //
temp=L1&L3;
zhengzhuan();
}
if(L3==0)delay(5); //如果KEY3键按下,二极管逆时针点亮
if(L3==0)
while(temp)
{ H1=0;
H2=1;
L1=1;L2=1; //检测是否有按键按下
temp=L1&L2;
fanzhuan();
}
}
/***主函数***/
main()
{
while(1)
{
keyscan();
}
}
五、实验过程中遇到的问题及解决方法
(,)根据本实验硬件设计,要想点亮二极管,需要使与该二极管接通的管脚为低电平;
(,)由于,,支二极管前,支接在,,口,后,支接在,,口,故在正时针和逆时针依次点亮二极管时应注意,,口和,,口的衔接,如在正时针旋转时,第,个二极管点亮的语句是,,,,,,,,,,第,个二极管点亮的语句是,,,,,,,,,,所以在两个语句之间应加一句,,,,,,,,使第,个二极管熄灭;
(,)在写按键扫描程序时,在检测到有按键按下时,应加一条延时语句,否则按键的性能不稳定;
(,)在循环时需注意循环条件,在 keyscan()函数中,如果检测到有,,,,,,中有按键按下,则循环执行该按键的功能,直到有另外一个按键按下,则循环执行另外按键的功能。
指导老师签字:
日期: