基于AVR128单片机抢答器proteus仿真设计

一、系统方案

二、硬件设计

原理图如下:

三、单片机软件设计

1、首先是系统初始化

void timer0_init() //定时器初始化

{

TCCR0=0x07; //普通模式,OC0不输出,1024分频

TCNT0=f_count; //初值,定时为10ms

TIFR=0x01; //清中断标志位

TIMSK=0x01; //使能定时器0溢出中断

SREG|=0x80; //开启全局中断

}

2、数码管显示程序

void Smg_Dispaly(uchar Value1,uchar Value2,uchar Num)

{

if(SmgCnt == 0)

{

PORTB = 0xFF;

PORTB = Smg_Duan[Value1/10];

PORTA = Smg_Wei[0];

}

else if(SmgCnt == 1)

{

PORTB = 0xFF;

PORTB = Smg_Duan[Value1%10];

PORTA = Smg_Wei[1];

}

else if(SmgCnt == 2)

{

}

else if(SmgCnt == 3)

{

PORTB = 0xFF;

PORTB = Smg_Duan[Value2/10];

PORTA = Smg_Wei[3];

}

else if(SmgCnt == 4)

{

PORTB = 0xFF;

PORTB = Smg_Duan[Value2%10];

PORTA = Smg_Wei[4];

}

else if(SmgCnt == 5)

{

}

else if(SmgCnt == 6)

{

}

else if(SmgCnt == 7)

{

PORTB = 0xFF;

PORTB = Smg_Duan[Num];

PORTA = Smg_Wei[7];

}

if(++SmgCnt >= 8)

SmgCnt = 0;

}

3、按键程序

if(PINC == 0xFF)

{

Kcnt = 0;Kflag = 0;

}

else if(Kflag == 0)

{

if(++Kcnt >= 3)

{

Kflag = 1;Kcnt = 0;timer = 0;

PORTE =~ PORTE;

if(DownCnt == 0)

{

复制代码
		    switch(PINC)
  		    {
              case 0xFE: ValueNum = 1;  ValueFlag = 1;break;
              case 0xFD: ValueNum = 2;  ValueFlag = 1;break;
              case 0xFB: ValueNum = 3;  ValueFlag = 1;break;
              case 0xF7: ValueNum = 4;  ValueFlag = 1;break;
              case 0xEF: ValueNum = 5;  ValueFlag = 1;break;
              case 0xDF: ValueNum = 6;  ValueFlag = 1;break;
              case 0xBF: ValueNum = 7;  ValueFlag = 1;break;
              case 0x7F: ValueNum = 8;  ValueFlag = 1;break;
              default: break;
            }
			
		  } 

4、核心算法程序

#pragma interrupt_handler timer1_ovf_isr:15

void timer1_ovf_isr(void)

{

static uchar cnt = 0;

if(StartFlag == 0)

{

cnt = 0;

}

if(++cnt >= 200)

{

cnt = 0; // 定时器定时5ms,计数200次为1s

if(StartData == 0)

{

SecFlag = 1; // 秒信号

}

}

TCNT1H = (65535-500)/256;

TCNT1L = (65535-500)%256;

Smg_Dispaly(ValueCnt,ValueTmr,ValueNum);

}

四、proteus仿真设计

Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。

相关推荐
dujunqiu3 小时前
S32K328(Arm Cortex-M7)适配CmBacktrace错误追踪
arm开发·驱动开发·单片机
冲,干,闯6 小时前
基于沁恒微电子CH32V307单片机使用
单片机·嵌入式硬件
机器视觉知识推荐、就业指导7 小时前
STM32 外设驱动模块五:DHT11 温湿度传感器
stm32·单片机·嵌入式硬件
广药门徒11 小时前
电脑芯片其实更偏向MPU不是CPU,GPU CPU NPU MPU MCU的区别
单片机·嵌入式硬件
灬若宸12 小时前
14、外部中断
stm32·单片机·嵌入式硬件·系统架构
逼子格15 小时前
【Protues仿真】基于AT89C52单片机的舵机和直流电机控制
单片机·嵌入式硬件·硬件工程·硬件工程师·电机驱动·l298n·直流电机控制
GodKK老神灭15 小时前
STM32 AFIO模块
stm32·单片机·嵌入式硬件
mftang17 小时前
Zephyr 中的 bt_le_per_adv_set_data 函数的介绍和应用方法
嵌入式硬件·nordic·zephyr
滴啦嘟啦哒17 小时前
【项目复盘】【四轴飞行器设计】驱动开发部分
单片机·面试准备
狂奔的sherry17 小时前
一会儿能ping通一会ping不通解决方案
运维·网络·单片机·嵌入式硬件