📄 led._c
字号:
//******************************************************************************
// *
// FileName : led.c ICCAVR V6.31A编译 *
// Function : 8个LED灯闪烁显示,入门级试验 *
// Date : 2006-12-11 *
// Version : 1.0 *
// *
// Author : 开关电源 hongtusy@163.com *
// Company : 电子信息技术咨询网 http://www.itsn.cn *
// *
//***************************描述与记事*****************************************
//实验板的AVR程序,C或AVR入门级试验,8个LED灯闪烁显示。
//说明:使用延迟程序,间歇点亮或关闭LED灯。
//具体电路可参照使用指南里的说明。PC口输出1,LED即点亮。
//使用器件:ATMEGA8535,可更换。 使用默认的片内RC振荡器,1MHz。
//使用的开关:SW1-1~8.SW6-1打开,SW3-8为系统复位端。
//记事:
//******************************************************************************
#include <iom8535v.h> //头文件,ATmega8535单片机的寄存器定义
#include "macros.h" //可以使用NOP()以及SEI()等指令.
typedef unsigned char uchar; //宏
typedef unsigned int uint;
/************************************************
函 数 名: DelaymS()
功 能: 毫秒级延时函数
输入参数: 延迟时间/系统晶体
输出参数: 做相应的延迟处理
描 述: /
***********************************************/
void DelaymS (uint i) //延时函数,参数i为延时时间
{
uint j,k; //双重延时
for (j=0;j<i;j++)
{
for (k=0;k<=50;k++);
}
}
//************************main***************
void main(void) //主程序
{
DDRC=0xff; //PC口为输出
while(1) //如果条件为真,1=真,所以死循环执行嵌套部分。
{
PORTC=0xff; //点亮LED
Delay4740uS (); //延迟程序
PORTC=0x00; //关闭LED
Delay4740uS (); //延迟程序
}
}
#if 0
/************************************************
函 数 名: Delay882uS()
功 能: 882微秒级延时函数
输入参数:
输出参数:
描 述: 精确延迟函数
***********************************************/
void Delay882uS (uchar i)
{
uchar j;
for (j=0;j<i;j++)
{
asm("del: ldi r16,0xFF ")
asm("loop1: dec r16 ")
asm(" nop ")
asm(" nop ")
asm(" brne loop1 ")
asm(" nop ");
}
}
/************************************************
函 数 名: Delay4740uS()
功 能: 4740微秒级延时函数
输入参数: 晶振1M,机器周期为1uS。
输出参数: 延迟时间T=a(4b+3)+c
描 述: 在C中调汇编函数,使用r24,r25不必作特殊的保护工作。
***********************************************/
void Delay4740uS (void)
{
asm(" ldi r24,110 ") //t=1 参数:a
asm("loop1: ldi r25,10 ") //t=1 参数:b
asm("loop2: dec r25 ") //t=1
asm(" nop ") //t=1,校准用,需改动公式。
asm(" brne loop2 ") //t=2/1
asm(" dec r24 ") //t=1
asm(" brne loop1 ") //t=2/1
asm("nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop\n nop"); //t=1,校准用,参数:c
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -