1.题目

2.程序

main.c

******************************************************************************
* 文件名:17电赛试题
* 描  述:
* 作  者:思索与猫
* 日  期: 19/5/12
* 备  注:
*
******************************************************************************
#include <stc15f2k60s2.h>
#include <sys.h>void main()
{   CloseFucker();Timer0Init();while(1){ShowTable();KeyDriver();}
}

sys.c

#include<sys.h>void Timer0Init()       //1ms@12.000MHz
{AUXR |= 0x80;     TMOD &= 0xF0;      TL0 = 0x20;        TH0 = 0xD1;        TF0 = 0;       TR0 = 1;   ET0 = 1;EA = 1;
}void T0_time() interrupt 1
{static uint time_count = 0,sec_count = 0,PWM = 0;KeyScan();Display();if(mode == 0&&++time_count >= 3000)   //3秒换行{time_count = 0;x++;    if(x >= 4) x = 0;if(view == 2&&x >= 3) x = 0;ShowLed(x);                   //根据行数亮灯}if(mode == 1&&sec_flag == 1&&++sec_count >= 1000)   //计秒{sec_count = 0;sec++;if(sec >= 50) sec = 0;}if(mode == 2)            //序列信号发生器,使用PWM{if(++PWM >= 80) PWM = 0;if(PWM < 10){P10 = 1;}else if(PWM < 30){P10 = 0;}else if(PWM < 40){P10 = 1;}else if(PWM < 50){P10 = 0;}else if(PWM < 80){P10 = 1;}}
}void CloseFucker()
{P2 = P2&0x1f|0xa0;P0 = 0xaf;P2 = P2&0x1f;
}

sys.h

#ifndef __SYS_H_
#define __SYS_H_#include<stc15f2k60s2.h>
#include<fun.h>typedef unsigned char uchar;
typedef unsigned int uint;
//sys
void Timer0Init();
void CloseFucker();
//show
void Display();
void ShowTable();
void ShowLed(uchar led_dat);
//key
void KeyDriver();
void KeyAction(uchar keyvalue);
void KeyScan();extern uchar Array1[4][3];
extern uchar Array2[4][3];
extern uchar Array3[3][3];
extern uchar x;
extern uchar mode,view;
extern bit sec_flag;
extern uchar sec;#endif

display.c

#include<sys.h>
uchar code duan[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00,0x80};//10black,11-
uchar Table[8];
uchar Array1[4][3] = {0,0,0,0,0,0,0,0,0,0,0,0};
uchar Array2[4][3] = {0,0,0,0,0,0,0,0,0,0,0,0};
uchar Array3[3][3] = {0,0,0,0,0,0,0,0,0,};
uchar x = 0;
uchar sec = 0;void Display()
{static uchar index = 0;P2 = P2&0x1f|0xe0;P0 = 0xff;P2 = P2&0x1f;P2 = P2&0x1f|0xc0;P0 = 1<<index;P2 = P2&0x1f;P2 = P2&0x1f|0xe0;P0 = ~duan[Table[index]];P2 = P2&0x1f;index++;index &= 0x07;
}void ShowTable()
{if(mode == 0&&view == 0)      //矩阵显示界面{Table[0] = 10;Table[1] = Array1[x][0]/10;Table[2] = Array1[x][0]%10;;Table[3] = Array1[x][1]/10;;Table[4] = Array1[x][1]%10;;Table[5] = Array1[x][2]/10;; Table[6] = Array1[x][2]%10;;Table[7] = 10;}else if(mode == 0&&view == 1){Table[0] = 10;Table[1] = Array2[x][0]/10;Table[2] = Array2[x][0]%10;;Table[3] = Array2[x][1]/10;;Table[4] = Array2[x][1]%10;;Table[5] = Array2[x][2]/10;;  Table[6] = Array2[x][2]%10;;Table[7] = 10;}else if(mode == 0&&view == 2){Table[0] = 10;Table[1] = Array3[x][0]/10;Table[2] = Array3[x][0]%10;;Table[3] = Array3[x][1]/10;;Table[4] = Array3[x][1]%10;;Table[5] = Array3[x][2]/10;;  Table[6] = Array3[x][2]%10;;Table[7] = 10;}else if(mode == 1)       //计秒显示{Table[0] = 10;Table[1] = 10;Table[2] = 10;;Table[3] = sec/10;;Table[4] = sec%10;;Table[5] = 10;;   Table[6] = 10;;Table[7] = 10;}else if(mode == 2)       //序列信号发生器界面(自定义){Table[0] = 1;Table[1] = 0;Table[2] = 0;;Table[3] = 1;Table[4] = 0;;Table[5] = 1;;   Table[6] = 1;;Table[7] = 1;}}void ShowLed(uchar led_dat)
{P2 = P2&0x1f|0x80;P0 = ~led_dat;P2 = P2&0x1f;
}

key.c

#include<sys.h>
#define  add 55     //使用宏定义
#define  sort 56
#define  conv 57
#define  change 58
sbit Key_Out_1 = P3^0;
sbit Key_Out_2 = P3^1;
sbit Key_Out_3 = P3^2;
sbit Key_Out_4 = P3^3;sbit Key_In_1 = P4^4;
sbit Key_In_2 = P4^2;
sbit Key_In_3 = P3^5;
sbit Key_In_4 = P3^4;uchar KeySta[4][4] = {{1, 1, 1, 1},{1, 1, 1, 1},{1, 1, 1, 1},{1, 1, 1, 1}};
uchar KeyCodeMap[4][4] = {{0, 1, 2, change},    //键盘图{10, 11, 12, add},{20, 21, 22, sort},{30, 31, 32, conv}};
uchar mode = 0;
uchar view = 0;
bit sec_flag;void KeyDriver()
{uchar i = 0,j = 0;static uchar KeyBack[4][4] = {{1, 1, 1, 1},{1, 1, 1, 1},{1, 1, 1, 1},{1, 1, 1, 1}};for(i=0; i<4; i++){for(j=0; j<4; j++){if(KeySta[i][j] != KeyBack[i][j]){if(KeySta[i][j] != 0){KeyAction(KeyCodeMap[i][j]);}KeyBack[i][j] = KeySta[i][j];}}}
}   void KeyAction(uchar keyvalue)
{if(keyvalue == change)           //切换按钮{mode++;if(mode == 3) mode = 0;}if(mode == 0){if(keyvalue == sort)     //排序按钮{ArrayTwoSort();}else if(keyvalue == add) //加法按钮{view++;ShowLed(0x08);if(view >= 2){ArrayAdd();view = 0;}                                          }else if(keyvalue == conv)     //乘法按钮{view++;ShowLed(0x10);if(view == 2){ArrayConv();}    if(view >= 3) view = 0;}else{if(view == 0)        //矩阵元素加{Array1[keyvalue/10][keyvalue%10]++;if(Array1[keyvalue/10][keyvalue%10] >= 100) {Array1[keyvalue/10][keyvalue%10] = 0;}}else if(view == 1){Array2[keyvalue/10][keyvalue%10]++;if(Array2[keyvalue/10][keyvalue%10] >= 100) {Array2[keyvalue/10][keyvalue%10] = 0;}}                      }               }if(mode == 1){if(keyvalue == 21)       //计秒开始{sec_flag = 1;sec = 0;x = 0;}else if(keyvalue == 20)  //计秒结束{sec_flag = 0;}}}void KeyScan()
{static uchar KeyBuf[4][4] = {{0xff, 0xff, 0xff, 0xff},{0xff, 0xff, 0xff, 0xff},{0xff, 0xff, 0xff, 0xff},{0xff, 0xff, 0xff, 0xff}};uchar i = 0;static uchar keyout = 0;switch(keyout){case 0:Key_Out_1 = 0;Key_Out_4 = 1;break;case 1:Key_Out_2 = 0;Key_Out_1 = 1;break;case 2:Key_Out_3 = 0;Key_Out_2 = 1;break;case 3:Key_Out_4 = 0;Key_Out_3 = 1;break;}KeyBuf[keyout][0] = KeyBuf[keyout][0]<<1|Key_In_1;KeyBuf[keyout][1] = KeyBuf[keyout][1]<<1|Key_In_2;KeyBuf[keyout][2] = KeyBuf[keyout][2]<<1|Key_In_3;KeyBuf[keyout][3] = KeyBuf[keyout][3]<<1|Key_In_4;for(i=0; i<4; i++){if(KeyBuf[keyout][i] == 0x0f){KeySta[keyout][i] = 1;}if(KeyBuf[keyout][i] == 0x00){KeySta[keyout][i] = 0;}}keyout++;keyout &= 0x03;
}

fun.c

#include<sys.h>void ArrayTwoSort()         //二维矩阵排序(从大到小)
{uchar i,z = 0,temp=0;for(z=1; z<12; z++){for(i=0; i<11; i++){if(Array1[i/3][i%3]<Array1[(i+1)/3][(i+1)%3]){temp = Array1[i/3][i%3];Array1[i/3][i%3] = Array1[(i+1)/3][(i+1)%3];Array1[(i+1)/3][(i+1)%3] = temp;}}}
}void ArrayAdd()           //二维矩阵相加
{uchar i,j;for(i=0; i<4; i++){for(j=0; j<3; j++){Array1[i][j] += Array2[i][j];}}
}void ArrayConv()          //二维矩阵乘法
{uchar i,j,k;for (i = 0; i <= 2; i++) {for ( j = 0; j <= 2; j++) {for ( k = 0; k <= 1; k++) {Array3[i][j] += Array1[i+1][k] * Array2[k][j];}}}
}

fun.h

#ifndef __FUN_H_
#define __FUN_H_#include<sys.h>void ArrayTwoSort();
void ArrayAdd();
void ArrayConv();#endif

3.总结

这道题并没有很难的算法,即使不会大部分也能在网上找,一次简单练习。
序列信号发生器那部分可以也使用DA输出。

17年电子设计竞赛题相关推荐

  1. 毕业设计:电子设计大赛点阵电子显示屏(A题).pdf

    毕业设计:电子设计大赛点阵电子显示屏(A题).pdf 32个单片机类毕业设计集锦,给广大大四学生的福利,即将要毕业了,是不是要交毕业设计呢,关于电子设计,单片机,proteus等硬软件的毕业设计在闯客 ...

  2. 【电赛合集】19电磁炮.zip、17板球.zip、15风力摆.zip、13倒立摆.zip、(1994-2021)全国大学生电子设计竞赛历年真题.zip

    [电赛合集]19电磁炮.zip.17板球.zip.15风力摆.zip.13倒立摆.zip.(1994-2021)全国大学生电子设计竞赛历年真题.zip 电赛宝藏链接: 四天三夜,那布满着未知与紧迫感的 ...

  3. 全国大学生电子设计大赛 赛前准备

    何为电赛 电子设计大赛是高校"四大赛"之一,每两年一次(逢单数年电子设计大赛举办). 竞赛大约于九月初举办,历时四天三晚. 大赛参赛者主要是高校本科学生(也有一部分高职学生),三人 ...

  4. 快速准备电子设计大赛

    一.根据需求建立团队 第一节:比赛流程 省赛 报名.选题 出题 四天三夜制作作品的时间 提交作品.评审 综合评测 成绩占20分录入国赛成绩 国赛 复试 第二节:比赛团队组建 按照团队成员 队长(团队协 ...

  5. 2021年全国大学生电子设计竞赛重新启动通知及进度安排

    大家好,我是张巧龙,昨天晚上收到了电赛重新启动的通知. 2021年全国大学生电子设计竞赛 重新启动通知及进度安排 (电组字[2021]03号) 各赛区组织委员会.各有关高等学校: 根据全国疫情变化情况 ...

  6. 防热服的设计数学建模_全国大学生数学建模和电子设计赛,这所驻青高校获奖山东最多...

    全省百余高校参加全国数学建模竞赛,本科组32队获一等奖.78队获二等奖:青岛理工大学获本科组国家一等奖5项.二等奖7项,获山东赛区一等奖28项.二等奖17项,获奖数量山东第一.全国第二. 1月4日,2 ...

  7. [渝粤教育] 西南科技大学 电子设计EDA 在线考试复习资料

    电子设计EDA--在线考试复习资料 一.单选题 1. 执行菜单命令(   ),用户可以选定某个元件,使程序只对与该元件相连的网络进行自动布线. A.uto Routing/All B.uto Rout ...

  8. 电子设计比赛的STM32知识准备

    电子设计比赛的STM32知识准备 欢迎使用观看我的新手教程 第一天(2021年7月13日) 第二天(2021年7月14日) 2021年7月15日 2021年7月17日 之后的每一天 (到2021年7月 ...

  9. 第七届科技节电子设计大赛须知

    一.背景意义 云南大学信息学院主要是以电子信息方向科学知识教学与研究的理工科学院,电子设计正是对同学们所学的基础理论知识与实际应用相结合一项活动. 全国大学生电子设计竞赛是教育部倡导的大学生学科竞赛之 ...

最新文章

  1. camera理论基础和工作原理【转】
  2. tensorflow--卷积神经网络
  3. Hadoop上路_11-HDFS流程演示
  4. maven常用的命令(window控制台和linux命令是一致的)
  5. Git 代码分支管理 / 版本管理
  6. 如何为CentOS 7配置静态IP地址
  7. [C++] 构造函数 which is of non-class type
  8. 数据类型的提升(promotion)
  9. 记录学习antd design pro dva的过程,主要记错, 多图预警,如有理解偏差,忘指出,多谢!...
  10. 2019年上海理工大学《高等代数》试题和答案——解题人(蔡宇)
  11. Vue 实现 Chrome 小恐龙游戏
  12. 揭秘抖音快手刷赞刷评论骗局,揭秘抖音刷赞兼职套路
  13. 下终南山过斛斯山人宿置酒
  14. 博客搭建六:绑定自己域名的方法
  15. 中医药大学计算机考试题,浙江中医药大学2013年级研究生《计算机应用》期末考试复习题...
  16. 网站服务器拥挤如何进去,教你一招:有效解决网络拥挤的办法!
  17. 中文输入法切换死机的解决办法
  18. 用cxf开发一个可以被安卓调用的接口
  19. 圆锥形怎么画_素描教程-圆锥体的绘画步骤
  20. python pptp链接_iptables防护CC和DDos和PPTP穿透脚本

热门文章

  1. bat脚本对文件目录的复制和移动
  2. 古老CPU启示录-晶体管之路
  3. 猿创征文 | linux的gdb 和g++
  4. ecshop 商品详情页商品放大镜功能
  5. uniapp 使用秋云uCharts图表组件、echarts图表组件
  6. php禁止某个IP,PHP_php禁止某ip或ip地址段访问的方法,本文实例讲述了php禁止某ip或ip - phpStudy...
  7. Spring Cloud Turbine集群监控一直Loading问题
  8. 斯雪明教授:如何应对高发的区块链安全问题?
  9. 【好的技术员网站】蓝飞技术部落格==蓝飞技术部落格==蓝飞技术部落格
  10. 华为Hybird接口配置实验