基于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仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。

相关推荐
悠哉悠哉愿意4 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
Lester_11014 天前
STM32霍尔传感器输入口设置为复用功能输入口时,还能用GPIO函数直接读取IO的状态吗
stm32·单片机·嵌入式硬件·电机控制
LCG元4 天前
低功耗显示方案:STM32L0驱动OLED,动态波形绘制与优化
stm32·嵌入式硬件·信息可视化
三佛科技-187366133974 天前
120W小体积碳化硅电源方案(LP8841SC极简方案12V10A/24V5A输出)
单片机·嵌入式硬件
z20348315204 天前
STM32F103系列单片机定时器介绍(二)
stm32·单片机·嵌入式硬件
Alaso_shuang4 天前
STM32 核心输入、输出模式
stm32·单片机·嵌入式硬件
脚后跟4 天前
AI助力嵌入式物联网项目全栈开发
嵌入式硬件·物联网·ai编程
2501_918126914 天前
stm32死锁是怎么实现的
stm32·单片机·嵌入式硬件·学习·个人开发
z20348315204 天前
STM32F103系列单片机定时器介绍(一)
stm32·单片机
星马梦缘4 天前
驱动层开发——蜂鸣器驱动
stm32·单片机·嵌入式硬件·hal·驱动