基于单片机的黑白棋课程设计

基于单片机的黑白棋课程设计
基于单片机的黑白棋课程设计

单片机课程设计报告

目录

1. 设计的系统的目的、用途、功能 (3)

1.1.硬件设计思想和电路原理图 (3)

1.2.红外线发射接收模块 (4)

1.3.棋盘显示模块 (4)

1.4.单片机接口 (5)

1.5.硬件单元的使用 (5)

2. 软件设计思想及软件流程 (6)

2.1.主函数 (6)

2.2.按键输入模块 (7)

2.3.游戏算法模块 (8)

2.4.显示模块 (9)

3. 详细说明软件功能 (9)

3.1.显示模块 (9)

3.2.按键模块 (9)

3.3.黑白棋规则模块(check_chess函数) (9)

3.4.胜利模式(victory函数) (9)

3.5.主函数 (10)

3.6.源程序 (10)

4. 系统测试过程及测试数据 (22)

4.1.硬件测试: (22)

4.2.软件测试单独: (22)

4.3.系统与软件综合测试: (22)

5. 测试数据: (22)

6. 分析相应的指标参数 (22)

7. 所需的全部资源 (23)

8. 成员分工和工作情况............................................................................. 错误!未定义书签。

1.设计的系统的目的、用途、功能

实现对黑白棋游戏的无子化操作,增加游戏的趣味性和方便性。学习实践单片机显示、按键等技术。

每一枚“棋子”就是一枚双色发光二极管,64枚双色发光二极管排成8×8的阵列。每一枚二极管有三支引脚,引脚电平的高低决定了二极管显示的颜色,而有单片机控制双色发光二极管引脚的电平高低,实现棋盘上二极管显示不同颜色,以代表棋子。发光二极管亮度高,功耗低,寿命长,且选用双色发光二极管减少了焊接工作量,发光二极管的两种颜色红色和绿色的对比度也较大,使棋子醒目清楚。

1.1.硬件设计思想和电路原理图

当阻断红外线发射二极管和接收二极管之间的光路时,接收管的电平会变化。用16对红外线发射接收二极管,8对感受行信号,8对感受列信号,行列发射接收二极管的光路的交点即一枚棋子的位置。当手指碰触到某个交点时,一组行列红外管的光路阻断,产生的信号通过优先编码器输入到单片机的IO口。

单片机在本作品中的功能有三点:首先,接收处理红外线接收二极管产生的电平信号;其次,存储棋盘上棋子的状态,计算需要变色的二极管的坐标,并输出到双色发光二极管阵列;再次,计算双方比分,有七段数码管输出,判断游戏的胜负。

图表1工作流程

1.2. 红外线发射接收模块

图表 2红外线发射接收模块

行列各有一组发射接收阵列,构成矩阵键盘。单片机PB7输出高电平时,非门ULN2803转变为低电平,红外线发射二极管开始工作,即使能红外线发射。红外线接收管电平变化的信号先通过非门74HC04,然后通过8-3优先编码器74HC148输出到单片机。

1.3. 棋盘显示模块

图表 3棋盘显示模块

8排上图所示结构构成棋盘。单片机输出的控制双色二极管变色的信号通过一个3-8译码器74LS138译码再通过两个非门对双色发光二极管的颜色。利用ULN2803灌电流大的特

红外线发射二极管

红外线接收二极管

点,避免芯片的损坏。

1.4.单片机接口

图表4单片机接口

1.5.硬件单元的使用

每一枚“棋子”就是一枚双色发光二极管,64枚双色发光二极管排成8×8的阵列。每一枚二极管有三支引脚,引脚电平的高低决定了二极管显示的颜色,而有单片机控制双色发光二极管引脚的电平高低,实现棋盘上二极管显示不同颜色,以代表棋子。

有两组各八对红外线发射接收二极管,每只二极管前面加一只准直小管以保证任意两对红外线发射接收管的信号不相互干扰。使用时用手指遮挡一组行列红外发射接收二极管光路的交点(即对应于棋盘上的一枚双色二极管),把由这些红外发射接收二极管组成的虚拟按键触发产生一个落子点的位置坐标信息,再由单片机识别判断。还设计了“让棋”“悔棋”按键使游戏更加完善。两个七段数码管负责显示双方成绩,双方各有一枚代表自己颜色的发光二极管,自己所对应的二极管亮时代表落子权在自己手中。当某一方胜利时,棋盘上会闪动胜方棋子所对应的颜色。

2.软件设计思想及软件流程2.1.主函数

图表1 主函数

图表2 棋子按键

图表3 悔棋让棋按键

图表4 check_chess函数

图表5 button函数

2.4.显示模块

定时器timer0每隔1ms触发一次中断,扫描相应LED和七段数码管。

3.详细说明软件功能

3.1.显示模块

利用定时器0比较中断,每隔1ms改变各个端口的输出,从而实现棋盘和记分板的扫描。

3.2.按键模块

分为红外按键(落子按键)和悔棋让棋按键两部分:

红外按键:利用定时器2的溢出中断,每隔65ms扫描一次红外按键阵列。若有输入,则使能其比较中断,2ms后在比较中断中比较两次输入的键值,实现消抖处理。

悔棋让棋按键:悔棋让棋按键接在了PB2端口,一旦有键按下,便会触发INT2下降沿中断。在INT2的中断函数中,将check_button 置1。主函数中,检查chess_button的值,若为1,则执行button函数。button函数中,实现按键消抖,和判断具体是悔棋还是让棋的功能并加以执行。若PB1值为1,则执行让棋操作,值为0执行悔棋操作。

3.3.黑白棋规则模块(check_chess函数)

通过检查当前落子位置周围的八个方位上能否使对方棋子变色。能变色,则允许落子,实现棋子存储数组chess和比分记录变量red, green的相应改变。

3.4.胜利模式(victory函数)

获胜方棋子闪动

3.5.主函数

首先实现单片机的初始化。然后判断棋局是否结束。没结束则一直检测是否落子和有悔棋让棋按键按下。若有落子,执行check_chess函数。若有悔棋让棋按键按下,则执行button 函数。棋局结束后,执行victory 函数。

3.6.源程序

#include

#include

flash unsigned char disbuffer[10]={0x01,0x67,0x12,0x22,0x64,0x28,0x08,0x63,0x00,0x20}; unsigned char chess[2][8]={{0,0,0,0x10,0x08,0,0,0},{0,0,0,0x08,0x10,0,0,0}};

//red=0,green=1

unsigned char red=2,green=2,state=1,check=0,vic=0,count=0,count_timer0=9,check_button=0; unsigned char chess_res[2][8]={{0,0,0,0x10,0x08,0,0,0},{0,0,0,0x08,0x10,0,0,0}};

unsigned char chess_p[2][8]={{0,0,0,0x10,0x08,0,0,0},{0,0,0,0x08,0x10,0,0,0}};

unsigned char red_res=2,green_res=2;

unsigned char input=0x00,input_0,input_jtd=0x20;

/*****************************************************

延时函数,实现延时1ms

*****************************************************/

void delay_ms(char n)

{

char i;

while(n--)

{

i=400;

while(--i)

{

NOP();

NOP();

NOP();

NOP();

NOP();

}

}

}

/*******************************************************

各个I/O端口的初始化

********************************************************/

void port_init(void)

