/****************************************************************
外部晶振8M
PA0~3:四位数码管的位选
PB0~7:数码管的8位段选
外部中断0用于计数
定时器0溢出中断的定时为1ms
说明 :检测到水流较小时,继电器延时1秒关闭
******************************************************************/
#include<iom16v.h>
#include<macros.h>
#define uchar unsigned char
#define uint unsigned int
char led_7[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //数码管段选
char position[4]={0xfe,0xfd,0xfb,0xf7};//数码管位选
uint sumnum=0; //用于记录1000ms内进入中断的次数
uint time=0; //记录进入比较定时器0的次数
uint num=0; //记录1ms内进入中断的次数
uint count=0; //进入外部中断0的次数
uchar flag;
uint sumnum1; //记录100ms内的数目
/***************************函数声明***************************/
void delay();
void display(uint m );
void init();
void init_0();
void init_2();
void _delay_us(uint l)
{
unsigned int i;
for(i=0;i<l;i++)
{
asm("nop");
}
}
/**************************主函数***********************************/
void main()
{
init();
init_0();
init_2();
while(sumnum<5)
{
PORTD=0XBF;
segdisplay(sumnum1);
}
while(1)
{
segdisplay(sumnum1);
}
}
/*************************扫描数码管时的延时函数*********************/
void delay()
{
uchar i,j;
for(i=6;i>0;i--)
for(j=225;j>0;j--);
}
/************************数码管显示函数*****************************/
void segdisplay( int temp)
{
int seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int temp1,temp2,temp3,temp4;
temp1=temp/1000;
temp2=(temp/100)%10;
temp3=(temp/10)%10;
temp4=temp%10;
DDRB=0xff;
DDRA|=0x0f;
PORTA=~BIT(3);
PORTB=seg[temp1];
_delay_us(100);
PORTA=~BIT(2);
PORTB=seg[temp2];
_delay_us(100);
PORTA=~BIT(1);
PORTB=seg[temp3];
_delay_us(100);
PORTA=~BIT(0);
PORTB=seg[temp4];
_delay_us(100);
}
/***********************管脚初始化函数*********************/
void init()
{
DDRD|=0X40; //PD4 设置为输出
PORTD=0XBF;
DDRA=0XFF;
DDRB=0XFF;
PORTA=0XFF;
PORTB=0XFF;
}
/***********************外部中断0初始化*********************/
void init_0()
{
MCUCR=0X02; //INT0为下降沿触发
GICR=0X40; //使能INT0中断
SREG=0X80; //使能总中断
}
/**********************定时器2初始化***********************/
void init_2()
{
TCCR0=0x03; // 内部时钟,64 分频(8M/64=125KHz)
TCNT0=0x83; //装初值
TIMSK=0x01; // 允许 T/C0溢出中断中断
}
/***********************外部中断0子函数********************/
#pragma interrupt_handler int0_isr:2
void int0_isr(void)
{
count++;
}
/*********************定时计数器0溢出中断子函数*****************/
#pragma interrupt_handler int0_over:10
void int0_over(void)
{
TCNT0=0x83; //重装初值
if((time%100) == 0)
sumnum1 = num;
if(time == 1000)
{
sumnum=num;
if(sumnum<10)
{
if((flag==1)&&(sumnum<10))
{
PORTD=0XFF;
flag=0;
}
flag++;
}
else
PORTD=0XBF;
num=0;
time=0;
}
num+=count;
count=0;
++time;
}
资源简介:/**************************************************************** 外部晶振8M PA0~3:四位数码管的位选 PB0~7:数码管的8位段选 外部中断0用...
上传时间: 2016-03-09
上传用户:彦 yan
资源简介:AVR单片机CRC校验码的查表与直接生成
上传时间: 2015-04-11
上传用户:hgy9473
资源简介:AVR单片机中文指令表,在开发AVR单片机的时候详细了解指令可以极大的提高开发者的效率~
上传时间: 2014-06-19
上传用户:zhangyi99104144
资源简介:开发环境ICC AVR单片机 用ADC做电压表 (多通道)
上传时间: 2015-12-09
上传用户:lijinchuan
资源简介:实现对ADE7759电能芯片的读写和校准,AVR单片机源码与电路图,单相电能表读写程序和初始化程序
上传时间: 2013-12-17
上传用户:爺的气质
资源简介:这是马潮老师最新力做<<AVR单片机潜入式系统原理与应用实践>>中有关ADC用来实现电压表的C程序,用CVAVR编译,对想熟悉和学习AVR单片机的朋友一定有用.注释详细,一看就懂.
上传时间: 2016-03-24
上传用户:dave520l
资源简介:使用avr单片机开发的数显表,附带protel文件,原理图和pcb齐全,已在试用阶段,推荐下来学习。
上传时间: 2016-09-05
上传用户:thuyenvinh
资源简介:这是一个使用NOKIA 3510I的液晶屏+AVR单片机来制作的电压表,使用AVR单片机内部自带的ADC做电压采样。
上传时间: 2014-12-22
上传用户:kernaling
资源简介:AVR单片机做的数字电压表,代码简单易懂,方便移植
上传时间: 2017-03-03
上传用户:saharawalker
资源简介:用于测量电机转速并带速度反馈,配增量编码器,用AVR单片机ATMEGA48
上传时间: 2017-03-22
上传用户:jackgao
资源简介:AVR单片机CRC校验码的查表与直接生成
上传时间: 2013-12-17
上传用户:ynzfm
资源简介:积分式直流数字电压表avr 单片机控制电路文件
上传时间: 2017-06-02
上传用户:wlcaption
资源简介:AVR单片机ATmega16(L)应用实例—红外线转速仪
上传时间: 2014-01-26
上传用户:电子世界
资源简介:《AVR单片机原理及应用》详细介绍了ATMEL公司开发的ATmega8系列高速嵌入式单片机的硬件结构、工作原理、指令系统、接口电路、C编程实例,以及一些特殊功能的应用和设计,对读者掌握和使用其他ATmega8系列的单片机具有极高的参考价值 AVR单片机原理及应用》具...
上传时间: 2013-10-29
上传用户:lanwei
资源简介: 文中所设计的基于AVR单片机的轮胎模具内径测量系统,采用光栅尺和激光测距仪测量模具内径,单片机通过接收上位机的命令控制步进电机改变测量点,同时控制光栅尺数显表进行数据采集实时返回给上位机。上位机将光栅尺数据和激光测距仪数据进行运算后得到...
上传时间: 2013-11-19
上传用户:tianyi223
资源简介:AVR单片机的电机测速程序,利用ICCAVR编译,通过ICP测出电机的转速并通过数码管显示和串口上传
上传时间: 2015-11-21
上传用户:shawvi
资源简介:转速表采用的是测量编码盘的信号,用STC89C2052单片机进行处理,根据转速输出0-5V电压
上传时间: 2014-09-01
上传用户:lanwei
资源简介:本代码以AVR单片机为主控制器,带485接口的三相电子式电能表的源程序。 主要完成电能表的计量,显示,485通讯,红外通讯等功能。
上传时间: 2016-11-22
上传用户:cxl274287265
资源简介:通过对avr单片机编程,计算汽车车速表的方波,实现车速信号采集和处理。
上传时间: 2016-12-16
上传用户:hakim
资源简介:AVR单片机原理及应用
上传时间: 2013-04-15
上传用户:eeworm
资源简介:AVR单片机原理及应用
上传时间: 2013-04-15
上传用户:eeworm
资源简介:专辑类----单片机专辑 AVR单片机原理及应用-321页-7.3M.rar
上传时间: 2013-07-07
上传用户:yd19890720
资源简介:专辑类----单片机专辑 @@-AVR单片机原理及应用-324页-14.1M.rar
上传时间: 2013-04-24
上传用户:鱼鱼鱼yu
资源简介:专辑类-单片机专辑-258册-4.20G -AVR单片机原理及应用-324页-14.1M.pdf
上传时间: 2013-05-24
上传用户:ziyu_job1234
资源简介:专辑类-单片机专辑-258册-4.20G AVR单片机原理及应用-321页-7.3M.pdf
上传时间: 2013-07-09
上传用户:gps6888
资源简介:上一讲我们对流水灯实验的电路实现和程序进行了分析,由于我们使用的是C语言编写AVR单片机程序,很多初学者对于怎样使用C语言来编写单片机程序有着很多迷惑,比如为什么PORTB = 0Xff这句话就能实现将单片机的PB口输出高电平。这一讲我们就来进行一下C语言编写...
上传时间: 2013-04-24
上传用户:打算打算
资源简介:avr 单片机 应用开发 典型实例 CD
上传时间: 2013-07-29
上传用户:hoperingcong
资源简介:文件名称:AVR单片机学习开发板Proteus仿真图.rar
上传时间: 2013-05-21
上传用户:784533221
资源简介:odbus RTU的AVR单片机C程序,可以用来与具有或支持modbus协议的设备进行通信
上传时间: 2013-05-31
上传用户:博雅abcd
资源简介:AVR单片机的一些实例程序,可以参考下,大部分可以当做你的子程序收藏喔!
上传时间: 2013-06-19
上传用户:ndyyliu