基于atmega16l单片机的抢答器设计内容摘要:
LCD_DATA_PORT|=tempamp。 0b00111100。 //写高四位 LCD_en_write()。 mand=mand2。 //低四位移到高四位 LCD_DATA_PORTamp。 =0b11000011。 //清高四位 LCD_DATA_PORT|=mandamp。 0b00111100。 //写低四位 LCD_en_write()。 } void LCD_write_data(unsigned char data) //写数据 { unsigned char temp。 data=((dataamp。 0b10000000)7)|((dataamp。 0b01000000)5)|((dataamp。 0b00100000)3)|((dataamp。 0b00010000)1)|((dataamp。 0b00001000)1)|((dataamp。 0b00000100)3)|((dataamp。 0b00000010)5)|((dataamp。 0b00000001)7)。 delay_nus(16)。 temp=data2。 LCD_RS_PORT|=LCD_RS。 //RS=1 LCD_DATA_PORTamp。 =0b11000011。 //清高四位 LCD_DATA_PORT|=tempamp。 0b00111100。 //写高四位 LCD_en_write()。 data=data2。 //低四位移到高四位 LCD_DATA_PORTamp。 =0b11000011。 //清高四位 LCD_DATA_PORT|=dataamp。 0b00111100。 //写低四位 LCD_en_write()。 } void LCD_set_xy( unsigned char x, unsigned char y ) //写地址函数 8 { unsigned char address。 if (y == 0) address = 0x80 + x。 else address = 0xc0 + x。 LCD_write_mand( address)。 } void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s) //列 x=0~15,行 y=0,1 { LCD_set_xy( X, Y )。 //写地址 while (*s) // 写显示字符 { LCD_write_data( *s )。 s ++。 } } void LCD_write_char(unsigned char X,unsigned char Y,unsigned char data) //列 x=0~15,行 y=0,1 { LCD_set_xy( X, Y )。 //写地址 LCD_write_data( data)。 } void delay_1us(void) //1us 延时函数 { asm(nop)。 } void delay_nus(unsigned int n) //N us 延时函数 { unsigned int i=0。 for (i=0。 in。 i++) delay_1us()。 } void delay_1ms(void) //1ms 延时函数 { unsigned int i。 for (i=0。 i1140。 i++)。 } void delay_nms(unsigned int n) //N ms 延时函数 { unsigned int i=0。 9 for (i=0。 in。 i++) delay_1ms()。 } unsigned char *Format(unsigned char data,unsigned char *str) { str[0]=tab[(data/10)%10]。 str[1]=tab[data%10]。 return str。 } 部分程序的流程图如图 3 所示 10 开始 系统初始化 LCD显示状态 测试选手按键 显示测试选手号数 主持键按下 调用键盘扫描处理函数 抢答开始 显示选手序号 求出选手序号 答题 答题时间到 声音提醒 结束 倒计时启动 显示违规者序号 声音报警 有违规者 Y N Y N Y Y N N 等待抢答开始 调整倒计时值写EEPOM 启动 15S 抢题时间 选手抢答 N 声音提醒 此题作废 15s 到了 Y Y 11 5 源程序 //包含所需头文件 include include include define LED PORTC //定义 LED显示端口 define readkey (~(PINA|0x80)) //定义按键端口 define on_beep PORTDamp。 =~(15) //定义蜂鸣器开 define off_beep PORTD|=15 //定义蜂鸣器关 define MAINKEY ((PINDamp。 0x01)==0x00) // define UPKEY ((PINDamp。 0x02)==0x00) /*宏定义 */ define uchar unsigned char define uint unsigned int //全局变量定义 unsigned char key。 uchar Nmiao=15。 uchar Dmiao,Emiao=30。 uint Tcount=4。 uchar stop_flag=0。 //定义时间到标志 uchar start_flag。 //定义启动计时标志 uchar MAIN_KEY。 //开始抢答标志 uchar LM=0。 //定义 LED移动位 uchar flag=0。 //定义 LED移动方向标志 uchar i=0。 //定义 30 秒计时数值 /***************************************** * 延时函数 1:入口 i,单位 mS,最大 65536mS * *****************************************/ void delay_ms(uint i) { uchar a。 for(。 i。 i) {for(a=141。 a。 a) //针对时钟频率为 1M {。 } } 12 } /***************************************** * 延时函数 2:入口 i,单位 uS,最大 65536uS * *****************************************/ void delay_us(uint i) { i=i/2。 for(。 i。 i) {。 }。基于atmega16l单片机的抢答器设计
相关推荐
源,可以有以下几种方案。 方案一:单片机的扩展 A/D 和 D/A 芯片,单片机通过 A/D 转换芯片不断的检测电源的输出电压值,再根据电源输出的电压值与设定值的差值调整 PWM 脉宽,然后通过 D/A 芯片输出一个基准的电压值,从而控制专门的 PWM 控制芯片,间接地控制电源工作。 方案二:单片机通过 A/D 转换输出一个电压,作为电源的基准电压,电源可以通过键盘设置预置输出电压
83。 14 设定加工刀具 14 后置设置 14 设定加工毛坯 15 可乐瓶底的常规加工 16 等高线粗加工刀具轨迹 16 精加工-参数线加工刀具轨迹 18 轨迹仿真、检验与修改 19 生成加工 G 代码 19 生成工序单 20 结束语 21 致 谢 22 参考文献 23 附 件 24 26 内部资料 请勿外传 精品文档 ———————————————————————————————————
义,当下流行的开发平台,课题内容及论文的结构。 第二章为系统的总体设计简介,包括蓄电池化成相关知识的介绍, CAN总线技术的简要说明,硬件电路用到的一些主要器件也给出了它们的主要参数及工作原理等。 最后还给出了系统总体的设计方案,分为硬件设计方案和软件设计方案。 第三章为系统硬件电路部分,包含硬件实现框图、存储器、主控制器、电源电路、通讯电路、电流采集、电压采集、过流保护等模块的说明。
9 第三章 单片机 温度 控制系统的硬件电路设计 系统硬件模块关系 本系统的执行方法是循环查询执行的 , 首先 单片机 AT89S51 写入命令给DS18B20, 检测 DS18B20 是否存在,如果不存在发出警告并显示错误显示,检测存在后 DS18B20 开始 监测温度并 转换数据,转换后通过 AT89S51 来处理数据。 数据处理后的结果就 通过 74LS164 移位寄存器 显示到 七段
统 字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式 LCD,目前常用 16*1, 16*2, 20*2 和 40*2 行等的模块。 下面以长沙太阳人电子有限公司的 1602 字符型液晶显示器为例,介绍其用法。 一般 1602 字符型液晶显示器实物如图: 10KMAX 750PES ETWDCWDI10μ FP1. 0VCCRST+5V89C 511KVCCRSTGND+5V
扇电机的自动启停以及转速的自动调节。 系统整体设计 本设计的整体思路是:利用温度传感器 DS18B20 检测环境温度并直接输 出数字温度信号给单片机 AT89C52 进行处理,在 LED 数码管上显示当前环境温度值以及预设温度值。 其中预设温度值只能为整数形式,检测到的当前环境温度可精确到小数点后一位。 同时采用 PWM 脉宽调制方式来改变直流风扇电机的转速。 并通过两个按键改变预设温度值