⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 a1.c

📁 一个关于AVR单片机的C语言程序 实现秒表的功能与流水灯的显示 非常适合初学者 对学习单片机有很大的帮助
💻 C
字号:
#include<iom16v.h>
void delay(int i)//定义延迟子函数
{int j;
for(;i>0;i--)//利用循环实现延迟
{
for(j=0;j<500;j++);
}
}



void display(time,dot)//定义点亮数码管的子函数
{

char A[10]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};//共阳极的数码管0~9的字形码

PORTA=0X40;    //PA6端口寄存器置1,控制最右边的数码管的工作
PORTB=A[time%10];   //点亮最右边的数码管
delay(2);   //维持点亮约2ms
PORTB=0xff;  //PB端口的寄存器全部置1
 
PORTA=0X80;  //PA7端口寄存器置1,控制右侧第二个数码管的工作
PORTB=A[(time%60)/10-(time%10)/10];  //点亮右侧第二个数码管
delay(2); //维持点亮约2ms
PORTB=0xff; //PB端口的寄存器全部置1

PORTA=0X10;  //PA4端口寄存器置1,控制左侧第二个数码管的工作
PORTB=A[(time/60)%10];  //将左侧第二个数码管点亮
delay(2);  //维持点亮约2ms
PORTB=0xff;  //PB端口的寄存器全部置1


PORTA=0X08; //PA3端口寄存器置1,控制左侧第一个数码管的工作
PORTB=A[(time/600)]; //点亮最左侧第一个数码管
delay(2); //维持点亮约2ms
PORTB=0xff; //PB端口的寄存器全部置1

if(dot) //点亮冒号
{

PORTA=0X20;
PORTB=0X7F;
delay(2);

}

}



void LED()  //LED交替闪烁约500ms的子函数
{
int i,time;//定义变量
PORTD=0XAA;//点亮LED1、3、5、7
for(i=0;i<100;i++)
{
display(time);
}
for(i=0;i<100;i++)
{
display(time);
}
// 利用以上两个for循环实现LED1、3、5、7维持点亮约500ms
PORTD=0X55;//点亮LED2、4、6、8
for(i=0;i<100;i++)
{
display(time);
}
for(i=0;i<100;i++)
{
display(time);
}
//同样利用以上两个for循环实现LED1、3、5、7维持点亮约500ms
}



void main()// 定义主函数
{
int i, dot, time=0;//定义变量
DDRA=0XFF;//将四组I/O均设为输出
DDRB=0XFF;
DDRC=0XFF;
DDRD=0XFF;
while(1)//无限循环
{
for(i=0;i<100;i++)
{
display(time,1);//调用点亮数码管的子函数,并将冒号点亮
}
for(i=0;i<100;i++)//在用一个for循环以使数码管不至于变化过快
{
display(time,0);//再次调用点亮数码管的子函数,并将冒号熄灭
}

time++;
if(time>3600)//限制最大值,达到最大值后自动归零,实现循环
{
time=0;
}

LED();//调用LED交替闪烁约500ms的子程序


}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -