这是第三次写了,都挺顺畅的,就是长按键那里卡了一下,就是发现还可以把按键写在定时器里,这样就方便多了,我之前写的长按键确实麻烦了些。

main.c

#include "sys.h"
#include "iic.h"uint volt1,volt3;
//void Led();
void main()
{InitSystem();InitTimer0();Timer1Init();while(1){KeyScans();if(t200ms){t200ms = 0;Operate_key_val();}ReadAIN1();ReadAIN3();volt1 = rd1*1.96;volt3 = rb2*1.96;DisplaySMG();if((puse == 0))Led();}
}void Led()
{if(volt3_p != 0){if(volt3 > volt3_p)OperateLed(1,0);elseOperateLed(1,1);}if(freq_p != 0){if(freq > freq_p)OperateLed(2,0);elseOperateLed(2,1);}if(interface == 0)OperateLed(3,0);elseOperateLed(3,1);if(interface == 1)OperateLed(4,0);elseOperateLed(4,1);if(interface == 2)OperateLed(5,0);elseOperateLed(5,1);
}

sys.c

#include "sys.h"void Select_74HC138(uchar channel)
{switch(channel){case 0: P2 = P2 & 0X1F; break;case 4: P2 = (P2 & 0X1F) | 0X80; break;case 5: P2 = (P2 & 0X1F) | 0XA0; break;case 6: P2 = (P2 & 0X1F) | 0XC0; break;case 7: P2 = (P2 & 0X1F) | 0XE0; break;}
}void InitSystem()
{Select_74HC138(4);P0 = 0XFF;Select_74HC138(5);P0 = 0X00;Select_74HC138(0);
}void Delay(uint ms)
{uint i;for(ms; ms > 0; ms--)for(i = 921; i > 0; i--);
}void OperateLed(uchar who,status)
{static uchar temp;uchar zt;switch(status){case 0: temp = temp | _crol_(0x01,who-1);P0 = ~temp;break;case 1:if(who == 0xff){P0 = 0XFF;temp = 0;}else{zt = (~temp) | _crol_(0x01,who-1);if(temp != (~zt))temp = ~zt;P0 = ~temp;}break;case 2: P0 = ~who;temp = who;break;default: break;}Select_74HC138(4);Select_74HC138(0);
}uint freq_count;void InitTimer0()
{AUXR |= 0X80;TMOD &= 0XF0;TMOD |= 0X04;TH0 = 0XFF;TL0 = 0XFF;TF0 = 0;TR0 = 1;ET0 = 1;EA = 1;
}void ServiceTimer0() interrupt 1
{freq_count++;
}uchar t1 = 0;
uchar count = 0;
uchar puse = 0;
uchar t200ms = 0;void Timer1Init()     //50毫秒@12.000MHz
{AUXR &= 0xBF;     //定时器时钟12T模式TMOD &= 0x0F;      //设置定时器模式TL1 = 0xB0;       //设置定时初值TH1 = 0x3C;        //设置定时初值TF1 = 0;       //清除TF1标志TR1 = 1;      //定时器1开始计时ET1 = 1;EA = 1;
}void ServiceTimer1() interrupt 3
{t1++;if(t1 % 4 == 0){t200ms = 1;}if(t1 == 20){t1 = 0;freq = freq_count;freq_count = 0;}if(puse == 0){if(s7 == 0){count++;if(count == 40){count = 0;Select_74HC138(4);P0 = 0XFF;Select_74HC138(0);puse = 1;}}}if(puse == 1){if(s7 == 0){count++;if(count == 40){count = 0;puse = 0;if(puse == 0)Led();}}}
}

nixie.c

#include "sys.h"uchar code nixie[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x8e,0xc8,0xc1,0xbf,0xff};uint freq;
uint cycle;
uchar channel = 1;
uchar interface;void DisplayBit(uchar pos,value,bit k)
{P0 = 0X00;Select_74HC138(6);Select_74HC138(0);if(k)P0 = nixie[value] & 0x7f;elseP0 = nixie[value];Select_74HC138(7);Select_74HC138(0);P0 = _crol_(0x01,pos);Select_74HC138(6);Select_74HC138(0);Delay(1);
}void DisplayFreq()
{DisplayBit(0,10,0);if(freq > 999999)DisplayBit(1,freq / 1000000,0);if(freq > 99999)DisplayBit(2,freq / 100000 % 10,0);if(freq > 9999)DisplayBit(3,freq / 10000 % 10,0);if(freq > 999)DisplayBit(4,freq / 1000 % 10,0);if(freq > 99)DisplayBit(5,freq / 100 % 10,0);if(freq > 9)DisplayBit(6,freq / 10 % 10,0);DisplayBit(7,freq % 10,0);
}void DisplayCycle()
{cycle = 1000000 / freq;DisplayBit(0,11,0);if(cycle > 999999)DisplayBit(1,cycle / 1000000,0);if(cycle > 99999)DisplayBit(2,cycle / 100000 % 10,0);if(cycle > 9999)DisplayBit(3,cycle / 10000 % 10,0);if(cycle > 999)DisplayBit(4,cycle / 1000 % 10,0);if(cycle > 99)DisplayBit(5,cycle / 100 % 10,0);if(cycle > 9)DisplayBit(6,cycle / 10 % 10,0);DisplayBit(7,cycle % 10,0);
}void DisplayVolt()
{DisplayBit(0,12,0);DisplayBit(1,13,0);DisplayBit(2,channel,0);if(channel == 1){DisplayBit(5,volt1 / 100,1);DisplayBit(6,volt1 / 10 % 10,0);DisplayBit(7,volt1 % 10,0);}else if(channel == 3){DisplayBit(5,volt3 / 100,1);DisplayBit(6,volt3 / 10 % 10,0);DisplayBit(7,volt3 % 10,0);}
}void DisplaySMG()
{switch(interface){case 0: DisplayFreq(); break;case 1: DisplayCycle(); break;case 2: DisplayVolt(); break;}
}

key.c

#include "sys.h"uchar key_val = 20;
uint freq_p;
uint volt3_p;void KeyScans()
{if(key_val == 20){if(s4 == 0){Delay(10);key_val = 4;while(s4 == 0){DisplaySMG();}}if(s5 == 0){Delay(10);key_val = 5;while(s5 == 0){DisplaySMG();}}if(s6 == 0){Delay(10);key_val = 6;while(s6 == 0){DisplaySMG();}}if(s7 == 0){Delay(10);key_val = 7;while(s7 == 0){DisplaySMG();}}}
}void Operate_key_val()
{if(key_val != 20){switch(key_val){case 4:interface = (interface + 1) % 3;if(interface == 0)channel = 1;break;case 5:if(interface == 2){if(channel == 1)channel = 3;else if(channel == 3)channel = 1;}break;case 6: volt3_p = volt3;break;case 7:freq_p = freq;break;}}key_val = 20;
}

蓝桥杯单片机12届第二场相关推荐

  1. 蓝桥杯单片机第十一届第一场省赛-多功能电压测量装置

    九层妖塔 起于垒土 ● 改编自国信长天蓝桥杯官方蓝皮书例程,按照自己的习惯进行了补充和修改 蓝桥杯单片机第十一届第一场省赛-多功能电压测量装置 Notes1:矩阵按键的灵活使用 Notes2:AT24 ...

  2. 蓝桥杯单片机14届省赛

    蓝桥杯单片机14届省赛代码(省一) 欢迎使用Markdown编辑器 main.c #include "HC138.h" #include "PCF8591.h" ...

  3. 蓝桥杯 省赛 python_第十一届蓝桥杯软件省级大赛第二场python3,类省赛,Python3

    试题 A: 门牌制作 本题总分:5 分 [问题描述] 小蓝要为一条街的住户制作门牌号. 这条街一共有 2020 位住户,门牌号从 1 到 2020 编号. 小蓝制作门牌的方法是先制作 0 到 9 这几 ...

  4. 蓝桥杯第12届第三次模拟

    1.问题描述 请问在 1 到 2020 中,有多少个数与 2020 互质,即有多少个数与 2020 的最大公约数为 1. 这题我是直接暴力算的. 代码如下: public class Main { p ...

  5. 第十一届蓝桥杯java B组第二场-试题A: 门牌制作

    文章目录 一.题目 二.解释说明 三.代码实例 四.题目结果 一.题目 试题 A: 门牌制作(5分) [问题描述] 小蓝要为一条街的住户制作门牌号. 这条街一共有 2020 位住户,门牌号从 1 到 ...

  6. 蓝桥杯第12届java A组,《直线》

    为了去除重复的直线,一般用斜截式来表示直线,本题采用分数的形式表示斜率和截距 import java.util.*;class Point{int x;int y;public Point(int x ...

  7. 蓝桥杯单片机第十三届第二场

    第十三届蓝桥杯单片机第二场 文章目录 第十三届蓝桥杯单片机第二场 前言 一.赛题分析 二.程序调试步骤 三.部分源程序 主函数部分 DAC处理函数 数码管处理函数 ADC处理函数 超声波处理函数 LE ...

  8. 蓝桥杯单片机第十三届第二场考后归纳总结

    提示:一个第十三届蓝桥杯单片机  考生的考后总结 文章目录 前言 一.第十三届考的是什么? 二.数据代码 总结 一.第十三届考的是什么? 1.电位器RB2的电压测量,用DAC输出 2.超声波测距 3. ...

  9. 被十三届第二场蓝桥杯背刺了

    考的是AD/DA.超声波哭了!十三年省赛我都写个遍都没有考过超声波,为什么第一场比赛和第二次差距这么大? 国赛才会有的模块,现在在省赛这里考了,相信大家第一眼都是蒙的状态,如果机器阅卷的话想办法解决就 ...

最新文章

  1. 仅需10分钟:开启你的机器学习之路
  2. openCV 图像相加,位运算,协方差,绝对值,比较
  3. jdom 插入 修改 删除
  4. Eclipse 部分快捷键
  5. model模型php,thinkphp的model模型的设计经验总结
  6. Guava RateLimiter限流原理解析
  7. html5怎么圆圈怎么打开,HTML5动感圆圈
  8. mysql内存机制_MySQL内存管理机制
  9. js原生实现贪吃蛇(解决连续键盘事件)
  10. ubuntu16.04安装NIVIDIA显卡驱动,cuda8.0,cuDNN6.0以及基于Anaconda安装Tensorflow-GPU
  11. iOS通过切片仿断点机制上传文件
  12. Nginx服务器、Nginx虚拟主机、Nginx反向代理
  13. 集合框架-Collection与List集合
  14. r720换固态硬盘后如何重装系统_联想R720重装Winddows10无法识别固态硬盘咋办
  15. Memory ordering in some architectures
  16. case when then else end 及cheak约束
  17. 迟来的2015年终总结
  18. web端自动化测试1--selenium基础
  19. java 中介者模式
  20. swap分区、硬盘和磁盘

热门文章

  1. 星辰变最后鸿蒙,星辰变最后的结局是什么
  2. 一阶欧拉近似matlab,MATLAB改进欧拉法与四阶龙格-库塔求解一阶常微分方程.doc
  3. 转载SQL Server 数据库的性能优化
  4. 危险化学品事故爬虫解析
  5. 用Python吐槽国产综艺节目!
  6. 2021Vivo千镜杯
  7. 信号与系统sa函数求积分_信号与系统
  8. c 语言easyx图形库飞机大战的源码
  9. 自我管理五维度,遇见更好的自己
  10. 海报设计PSD模板——抖音Glitch故障艺术风格