{

PORTA = 0x00;

DDRA = 0xFF;

PORTB = 0x06;

DDRB = 0xF9;

PORTC = 0x00; //m103 output only

DDRC = 0xFF;

PORTD = 0x20;

DDRD = 0x00;

}

/**********************************************

定时器0的初始化,利用其比较中断,每隔1ms改变各个端口的输出,从而实现棋盘和记分板的扫描。

*********************************************/

void timer0_init(void)

{

TCCR0 = 0x00; //stop

TCNT0 = 0x00; //set count

OCR0 = 0x3F; //set compare

TCCR0 = 0x0B; //start timer

}

#pragma interrupt_handler timer0_comp_isr:20

void timer0_comp_isr(void)

{

//compare occured TCNT0=OCR0

if(count_timer0==9)

{

PORTB=0X06;

PORTC=disbuffer[green%10]|(state<<7);

PORTA=disbuffer[red%10]|(~state<<7);

PORTB=0x86;

}

else if(count_timer0==8)

{

PORTB=0X06;

PORTC=disbuffer[green/10]|(state<<7);

PORTA=disbuffer[red/10]|(~state<<7);

PORTB=0x07;

}

else

{

PORTB=0X06;

PORTA=0x00;

PORTC=0X00;

PORTB=0X0E|(count_timer0<<4);

PORTA=chess[0][count_timer0];

PORTC=chess[1][count_timer0];

}

if(!(count_timer0--))

{

count_timer0=9;

if(!input_jtd&&input_jtd==(PIND&0x20)) //PINC5的输入禁用JTAG端口,从而使屏幕正常显示

{

MCUCSR|=0X80;

MCUCSR|=0X80;

input_jtd=0x20;

}

else input_jtd=PIND&0X20;

}

if(vic) count++;

}

/***************************************************************

利用定时器2的溢出中断,每隔65ms扫描一次红外按键阵列。若有输入,则使能其比较中断,2ms后在比较中断中比较两次输入的键值,实现消抖处理

****************************************************************/

void timer2_init(void)

{

TCCR2 = 0x00; //stop

ASSR = 0x00; //set async mode

TCNT2 = 0x00 /*INVALID SETTING*/; //setup

OCR2 = 0x10 /*INVALID SETTING*/;

TCCR2 = 0x07; //start

}

#pragma interrupt_handler timer2_comp_isr:4

void timer2_comp_isr(void)

{

//compare occured TCNT2=OCR2

if((PIND&~0x20)==input_0)

{

input=input_0;

}

PORTB=0X06;

if(count_timer0==9) count_timer0=0;

else count_timer0++;

TIMSK = 0x42;

}

#pragma interrupt_handler timer2_ovf_isr:5

void timer2_ovf_isr(void)

{unsigned char i=8;

TCNT2 = 0x00 /*INVALID SETTING*/; //reload counter value

TIMSK=0X40;

PORTB=0x06;

PORTA=0X7F;

PORTC=0X7F;

PORTB=0X86;

delay_ms(2);

input_0=PIND&~0x20;

if((PIND&1)&&(input!=input_0)) TIMSK = 0xC0;

else

{

PORTB=0X06;

if(count_timer0==9) count_timer0=0;

else count_timer0++;

TIMSK=0X42;

}

}

/**************************************************************

悔棋让棋按键接在了PB2端口,一旦有键按下,便会触发下降沿中断。在INT2的中断函数中,将check_button 置1。主函数中,检查chess_button的值,若为1,则执行button函数。button函数中,实现按键消抖,和判断具体是悔棋还是让棋的功能并加以执行。若PB1值为1,则执行让棋操作,值为0执行悔棋操作。

*************************************************************/

#pragma interrupt_handler int2_isr:19

void int2_isr(void)

{

//external interupt on INT2

check_button=1;

}

void button()

{

//external interupt on INT2

char com;

com=PINB&0x02;

delay_ms(10);

if((PINB&0x02)==com&&(PINB&0x04)==0)

{

state=~state&0x01;

if(!com)

{while(i--)

{

chess[0][i]=chess_res[0][i];

chess[1][i]=chess_res[1][i];

}

red=red_res;

green=green_res;

}

}

check_button=0;

}

//初始化

void init_devices(void)

{

//stop errant interrupts until set up

CLI(); //disable all interrupts

MCUCSR&=0X7F;

MCUCSR&=0X7F;

port_init();

timer0_init();

timer2_init();

MCUCR = 0x00;

GICR = 0x20;

TIMSK = 0x42 ;//timer interrupt sources

SEI(); //re-enable interrupts

//all peripherals are now initialized

}

/***************************************************************************** 通过检查当前落子位置周围的八个方位上能否使对方棋子变色。能变色,则允许落子,实现棋子存储数组chess和比分记录变量red, green的相应改变。

*****************************************************************************/ void check_chess(void)

