网站建设包含的内容,wordpress 分类 文章列表,网站大幅广告,在那个网站做ppt可以赚钱一、系统方案 本设计采用PIC单片机作为主控制器#xff0c;矩阵键盘控制#xff0c;比分#xff0c;计时控制#xff0c;24秒#xff0c;液晶12864显示。 二、硬件设计 原理图如下#xff1a; 三、单片机软件设计 1、首先是系统初始化
2、液晶显示程序 /*************…一、系统方案 本设计采用PIC单片机作为主控制器矩阵键盘控制比分计时控制24秒液晶12864显示。 二、硬件设计 原理图如下 三、单片机软件设计 1、首先是系统初始化
2、液晶显示程序 /******************************************************************************************** 函数名称Lcd_Write_Command() 功 能写指令代码 入口参数无 出口参数无 */ void Lcd_Write_Command(uchar temp) { porttemp; rs0; rw0; e1; e0; } / 函数名称Lcd_Write_Byte() 功 能写数据 入口参数无 出口参数无 *****************/ void Lcd_Write_Byte(uchar temp) { porttemp; rs1; rw0; e1; e0; } / *名称:Lcd_Character_16X8( bit bit_flag, uchar x, uchar y, uchar code *point ) *功能:显示16X8字符(字母) *入口参数: *出口参数: *说明:bit_flag 1 正常显示 bit_flag 0 黑白反相显示 / void Lcd_Character_16X8( uchar bit_flag, uchar x, uchar y, uchar point ) { uchar i , j,temp; tempy; if( bit_flag ) { for( i0; i2; i ) { xi; ytemp; for( j0;j8;j ) { Lcd_Set_X_Y( x, y ); y; Lcd_Write_Byte( point[ i8 j] ); } } } else { for( i 0; i 2; i ) { x i; y temp; for( j 0; j 8; j ) { Lcd_Set_X_Y( x, y ); y; Lcd_Write_Byte( ~point[ i * 8 j ] ); } } } } / 名称Lcd_Character_16X16( bit bit_flag, uchar x, uchar y, uchar code *point ) 功能显示16*16字符汉字 入口参数x y data 出口参数无 *说明:bit_flag 1 正常显示 bit_flag 0 黑白反相显示 ****************************************************************************/ void Lcd_Character_16X16( uchar bit_flag, uchar x, uchar y, uchar point ) { uchar i,j,temp ; tempy; if( bit_flag ) { for( i0; i2; i ) { xi; ytemp; for( j0;j16;j ) { Lcd_Set_X_Y( x, y ); y; Lcd_Write_Byte( point[ i16 j] ); } } } else { for( i 0; i2; i ) { x i; y temp; for( j 0; j 16; j ) { Lcd_Set_X_Y( x, y ); y; Lcd_Write_Byte( ~ point[ i * 16 j ] ); } } } } 3、按键程序 RD40;//第一行赋值低电平 RD51;//其他行赋值高电平 RD61;//其他行赋值高电平 RD71;//其他行赋值高电平 if(RD00)//判断第一列是否有按键按下 { delay_uint(10);//延时消去按键抖动 if(RD00)//再次判断按下是否按下 { key_can0;//按键键盘 changshu;//场数加1 if(changshu4) changshu0;//场数大于4清零 while(!RD0)//判断按键可释放 { } } } if(RD10)//第二列 { delay_uint(10);//延时消去按键抖动 if(RD10) { key_can1; en_flag11; while(!RD1) { }}} if(RD20)//第3列 { delay_uint(10);//延时消去按键抖动 if(RD20) { key_can2; en_flag10;en_flag20;while(!RD2){}}} if(RD30)//第四列 { delay_uint(10);//延时消去按键抖动 if(RD30) { key_can3; flag!flag;//交换场地 while(!RD3) { }}} 4、核心算法程序 /*主程序函数 ************************************************/ void main(void) { TRISD0x0f;//RD高四位输出低四位输入 TRISC0x00;//输出设置 TRISB0x00;//输出设置 Lcd_Initial(); //LCD初始化 TMR1L(65536-12500)%256; //定时12500个时钟初始值 TMR1H(65536-12500)/256; //定时12500个时钟初始值 GIE1; //总中断允许 PEIE1; //外围功能模块中断允许 TMR1IE1; //TMR1中断允许 TMR1ON1; //启动TMR1 while(1) { Lcd_Character_16X16(1,0,8,data_shuju[0]); //显示蓝 Lcd_Character_16X16(1,0,24,data_shuju[1]); //显示球 Lcd_Character_16X16(1,0,40,data_shuju[2]); //显示计 Lcd_Character_16X16(1,0,56,data_shuju[3]); //显示分 Lcd_Character_16X16(1,0,70,data_shuju[4]); //显示器 Lcd_Character_16X16(1,2,0,data_shuju[5]); //显示第Lcd_Character_16X8( 1,2,16, data_shuju1[changshu]);//显示场数Lcd_Character_16X16(1,2,24,data_shuju[6]); //显示场Lcd_Character_16X8( 1,2,48, data_shuju1[fen/10]);//显示倒计时分的十位Lcd_Character_16X8( 1,2,56, data_shuju1[fen%10]);//显示倒计时分的个位Lcd_Character_16X8( 1,2,64, data_shuju1[12]);//显示Lcd_Character_16X8( 1,2,72, data_shuju1[miao/10]);//显示倒计时秒的十位Lcd_Character_16X8( 1,2,80, data_shuju1[miao%10]); //显示倒计时秒的个位Lcd_Character_16X8( 1,4,72, data_shuju1[ss/10]);//显示倒计时秒的十位Lcd_Character_16X8( 1,4,80, data_shuju1[ss%10]); //显示倒计时秒的个位key();//按键检测if(flag0)//场数交换{Lcd_Character_16X8( 1,4,0 ,data_shuju1[10]);//A队Lcd_Character_16X8( 1,4,8 ,data_shuju1[12]);//冒号Lcd_Character_16X8( 1,4,16, data_shuju1[fen1/100]);//A队分数千位Lcd_Character_16X8( 1,4,24, data_shuju1[fen1%100/10]);//分数十位Lcd_Character_16X8( 1,4,32, data_shuju1[fen1%10]);//分数个位Lcd_Character_16X8( 1,6,0, data_shuju1[11]);//B队Lcd_Character_16X8( 1,6,8 ,data_shuju1[12]);//冒号Lcd_Character_16X8( 1,6,16, data_shuju1[fen2/100]);//B队分数千位Lcd_Character_16X8( 1,6,24, data_shuju1[fen2%100/10]);//分数十位Lcd_Character_16X8( 1,6,32, data_shuju1[fen2%10]);//分数个位}else// 交换显示{Lcd_Character_16X8( 1,6,0 ,data_shuju1[10]);//A队Lcd_Character_16X8( 1,6,8 ,data_shuju1[12]);//冒号Lcd_Character_16X8( 1,6,16, data_shuju1[fen1/100]);//A队分数千位Lcd_Character_16X8( 1,6,24, data_shuju1[fen1%100/10]);//分数十位Lcd_Character_16X8( 1,6,32, data_shuju1[fen1%10]);//分数个位Lcd_Character_16X8( 1,4,0, data_shuju1[11]);//B队Lcd_Character_16X8( 1,4,8 ,data_shuju1[12]);//冒号Lcd_Character_16X8( 1,4,16, data_shuju1[fen2/100]);//B队分数千位Lcd_Character_16X8( 1,4,24, data_shuju1[fen2%100/10]);//分数十位Lcd_Character_16X8( 1,4,32, data_shuju1[fen2%10]);//分数个位}} } 四、proteus仿真设计 Proteus软件是一款应用比较广泛的工具它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况这样就可以通过软件仿真来验证我们设计的方案有没有问题如果有问题可以重新选择器件连接器件直到达到我们设定的目的避免我们搭建实物的时候如果当初选择的方案有问题我们器件都已经焊接好了再去卸载下去再去焊接新的方案的器件测试这样会浪费人力和物力也给开发者带来一定困惑Proteus仿真软件就很好的解决这个问题我们在设计之初就使用该软件进行模拟仿真测试选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸焊接实物调试最终完成本设计的作品。