基于单片机的电子棋盘
2015-05-30焦娇李树平
焦娇 李树平
摘 要:文章设计了一种基于单片机实现的触摸棋盘,棋盘的硬件单元包括电源电路、晶振电路、复位电路、按键扫描电路、LED显示电路和ARM微控制器电路。采用了循环动态显示电路,耗材达到最少,设计可靠,具有最佳节能的优点,该棋盘能够稳定显示结果,基本模拟出了无子棋盘的特点,运行状况良好。
关键词:触摸;动态扫描;单片机
Abstract: in this paper, a touch board based on MCU, the board of the hardware unit including power supply circuit, crystal circuit, reset circuit, keyboard scanning circuit, LED display circuit and arm micro controller circuit is designed. The use of circular dynamic display circuit, supplies to reach at least, the design is reliable, with the best energy saving advantages, the board can be stable display results, the basic simulation of the sub board characteristics, running a good condition.
Keywords: touch; dynamic scanning; single chip microcomputer
1 概述
采用触摸设计,采用红外对管与MCU的AD转换口相连,通过动态扫描采集AD值,从而进行判断是否落子,内部集成时钟芯片,湿度传感器,温度传感器以及RC外部震荡电路,使步时记录更加精准且掉电可保留,使用IIC协议链接各各功能模块,液晶显示湿度,温度以及步时,呼吸灯设计时尚新颖,且可免去切换显示的麻烦,由于集成时钟芯片,本作品可充当电子万年历,掉电不丢失数据。多色点阵LED拼接底部显示模块,方便快捷且更换灵活同时易扩充。
2 确定开发系统
AVR Studio IDE、汇编编译器 ATMEL AVR Studio集成开发环境,集软硬件仿真、调试、下载编程于一体。ICC AVR C编译器,市面上地教科书使用它作为例程的较多,集成代码生成向导,虽然它的各方面性能均不是特别突出,但使用较为方便。ATman AVRC编译器支持多个模块调试,CodeVision AVRC编译器与KeilC51的代码风格最为相似,集成较多常用外围器件的操作函数,集成代码生成向导,有软件模块。
3 工作原理
最常见的键盘布局如图1所示。一般由16个按键组成,在单片机中正好可以用一组端口实现16个按键功能,这也是在单片机系统中最常用的形式,4*4矩阵键盘的内部电路如图2所示。
4 电路的软件设计
4.1 棋盘数据:m_data
这是一个以4*4的二位数组,用来保存当前棋盘的落子数据。其中,1表示落黑子,0表示落白子,-1表示无子。
4.2 清空棋盘:Clear
每一局游戏开始的时候都需要调用这个函数将棋盘清空,就是所谓的棋盘的初始化工作。这个函数主要将m_data中每一个落子位置都变为无子状态。
4.3 初始化操作:Init
初始化操作包括以下步骤:(1)初始化所有的获胜组合。(2)如果是计算机先走,则占据棋盘正中央的位置。
4.4 绘制棋子:Draw
他根据参数给定的坐标和颜色绘制棋子。绘制的详细过程如下:(1)将给定的棋盘坐标换算为绘图的像素坐标。(2)根据坐标绘制棋子位置图。(3)如果先前曾下过棋子,则利用R2_NOTXORPEN将上一个绘制棋子上的最后落子指示矩形擦除。(4)在刚绘制完成的棋子四周绘制最后落子指示矩形。
4.5 左键消息:OnLButtonUp
作为棋盘唯一响应的左键消息,也需要做不少的工作:(1)如果点击时的鼠标坐标在合法坐标(0,0)-(3,3)之外,亦禁止落子。(2)如果走的步数大于1步,则允许悔棋。
4.6 绘制棋盘:OnPaint
(1)装载棋盘位图并进行绘制棋盘。(2)根据棋盘数据绘制相应棋子。(3)绘制最后落子指示矩形。
4.7 胜负的判断:Win
这是游戏中一个极其重要的算法,用来判断当前棋盘的形势是哪一方获胜。
4.8 悔棋操作:Back
5 结束语
今后做进一步的完善,让此系统变成一个界面好、使用方便、可靠性好、存储量大,而且成本低、寿命长的系统。
参考文献
[1]崔永红.C++面向对象程序设计[M].北京:北京大学出版社,2005.
[2]郑莉,董渊.C++语言程序设计[M].北京:清华大学出版社,2011.
[3]埃克尔(BruceEckel),ChuckAllison,刘宗田,袁兆山.C++编程思想[M].北京:机械工业出版社,2011.
[4]刘锐宁,宋坤.VisualC++从入门到精通[M].北京:清华大学出版社,2010.
[5]王丰,高光金.VisualC++6.0程序设计教程与实训[M].北京:北京大学出版社,2005.