{

unsigned char row,col_res,row_res,state_re;

unsigned char i,j,col=8,n=0;

unsigned char red_p,green_p;

while(col--)

{

chess_p[0][col]=chess[0][col];

chess_p[1][col]=chess[1][col];

}

red_p=red;

green_p=green;

col_res=(~input>>4&0X01)|(~input>>5&0X06);

row_res=~input>>1&0x07;

state_re=~state&0x01;

if (!(chess[state][col_res]&1<

if(row_res)

{row=row_res; //col up check

do

row--;

while(chess[state_re][col_res]&1<

if(chess[state][col_res]&1<

{

chess[state][col_res]|=1<

i=row_res-row;

while(--i)

{

chess[state][col_res]|=1<<(row+i);

chess[state_re][col_res]&=~(1<

}

i=row_res-row;

if(state)

{

green+=i-n;

red-=i-1;

}

else

{

red+=i-n;

green-=i-1;

}

n=1;

}}

if(7-row_res)

{row=row_res; //col down check

do

row++;

while(chess[state_re][col_res]&1<

chess[state][col_res]|=1<

i=row-row_res;

while(--i)

{

chess[state][col_res]|=1<<(row-i);

chess[state_re][col_res]&=~(1<<(row-i));

}

i=row-row_res;

if(state)

{

green+=i-n;

red-=i-1;

}

else

{

red+=i-n;

green-=i-1;

}

n=1;

}}

if(col_res)

{col=col_res;//row left check

do

col--;

while(chess[state_re][col]&1<

if(chess[state][col]&1<

chess[state][col_res]|=1<

j=col_res-col;

while(--j)

{

chess[state][col+j]|=1<

chess[state_re][col+j]&=~(1<

}

j=col_res-col;

if(state)

{

green+=j-n;

red-=j-1;

}

else

{

red+=j-n;

green-=j-1;

}

n=1;

}}

if(7-col_res)

{col=col_res;//row right check

do

col++;

while(chess[state_re][col]&1<

chess[state][col_res]|=1<

j=col-col_res;

while(--j)

{

chess[state][col-j]|=1<

chess[state_re][col-j]&=~(1<

}

j=col-col_res;

if(state)

{

green+=j-n;

red-=j-1;

}

else

{

red+=j-n;

green-=j-1;

}

n=1;

}}

if(row_res&&col_res)

{ row=row_res;col=col_res;//angle up left check

do

{row--;col--;}

while(chess[state_re][col]&1<

if(chess[state][col]&1<

{

chess[state][col_res]|=1<

i=row_res-row;

while(--i)

{

chess[state][col+i]|=1<<(row+i);

chess[state_re][col+i]&=~(1<<(row+i));

}

i=row_res-row;

if(state)

{

green+=i-n;

red-=i-1;

}

else

{

red+=i-n;

green-=i-1;

}

n=1;

}

}

if((7-row_res)&&(7-col_res))

{row=row_res;col=col_res;//angle right down check

do

{row++;col++;}

while(chess[state_re][col]&1<

{

chess[state][col_res]|=1<

i=row-row_res;

while(--i)

{

chess[state][col-i]|=1<<(row-i);

chess[state_re][col-i]&=~(1<<(row-i));

}

i=row-row_res;

if(state)

{

green+=i-n;

red-=i-1;

}

else

{

red+=i-n;

green-=i-1;

}

n=1;

}

}

if(col_res&&(7-row_res))

{row=row_res;col=col_res;//angle left down check do

{row++;col--;}

while(chess[state_re][col]&1<

{

chess[state][col_res]|=1<

i=row-row_res;

while(i--)

{

chess[state][col+i]|=1<<(row-i);

chess[state_re][col+i]&=~(1<<(row-i));

}

i=row-row_res;

if(state)

{

green+=i-n;

red-=i-1;

}

else

{

red+=i-n;

green-=i-1;

}

n=1;

}

}

if(row_res&&(7-col_res))

{row=row_res;col=col_res;//angle right up check

do

{row--;col++;}

while(chess[state_re][col]&1<

if(chess[state][col]&1<

{

chess[state][col_res]|=1<

i=row_res-row;

while(--i)

{

chess[state][col-i]|=1<<(row+i);

chess[state_re][col-i]&=~(1<

}

i=row_res-row;

if(state)

{

green+=i-n;

red-=i-1;

}

else

{

red+=i-n;

green-=i-1;

}

n=1;

}

}

if(n)

{

state=~state&0x01;

red_res=red_p;

green_res=green_p;

i=8;

while(i--)

{

chess_res[0][i]=chess_p[0][i];

chess_res[1][i]=chess_p[1][i];

}

}

}

}

/********************************************************** 胜利模式,获胜方棋子闪动

基于51单片机课程设计

基于51单片机课程设计报告 院系:电子通信工程 团组:电子设计大赛1组 姓名: 指导老师:

目录 一、摘要 (3) 二、系统方案的设计 (3) 三、硬件资源 (5) 四、硬件总体电路搭建 (13) 五、程序流程图 (14) 六、设计感想 (14) 七、参考文献 (16) 附录 (17) 附录 1 程序代码 (17)

一、摘要 本设计以STC89C51单片机为核心的温度控制系统的工作原理和设计方法。温度信号由温度芯片DS18B20采集,并以数字信号的方式传送给单片机。文中介绍了该控制系统的硬件部分,包括:温度检测电路、温度控制电路。单片机通过对信号进行相应处理,从而实现温度控制的目的。文中还着重介绍了软件设计部分,在这里采用模块化结构,主要模块有:数码管显示程序、键盘扫描及按键处理程序、温度信号处理程序、led控制程序、超温报警程序。 关键词:STC89C51单片机 DS18B20温度芯片温度控制 ,LED报警提示. 二、系统方案的设计 1、设计要求 基本功能: 不加热时实时显示时间,并可手动设置时间; 设定加热水温功能。人工设定热水器烧水的温度,范围在20~70度之间,打开开关后,根据设定温度与水温确定是否加热,及何时停止加热,可实时显示温度; 设定加热时间功能。限定烧水时间,加热时间内超过温度上限或低于温度下限报警,并可实时显示温度。 2、系统设计的框架

本课题设计的是一种以STC89C51单片机为主控制单元,以DS18B20为温度传感器的温度控制系统。该控制系统可以实时存储相关的温度数据并记录当前的时间。其主要包括:电源模块、温度测量及调理电路、键盘、数码管显示、指示灯、报警、继电器及单片机最小系统。 图1 系统设计框架 3 工作原理 温度传感器 DS18B20 从设备环境的不同位置采集温度,单片机STC8951获取采集的温度值,经处理后得到当前环境中一个比较稳定的温度值,再根据当前设定的温度上下限值,通过加热和降温对当前温度进行调整。当采集的温度经处理后超过设定温度的上限时,单片机通过三极管驱动继电器开启降温设备(压缩制冷器) ,当采集的温度经处理后低于设定温度的下时 , 单片机通过三极管驱动继电器开启升温设备 (加热器) ,这里采用通过LED1和LED2取代!!! 当由于环境温度变化太剧烈或由于加热或降温设备出现故障,或者温度传感头出现故障导致在一段时间内不能将环境温度调整到规定的温度限内的时候,单片机通过三极管驱动扬声器发出警笛声,这里采用HLLED提示。

单片机电子称课程设计

目录 一、绪论 (1) 1.0引言 (1) 1.1问题的提出 (1) 1.2任务与分析 (1) 二、总体方案设计 (2) 2.1设计任务 (2) 2.2 系统设计框图 (3) 三、系统硬件设计 (3) 3.1 5V直流电源设计模块 (3) 3.2 传感器数据采集模块 (5) 3.3信号电路放大模块 (8) 3.4 A/DC0832数模转换模块 (9) 3.5 AT89C51单片机控制模块 (11) 3.6 LED显示模块 (13) 四、系统软件设计 (14) 4.1 C语言在单片机中的用 (14) 4.2电子称的软件设计与实现 (15) 4.3主程序流程图 (15) 4.4 子程序设计 (16) 4.4.1 A/DC0832采样程序 (16) 4.4.2 LED显示程序 (16) 五、Protues仿真调试 (17) 5.1 仿真调试结果 (17) 设计总结 (19) 参考文献 (20) 附录A程序清单 (20) 附录B 原理图 (26) 附录C PCB图 (27)

一、绪论 1.0引言 在我们生活中经常都需要测量物体的重量,于是就用到秤,但是随着社会的进步、科学的发展,我们对其要求操作方便、易于识别。随着计量技术和电子技术的发展,传统纯机械结构的杆秤、台秤、磅秤等称量装置逐步被淘汰,电子称量装置电子秤、电子天平等以其准确、快速、方便、显示直观等诸多优点而受到人们的青睐。通过分析近年来电子衡器产品的发展情况及国内外市场的需求,电子衡器总的发展趋势是小型化、模块化、集成化、智能化;其技术性能趋向是速率高、准确度高、稳定性高、可靠性高;其功能趋向是称重计量的控制信息和非控制信息并重的“智能化”功能;其应用性能趋向于综合性和组合性。 1.1问题的提出 电子秤是电子衡器中的一种,衡器是国家法定计量器具,是国计民生、国防建设、科学研究、内外贸易不可缺少的计量设备,衡器产品技术水平的高低,将直接影响各行各业的现代化水平和社会经济效益的提高。称重装置不仅是提供重量数据的单体仪表,而且作为工业控制系统和商业管理系统的一个组成部分,推进了工业生产的自动化和管理的现代化,它起到了缩短作业时间、改善操作条件、降低能源和材料的消耗、提高产品质量以及加强企业管理、改善经营管理等多方面的作用。随着时代科技的迅猛发展,微电子学和计算机等现代电子技术的成就给传统的电子测量与仪器带来了巨大的冲击和革命性的影响。经现今电子衡器制造技术及应用得到了新发展:电子称重技术从静态称重向动态称重发展;计量方法从模拟测量向数字测量发展;测量特点从单参数测量向多参数测量发展。常规的测试仪器仪表和控制装置被更先进的智能仪器所取代,使得传统的电子测量仪器在远离、功能、精度及自动化水平定方面发生了巨大变化,并相应的出现了各种各样的智能仪器控制系统,使得科学实验和应用工程的自动化程度得以显著提高。 1.2任务与分析 本设计基于单片机技术原理,以单片机芯片AT89C51作为核心控制器,通过

基于单片机的广告灯课程设计

单片机课程设计报告书 课题名称 基于单片机的广告灯课程设计 姓 名 学 号 院 系 专 业 指导教师 2011年 6月10日 ※ ※※※※※※※※ ※※ ※※ ※※ 2008级学生单片机 课程设计

基于单片机的广告灯课程设计 1、设计目的 本设计以AT89S51单片机为核心并用它来控制发光二极管双灯点亮循环的实验装置,用AT89S51单片机控制16个发光二极管发光,实现亮点从高到低位,从左到右,从单到双的循环移动。通过PROTEL软件设计、仿真,并能从中掌握通过软件控制发光二极管的思路和技巧。这次设计重点就在于利用单片机的知识去控制系统的运行。 2、设计要求 1)广告流水灯具有控制的功能。 2)设置一个系统使广告流水灯能够规律性和周期性的闪烁功能。 3)能够使其制动化和中断的功能。 3、设计总框图与方案 图3.1系统框图 本次课程设计是用流水灯的变化来表示不同的效果。主体选用AT89S51单片机使用多个发光二极管,通过编程来实现“流水灯”的花样变化。 4、硬件电路的设计 4.1系统电路图

图4.1 广告灯的硬件原理电路图 这个电路图中都为低电位亮,高电位灭即‘0’亮‘1’灭,就这样通过查表控制‘0’与‘1’的变化来控制发光二极管的亮灭。中断中也是如此,通过取反的手段来控制灯的亮灭。按照图4.1进行仿真,通过编程来实现“流水灯”的花样变化。AT89S51的P1、P3口分别接一组发光二极管,发光二极管另一端接电源输出,故为高电平。P1、P3口输出电平的变化控制二极管的发光情况。当P1、P3口的输出电平为低时,LED灯亮;反之,不亮。 5、软件设计 5.1 流程图与程序 图5.1程序总流程图 本实验流程中,用AT89S51单片机控制16个发光二极管发光。其中二极管一端接高电平,另一端接AT89S51芯片输出端口,通过控制各输出端口高低电平的变化决定二极管是否发光,从而使广告流水灯能够规律性和周期性地分别实现一个亮灯的左右移动、一个不亮灯的左右移动、灯的从两边到中间及单双等交替闪烁等花样变化。 6、系统仿真 在Proteus的ISIS 7.1sp2软件环境下画出电路原理图,接下来就是将设计的程序在Keil C51 μVision2开发集成环境上编译成机器语言,进入Proteus 的ISIS,鼠标左键点击菜单“Debug”,选中“use romote debuger monitor”,便可实现KeilC与Proteus连接调试。首先在Proteus中双击单片机AT89C51,将KeilC下编程生成的 .HEX文件导入到AT89C51中,可在Proteus中单击全速仿真运行按钮,进行现象的查看,能清楚地观察到芯片上每一个引脚的电平变化,红色代表高电平,蓝色代表低电平;如果现象不正确,则在KeilC中单步调试程序,并在Proteus观察现象,那一步不正确则对该段的程序进行修改,调试直到仿真完全成功为止。 图6.1 Proteus软件环境下画出电路原理图 图6.2效果一

数据结构课程设计报告模板

课程设计说明书 课程名称:数据结构 专业:班级: 姓名:学号: 指导教师:成绩: 完成日期:年月日

任务书 题目:黑白棋系统 设计内容及要求: 1.课程设计任务内容 通过玩家与电脑双方的交替下棋,在一个8行8列的方格中,进行棋子的相互交替翻转。反复循环下棋,最后让双方的棋子填满整个方格。再根据循环遍历方格程序,判断玩家与电脑双方的棋子数。进行大小判断,最红给出胜负的一方。并根据y/n选项,判断是否要进行下一局的游戏。 2.课程设计要求 实现黑白两色棋子的对峙 开发环境:vc++6.0 实现目标: (1)熟悉的运用c语言程序编写代码。 (2)能够理清整个程序的运行过程并绘画流程图 (3)了解如何定义局部变量和整体变量; (4)学会上机调试程序,发现问题,并解决 (5)学习使用C++程序来了解游戏原理。 (6)学习用文档书写程序说明

摘要 本文的研究工作在于利用计算机模拟人脑进行下黑白棋,计算机下棋是人工智能领域中的一个研究热点,多年以来,随着计算机技术和人工智能技术的不断发展,计算机下棋的水平得到了长足的进步 该程序的最终胜负是由棋盘上岗双方的棋子的个数来判断的,多的一方为胜,少的一方为负。所以该程序主要运用的战术有削弱对手行动战术、四角优先战术、在游戏开局和中局时,程序采用削弱对手行动力战术,即尽量减少对手能够落子的位置;在游戏终局时则采用最大贪吃战术,即尽可能多的吃掉对手的棋子;而四角优先战术则是贯穿游戏的始终,棋盘的四角围稳定角,不会被对手吃掉,所以这里是兵家的必争之地,在阻止对手进角的同时,自己却又要努力的进角。 关键词:黑白棋;编程;设计

基于51单片机简易电子琴的课程设计

基于51单片机简易电子琴 1 课题背景 单片微型计算机室大规模集成电路技术发展的产物,属于第四代电子计算机它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。他的应用必定导致传统的控制技术从根本上发生变革。因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。 电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。它在现代音乐扮演重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。本文的主要内容是用AT89S52单片机为核心控制元件,设计一个电子琴。以单片机作为主控核心,与键盘扬声器等模块组成核心主控制模块,在主控模块上设有8个按键,和一个复位按键。 主要对使用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴硬件的组成。利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏要表达的音符。并且分别从原理图,主要芯片,个模块原理及各莫奎的程序的调试来详细阐述。 一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,构成我们想演奏的那首曲目。当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样的方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系编写正确就可以达到我们想要的曲目。 2 任务要求与总体设计方案 2.1 设计任务与要求 利用所给键盘的1,2,3,4,5,6,7,8八个键,能够发出7个不同的音调,而且有一个按键可以自动播放歌曲,要求按键按下时发声,松开延时一小段时间,中间再按别的键则发另外一音调的声音,当系统扫描到键盘按下,则快速检测出是哪一个按键被按下,然后单片机的定时器启动,发出一定频率的脉冲,该频率的脉冲经喇叭驱动电路放大滤波后,就会发出相应的音调。如果在前一个按下的键发声的同时有另一个按键被按下,则启动中断系统。前面的发音停止,转到后按的键的发音程序。发出后按的键的音调。 2.2 设计方案 2.2.1 播放模块 播放模块是由喇叭构成,它几乎不存在噪声,音响效果较好,而且由于所需驱动功率较小,且价格低廉,所以,被广泛应用。 2.2.2 按键控制模块

基于单片机的电子时钟课程设计报告

目录 一、引言········ 二、设计课题········· 三、系统总体方案········· 四、系统硬件设计······ 1.硬件电路原理图 2.元件清单 五、系统软件设计········· 1.软件流程图 2.程序清单 六、系统实物图········ 七、课程设计体会········ 八、参考文献及网站········· 九、附录·········

一.引言 单片机因将其主要组成部分集成在一个芯片上而得名,就是把中央处理器、随机存储器、只读存储器、中断系统、定时器/计数器以及I/O接口电路等部件集成在一个芯片上。 基于单片机设计的数字钟精确度较高,因为在程序的执行过程中,任何指令都不影响定时器的正常计数,即便程序很长也不会影响中断的时间。 数字钟是采用数字电路实现对日期、时、分、秒,数字显示的计时装置,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表的报时功能。数字钟已成为人们日常生活中的必需品,广泛应用于家庭、车站、码头、剧院、办公室等场所,给人们的生活、学习、工作带来极大的方便。不仅如此,在现代化的进程中,也离不开电子钟的相关功能和原理,比如机械手的控制、家务的自动化、定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。而且是控制的核心部分。因此,研究数字钟及扩大其应用,有着非常现实的意义。 本设计使用12MHZ晶振与单片机AT89C51相连接,以AT89C51芯片为核心,采用动态扫描方式显示,通过使用该单片机,加之在显示电路部分使用HD74LS373驱动电路,实现在8个LED数码管上显示时间,通过4个按键进行调时、复位等功能,在实现各功能时数码管进行相应显示。软件部分用C语言实现,分为显示、延迟、调时、复位等部分。通过软硬件结合达到最终目的。

黑白棋游戏设计1[1]

VC程序设计课程设计 报告书 设计题目:黑白棋游戏设计 院系: 班级: 组别: 学号: 姓名: 起止日期: 指导教师:

目录 前言 (1) 1. 课程设计计划 (2) 2.需求分析 (3) 3.概要设计 (4) 4.详细设计 (5) 5.编码与测试 (13) 6.心得体会 (15) 参考文献 (16)

前言 黑白棋,也称反棋(Reversi)、奥赛罗棋(Othello),苹果棋,翻转棋。游戏通过相互翻转对方的棋子,最后以棋盘上谁的棋子多来判断胜负。它的游戏规则简单,因此上手很容易,但是它的变化又非常复杂。 起初,黑白棋在西方和日本很流行,近年来,黑白棋正逐步为中国玩家所接受,并深受喜爱。 本次我们组选择这个题目做大作业,一方面是巩固和提高以前所学的VC++的知识;另一方面是因为这可能是我们中的大多数人第一次完成一个软件的系统设计,选择一个中等难度且相对成熟的软件来设计既易于实现又留有一定的上升空间,符合我们的实际情况。 我们所设计的这种黑白棋游戏有几个特点:程序短小精悍,简洁明了;游戏界面美观,容易操作;功能丰富,趣味性强。

1. 课程设计计划 黑白棋游戏设计所完成的就是一个游戏软件系统。其一般的功能包括:开始新局,对弈方式选择,先手选择,棋力设置,限时设置,计算机演示,保存棋局,载入棋局,导出走棋信息,重温棋局,英雄榜,悔棋,设置属性,帮助信息,关于黑白棋的介绍等,要求设计一个黑白棋游戏软件,通过计算机实现各个功能。其具体设计要求为: 1、位图的导入和棋盘的生成 2、记录双方对弈时间的计时器与记录双方子数的计数器 3、选择人机对战与人人对战的函数及控制堆栈难度的主函数 4、实现悔棋功能的堆栈 我们对项目期望能实现 a 可以实现人机对弈。 b 棋力可调,分初级,中级,高级。 c 提示音功能,下错、下对有不同的提示音。 d 玩家遇到疑问,需要帮助时,给予一定的帮助 e 界面色彩友好,给人以良好的视觉冲击。 f 操作方便,容易上手。 本课程设计工作进度计划为: 表1 课程设计计划 本课程设计任务的分工:陈涛涛完成人机对战中的实现保存棋局、载入棋局、重温棋局、英雄榜、悔棋功能。本人完成人机对战中的实现开始,退出,帮助,难度设计,播放背景音乐功能。

基于51单片机的电子琴设计课程设计

目录 前言 (2) 第1章基于51单片机的电子琴设计 (3) 1.1 电子琴的设计要求 (3) 1.2 电子琴设计所用设备及软件 (3) 1.3 总体设计方案 (3) 第2章系统硬件设计 (5) 2.1 琴键控制电路 (5) 2.2 音频功放电路 (6) 2.3 时钟-复位电路 (6) 2.4 LED显示电路 (6) 2.5 整体电路 (6) 第3章电子琴系统软件设计 (7) 3.1 系统硬件接口定义 (7) 3.2 主函数 (8) 3.2.1 主函数程序 (8) 3.3 按键扫描及LED显示函数 (9) 3.3.1 键盘去抖及LED显示子程序 (10) 3.4 中断函数 (11) 3.4.1 中断程序 (12) 第4章电子琴和调试 (12) 4.1 调试工具 (12) 4.2 调试结果 (13) 4.3 电子琴设计中的问题及解决方法 (14) 第5章电子琴设计总结 (15) 参考文献 (16) 附录 (17)

前言 音乐教育是学校美育的主要途径和最重要内容,它在陶冶情操、提高素养、开发智力,特别是在培养学生创新精神和实践能力方面发挥着独特的作用。近年来,我国音乐教育在理论与实践上都取得了有目共睹的成绩,探索并形成了具有中国特色的、较为完整的音乐教育教学体系。但我国音乐教育的改革力度离素质教育发展的要求还存在一定距离。如今,电子琴作为电子时代的新产物以其独特的功能和巨大的兼容性被人们广泛的接受和推崇。而在课堂教学方面,它拥有其它乐器无法比拟的两个瞬间:瞬间多元素思维的特殊的弹奏方法;瞬间多声部(包括多音色)展示的乐队音响效果的特点。结合电子琴自身强大的功能及独特的优点来进行音乐教育的实施,这样就应该大力推广电子琴进入音乐教室,让电子琴教学在音乐教育中发挥巨大的作用。现代乐器中,电子琴是高新科技在音乐领域的一个代表,体现了人类电子技术和艺术的完美结合。电子琴自动伴奏的稳定性、准确性,以及鲜明的强弱规律、随人设置的速度要求,都更便于人们由易到难、深入浅出的准确掌握歌曲节奏和乐曲风格,对其节奏的稳定性和准确性训练能起到非常大的作用。电子琴所包含的巨量的音乐信息和强大的音乐表现力可以帮助音乐教学更好地贯彻和落实素质教育,更有效地提高人们的音乐素质和能力。目前,市场上的电子琴可谓琳琅满目,功能也是越来越完备。以单片机作为主控核心,设计并制作的电子琴系统运行稳定,其优点是硬件电路简单、软件功能完善、控制系统可靠、性价比较高等,具有一定的实用与参考价值。这就为电子琴的普及提供了方便。 二、电子琴设计要求本设计主要是用AT89C51单片机为核心控制元件,设计一台电子琴。以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有7个按键和1个复位按键。本系统主要是完成2大功能:音乐自动播放、电子琴弹奏。关于声音的处理,使用单片机C语言,利用定时器来控制频率,而每个音符的符号只是存在自定义的表中。

单片机电子称课程设计1

单片机电子称课程设计1

————————————————————————————————作者:————————————————————————————————日期: 2

单片机技术及其应用原理课程设计报告 设计题目:电子秤的设计 专业年级:08电子信息工程本科 小组成员: 杨婷(200800802035 华娟(200800802041 王尹怿(200800802048 成绩: 完成时间:20110702 【设计题目】电子称的设计 【设计要求】 (1设计一款电子秤,用LED液晶显示器显示被称物体的质量(2可以设定该秤所称的上限 (3当物体超重时,能自动报警 【设计过程】 1.【方案设计】 3

4 在设计系统时,针对各个模块实现的功能来设计电子秤的方案有以下几种: 方案一 结构简图如下图所示: 图1 带有键盘输入的结构简图 此方案设计的电子秤,可以实现称物计价功能,但是局限于数码管的功能,在显示时只能显示单价、购物总额以及简单的货物代码等。在显示重量时,如果数码管没有足够的位数,那么称量物体重量的精度必受到限制,所以此方案需要较多的数码管接入电路中。这样在处理输入输出接口时需要另行扩展足够多的I/O 接口供数码管使用,比较麻烦。 方案二前端信号处理时,选用放大、信号转换等措施, 尤其在显示方面采用具有字符图文显示功能的LCD 显示器。这种方案不仅加强了人机交换的能力,而且满足设计要求,可以显示购物清单、所称量的物体信息等相关内容。 结构简图如下图所示: 图2 LCD 显示的方案

目前单片机技术比较成熟,功能也比较强大,被测信号经放大整形后送入单片机,由单 片机对测量信号进行处理并根据相应的数据关系译码显示出被测物体的重量。单片机控制适合于功能比较简单的控制系统,而且其具有成本低,功耗低,体积小算术运算功能强,技术成熟等优点。但其缺点是外围电路比较复杂,编程复杂。使用这种方案会给系统设计带来一定的难度。 方案三采用现场可编程门阵列(FPGA为控制核心 采用现场可编程门阵列(FPGA为控制核心,利用EDA软件编程,下载烧制实现。系统集成于一片Xilinx公司的SpartanⅡ系列XC2S100E芯片上,体积大大减小、逻辑单元灵活、集成度高以及适用范围广等特点,可实现大规模和超大规模的集成电路。 采用FPGA测频测量精度高,测量频率范围大,而且编程灵活、调试方便,设计要求的精度较高,所以要求系统的稳定性要好,抗干扰能力要强。 从下图中可以看到系统的基本工作流程和各单元电路所用到的核心器件。其中控制器采用Xilinx公司可编程器件FPGA为核心,基于ISE软件平台,采用VHDL编程实现数据处理、LED和LCD驱动、时钟芯片的I2C通讯、键盘控制等模块。 结构简图如下图所示 : 5

基于单片机的LED点阵显示课程设计

1 LED电子显示屏原理 1.1 L ED电子显示屏概述 LED电子显示屏(Light Emitting Diode Panel)是由几百--几十万个半导体发光二极管构成的像素点,按矩阵均匀排列组成。利用不同的半导体材料可以制造不同色彩的LED像素点。目前应用最广的是红色、绿色、黄色。而蓝色和纯绿色LED的开发已经达到了实用阶段。LED显示屏是一种通过控制半导体发光二极管的亮度的方式,来显示文字、图形、图像、动画、行情、视频、录像信号等各种信息的显示屏幕。 LED显示屏分为图文显示屏和条幅显示屏,均由LED矩阵块组成。图文显示屏可与计算机同步显示汉字、英文文本和图形;而条幅显示屏则适用于小容量的字符信息显示。LED显示屏因为其像素单元是主动发光的,具有亮度高,视角广、工作电压低、功耗小、寿命长、耐冲击和性能稳定等优点。因而被广泛应用于车站、码头、机场、商场、医院、宾馆、银行、证券市场、建筑市场、拍卖行、工业企业管理和其它公共场所。 LED显示屏的发展前景极为广阔,目前正朝着更高亮度、更高气候耐受性、更高的发光密度、更高的发光均匀性,可靠性、全色化方向发展。 1.2 LED显示屏动态显示原理 LED点阵显示系统中各模块的显示方式:有静态和动态显示两种。静态显示原理简单、控制方便,但硬件接线复杂,在实际应用中一般采用动态显示方式,动态显示采用扫描的方式工作,由峰值较大的窄脉冲电压驱动,从上到下逐次不断地对显示屏的各行进行选通,同时又向各列送出表示图形或文字信息的列数据信号,反复循环以上操作,就可显示各种图形或文字信息。 点阵式LED汉字广告屏绝大部分是采用动态扫描显示方式,这种显示方式巧妙地利用了人眼的视觉暂留特性。将连续的几帧画面高速的循环显示,只要帧速率高于24帧/秒,人眼看起来就是一个完整的,相对静止的画面。最典型的例子就是电影放映机。在电子领域中,因为这种动态扫描显示方式极大的缩减了发

嵌入式系统黑白棋课程设计报告

嵌入式系统课程设计报告——黑白棋程序设计 学院计算机 专业计算机 教师 学生 学号 2013年x月xx 日

1 设计目的 利用VS2005编程实现基于WINCE的8*8大小的黑白棋程序设计。在WINCE端运行 2、开发环境 软件: Visual Studio 2005 Vc++6.0 3、设计任务及要求 黑白棋棋盘大小为8*8,实现人人对战即可。 设计要求:利用二维数组标记棋盘,下子后判断横向、纵向或对角有无相同颜色棋子,若有则该线段中所有棋子置为该颜色。棋盘所有棋子填满后游戏结束。棋子数多者胜 4、实现过程 1、设计初始化棋盘函数

2、复制棋盘函数 3、显示棋盘函数 4、选择下棋类型 4、计算可落子的位置个数,及该位置落子后翻过的棋子的个数 5、设置棋子的稳定性(计算得分的依据),空白处除外 6、评价棋手得分 4.1 硬件 WINDOWS操作平台利用VC++实现黑白棋游戏设计 Microsoft Visual Studio 2005 4.2驱动程序设计 WinCE界面 4.3用户应用程序设计 #include using namespace std; int const MAX=10000; enum Color { WHITE=-1,BLANK,BLACK //是否能落子 //黑子 }; 主函数

int main(void) /////////////主函数 { Chessboard board; Chessboard *pBoard=&board; enum Color player=BLANK,nowPlayer=BLACK;//声明两个enum枚举变量player,nowplayer Choice choice; Choice *pChoice=&choice; int dif=-1,step=4,success=0; char restart=' '; start: ///////////////////////////////////////////// player=BLANK; ///////////////////////////////////////////// nowPlayer=BLACK; dif=-1; step=4; restart=' '; int b; cout<<"输入1为人人对战,否则为人机对战:"; cin>>b; if(b==1){ /////////人人对战//////////// while(player!=WHITE && player!=BLACK) { cout<<"\n请选择执黑棋(○)(1),或执白棋(●)(-1)\t执黑棋先下:\n"; scanf("%d",&player);/////////////////////////////////////////////////////// ////// if(player!=WHITE && player!=BLACK) { cout<<"黑白设置错误.\n"; } } board.initChessboard(pBoard); /////////初始化棋盘/////////// while(step<64) /* 棋盘上未下满64子 */ { char *nowPlayerName=""; if(nowPlayer==BLACK) { nowPlayerName="黑棋(○)"; } else if(nowPlayer==WHITE)

单片机课程设计——基于51单片机的温度监控系统设计

单片机课程设计报告 题目:温度监控系统设计 学院:能源与动力工程学院 专业:测控技术与仪器专业 班级: 2班 成员:魏振杰 二〇一五年十二月

一、引言 温度是工业控制中主要的被控参数之一,特别是在冶金、化工、建材、食品、机械、石油等工业中,具有举足重轻的作用。对于不同场所、不同工艺、所需温度高低范围不同、精度不同,则采用的测温元件、测方法以及对温度的控制方法也将不同;产品工艺不同、控制温度的精度不同、时效不同,则对数据采集的精度和采用的控制算法也不同,因而,对温度的测控方法多种多样。 随着电子技术和微型计算机的迅速发展,微机测量和控制技术也得到了迅速的发展和广泛的应用。利用微机对温度进行测控的技术,也便随之而生,并得到日益发展和完善,越来越显示出其优越性。 作为获取信息的手段——传感器技术得到了显著的进步,其应用领域较广泛。传感器技术已成为衡量一个国家科学技术发展水平的重要标志之一。因此,了解并掌握各类传感器的基本结构、工作原理及特性是非常重要的。 为了提高对传感器的认识和了解,尤其是对温度传感器的深入研究以及其用法与用途,基于实用、广泛和典型的原则而设计了本系统。本系统利用传感器与单片机相结合,应用性比较强,本系统可以作为仓库温度监控系统,如果稍微改装可以做热水器温度调节系统、实验室温度监控系统,以及构成智能电饭煲等等。课题主要任务是完成环境温度监测,利用单片机实现温度监测并通过报警信号提示温度异常。本设计具有操作方便,控制灵活等优点。 本设计系统包括单片机,温度采集模块,显示模块,按键控制模块,报警和指示模块五个部分。文中对每个部分功能、实现过程作了详细介绍。整个系统的核心是进行温度监控,完成了课题所有要求。 二、实验目的和要求 2.1学习DS18B20温度传感芯片的结构和工作原理。 2.2掌握LED数码管显示的原理及编程方法。 2.3掌握独立式键盘的原理及使用方法。 2.4掌握51系列单片机数据采集及处理的方法。 三、方案设计

基于单片机的电子称传感器课程设计

测控技术与仪器专业 《传感器技术》课程设计任务书 淮阴工学院电子与电气工程学院 2014年06月

专业方向课程设计 课题:电阻应变式电子称 班级测控1111 学生姓名金梦磊学号 1111203115 指导教师张青春 淮阴工学院电子与电气工程学院

目录1.系统方案设计 1.1 概述 1.2 检测原理 1.3 系统原理框图 2.系统硬件设计 2.1 传感器选择及其特性 2.2 测量电路 2.3 信号采集电路 2.4 单片机及外围电路 2.5 总体电路图 3.系统软件设计 3.1 软件设计方法 3.2 软件流程图 3.3 软件清单及说明 4.系统调试与验证 4.1 调试过程 4.2调试结果(仿真结果)截图4.3 误差分析 5.课程设计体会与总结 附录:1、参考资料 2、元器件表

基于电阻式应变片式传感器的电子称设计 ` 1.系统方案设计 1.1概述 随着时代的进步和科技的发展,电子称已经成为现代生活中不可或缺的一部分。无论是做生意确定货物的重量,还是菜市场买菜看斤看两,还是没事减肥看看自己体重有没有减少,我们都需要使用称量道具,电子称以其便携,准确等优点占据着市场。 早期的电子称是通过模拟电路实现的,其抗干扰能力不足,准确也比较低。现在的电子称都是通过微控制器,采用数字信号的方式,这样就克服了以前的缺点,还可以实现键盘控制以及超额报警等更能。在学习了传感器,单片机,测控电路几门课程之后,我们可以自己设计出一个电子称了。 在我的设计中,我将采用电阻式应变片传感器进行测量,并采用放大器对传感器转换出的电压信号进行放大、达到A/D转换器输入电压的要求,采用8位A/D转换器将放大器产生的模拟信号转换成数字信号,单片机将接收到的数字处理后显示在4个数码管上(量程为0-1.999kg,所以只需要4个数码管),还需要蜂鸣器进行超量程报警,led灯显示电源的通断,两个拨位开关实现电源通断的控制,以及单片机的复位功能。 1.2检测原理 电阻式应变片传感器是通过电阻的应变效应进行测量。

基于单片机的秒表课程设计

基于单片机的秒表课程设计

基于单片机的秒表课程设计 姓名: 班级: 学号: 专业: 指导老师: 年月日

目录1、总体设计方案简介 1.1设计课程任务 1.2系统分析 1.3系统方案 1.4方案论证 2、硬件设计 2.1控制芯片的介绍 2.2硬件接线 2.2.1硬件接线接口 2.2.2硬件接线图 3、软件设计 3.1程序设计思路 3.2流程图 3.3源程序 3.4仿真结果 4、元件清单 5、心得体会

基于单片机的秒表课程设计 摘要 本设计的成品是在单片机最小系统的基础上增加显示电路和控制电路来完成数字式秒表的硬件电路的。电子秒表电路主要由AT89S51单片机最小系统电路、七段数码管动态显示电路和控制电路组成,它能实现八段数码显示和计时,能通过控制电路控制时间的暂停和开始。 关键字:AT89S51 数码管最小系统 1总体设计方案简介 1.1设计课题任务 设计一个具有特定功能的数字式秒表。用AT89C52设计一个2位LED 数码显示“秒表”,显示时间为00-59,另设计一个“开始”按钮和一个“复位”按钮。按键说明:按“开始”按键,开始计数,数码管从00开始每秒自动加一;按“复位”按键,系统清零,数码管显示00。 1.2系统分析 设计的电路主要是能多次计时,计时的多少通过显示电路出来,设计框图如图所示; 控制部 分技术和 存储部显示部分

1.3系统方案 利用AT89C52单片机设计数显定时器。此方案采用AT89C52单片机系统来实现。AT89C52芯片内含8KB 的EEPROM ,不需要外扩展存储器,可是系统整体结构更为简单。设计框图如图所示; 1.4方案论证 此方案是以AT89C52芯片为中心控制系统,可实现计时、清零等功能,大大提高了系统的智能化,也是的系统所测结果精度大大提高。所以此方案可行。 2硬件设计 2.1控制芯片的介绍 AT89S52是一种低功耗、高性能的片内含有4KB 快闪可编程/擦除只读存储器,的8位CMOS 微控制器,使用高密度、非易失存储技术制造, 外部控制开关 AT89C52 单 片 机 七段数码显示

黑白棋游戏课程设计

黑白棋程序源代码: #include "graphics.h" #include "stdio.h" #include "stdlib.h" #include "conio.h" #include "dos.h" #include "math.h" #define LEFT 0x4b00 #define RIGHT 0x4d00 #define DOWN 0x5000 #define UP 0x4800 #define ESC 0x011b #define ENTER 0x1c0d #define F1 0x3b00 #define F2 0x3c00 #define F3 0x3d00 #define F4 0x3e00 int a[8][8]={0},key,score1,score2;/*具体分数以及按键与存放棋子的变量*/ char playone[3],playtwo[3];/*两个人的得分转换成字符串输出*/ void playtoplay(void);/*人人对战函数*/ void DrawQp1(void); void DrawQp2(void); void DrawQp(void);/*画棋盘函数*/ void SetPlayColor(int x);/*设置棋子第一次的颜色*/ void MoveColor(int x,int y);/*恢复原来棋盘状态*/ int QpChange(int x,int y,int z);/*判断棋盘的变化*/ void DoScore(void);/*处理分数*/ void PrintScore(int n);/*输出成绩*/

单片机课程设计——基于C51简易计算器

单片机双字节十六进制减法实验设计 摘要 本设计是基于51系列的单片机进行的双字节十六进制减法设计,可以完成计 算器的键盘输入,进行加、减、3位无符号数字的简单运算,并在LED上相应的显示结果。 设计过程在硬件与软件方面进行同步设计。硬件方面从功能考虑,首先选择内部存储资源丰富的AT89C51单片机,输入采用5个键盘。显示采用3位7段共阴极LED动态显示。软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。编程语言方面从程序总体设计以及高效性和功能性对C语言和汇编语言进行比较分析,针对计算器四则运算算法特别是乘法和除法运算的实现,最终选用KEIL公司的μVision3软件,采用汇编语言进行编程,并用proteus 仿真。 引言 十六进制减法计算器的原理与设计是单片机课程设计课题中的一个。在完成理论学习和必要的实验后,我们掌握了单片机的基本原理以及编程和各种基本功能的应用,但对单片机的硬件实际应用设计和单片机完整的用户程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。 单片机课程设计既要让学生巩固课本学到的理论,还要让学生学习单片机硬件电路设计和用户程序设计,使所学的知识更深一层的理解,十进制加法计算器原理与硬软件的课程设计主要是通过学生独立设计方案并自己动手用计算机电路设计软件,编写和调试,最后仿真用户程序,来加深对单片机的认识,充分发挥学生的个人创新能力,并提高学生对单片机的兴趣,同时学习查阅资料、参考资料的方法。 关键词:单片机、计算器、AT89C51芯片、汇编语言、数码管、加减

目录 摘要 (01) 引言 (01) 一、设计任务和要求............................. 1、1 设计要求 1、2 性能指标 1、3 设计方案的确定 二、单片机简要原理............................. 2、1 AT89C51的介绍 2、2 单片机最小系统 2、3 七段共阴极数码管 三、硬件设计................................... 3、1 键盘电路的设计 3、2 显示电路的设计 四、软件设计................................... 4、1 系统设计 4、2 显示电路的设计 五、调试与仿真................................. 5、1 Keil C51单片机软件开发系统 5、2 proteus的操作 六、心得体会.................................... 参考文献......................................... 附录1 系统硬件电路图............................ 附录2 程序清单.................................. 一、设计任务和要求

单片机课程设计——基于C51简易计算器

单片机十进制加法计算器设计 摘要 本设计是基于51系列的单片机进行的十进制计算器系统设计,可以完成计 算器的键盘输入,进行加、减、乘、除3位无符号数字的简单四则运算,并在LED上相应的显示结果。 设计过程在硬件与软件方面进行同步设计。硬件方面从功能考虑,首先选择内部存储资源丰富的AT89C51单片机,输入采用4×4矩阵键盘。显示采用3位7段共阴极LED动态显示。软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。编程语言方面从程序总体设计以及高效性和功能性对C 语言和汇编语言进行比较分析,针对计算器四则运算算法特别是乘法和除法运算的实现,最终选用全球编译效率最高的KEIL公司的μVision3软件,采用汇编语言进行编程,并用proteus仿真。 引言 十进制加法计算器的原理与设计是单片机课程设计课题中的一个。在完成理论学习和必要的实验后,我们掌握了单片机的基本原理以及编程和各种基本功能的应用,但对单片机的硬件实际应用设计和单片机完整的用户程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。 单片机课程设计既要让学生巩固课本学到的理论,还要让学生学习单片机硬件电路设计和用户程序设计,使所学的知识更深一层的理解,十进制加法计算器原理与硬软件的课程设计主要是通过学生独立设计方案并自己动手用计算机电路设计软件,编写和调试,最后仿真用户程序,来加深对单片机的认识,充分发挥学生的个人创新能力,并提高学生对单片机的兴趣,同时学习查阅资料、参考资料的方法。 关键词:单片机、计算器、AT89C51芯片、汇编语言、数码管、加减乘除

目录 摘要 (01) 引言 (01) 一、设计任务和要求............................. 1、1 设计要求 1、2 性能指标 1、3 设计方案的确定 二、单片机简要原理............................. 2、1 AT89C51的介绍 2、2 单片机最小系统 2、3 七段共阳极数码管 三、硬件设计................................... 3、1 键盘电路的设计 3、2 显示电路的设计 四、软件设计................................... 4、1 系统设计 4、2 显示电路的设计 五、调试与仿真................................. 5、1 Keil C51单片机软件开发系统 5、2 proteus的操作 六、心得体会.................................... 参考文献......................................... 附录1 系统硬件电路图............................ 附录2 程序清单..................................

c++五子棋课程设计报告

福建农林大学计算机与信息学院 课程设计报告 课程名称:面向对象程序设计课程设计 课程设计题目:五子棋 姓名: 系:计算机 专业:软件工程 年级: 学号: 指导教师: 职称: 年月日

福建农林大学计算机与信息学院计算机类课程设计报告结果评定

目录 1.设计目的 (4) 2.设计要求 (4) 3.设计方案 (4) 4.设计内容 (7) 4.1系统的主要结构和类结构 (7) 4.2 (2)五子棋类的结构 (7) 4.3⑶系统工作流程介绍.................................................... 7错误!未定义书签。⑷类的介绍. (8) 4.5 (5) 各个模块的介绍 (8) 4.6 (6)程序运行图示 (14) 5.总结 (16) 参考文献 (17)

(a)1.设计目的 (1)加深我对面向对象程序基本的理解和掌握。 (2)熟练掌握基本流程图的绘制。 (3)熟练visio的一些操作方法。 (4)能够在调试程序中快速发现并排除程序中的错误。 (5)提高面向对象程序语言解决实际中的问题的能力。 (b)2.设计要求 五子棋是玩家在游戏棋盘上逐个输入黑子或白子的坐标,因此游戏要求在DOS界面生成一个可供操作的棋盘。通过输入坐标完成对应落子情况,在输入过程中判断落子是否正确、是否有一方胜利等情况。编写代码可以在VC6.0下编译通过。游戏要能实现五子棋游戏的简单操作。程序中要体现面向对象思想。 (c)3.设计方案 (必须包含系统功能说明、用例图和类图) 一、用例图 落子 基于用户的用例图

步数用例图 系统用例图 1)输出棋盘界面菜单及图像2)开始进入控制3)黑白棋正确输入格式控制4)判断黑白输赢控制5)正确计数对羿步数及下一步所要走的棋盘界面

相关文档
最新文档