main.c

#include "mycode.h"
unsigned short int Timer1_count=0,Timer2_count=0,Timer0_count=0;//timer0计数
unsigned short int Timer_count=0;
unsigned char key_value=0;//key键值获取
unsigned char LED_status=1;//LED灯指示灯功能开启
unsigned short int  Save_hz=0;//保存的hz
unsigned short int  Save_ad=0;//保存的电压值
void main()
{Systeam_Init();//系统初始化Timer0Init();Timer1Init();EA = 1;while(1){if(ad_flag==1){dat1=(int)Read_AD(chanl)/51.0*100;ad_flag=0;}key_value=Key_scan();switch(key_value){case SW_4_press:page_flag++;if(page_flag>=4) page_flag=1;break;case SW_5_press:if(chanl==1) chanl=3;else chanl=1;break;case SW_6_press:Save_ad=dat1;break;case SW_7_press:Save_hz=Hz;break;} key_value=0;if(LED_status==1)//LED灯指示灯功能开启{switch(page_flag){case 1:LATCH(4,0xfb);break;case 2:LATCH(4,0xf7);break;case 3:LATCH(4,0xef);break;}if(chanl==3)if(Save_ad<dat1) {P2=(P2&0x1F|(4<<5));LED1=0;}if(Save_hz<Hz) {P2=(P2&0x1F|(4<<5));LED2=0;}}if(LED_status==0)//LED灯指示灯功能关闭{LATCH(4,0xff);//LED灯全关            }}
}void Timer0() interrupt 1
{Timer0_count++;
}
void Timer1_1() interrupt 3
{Timer1_count++;if(Timer1_count>=20)//刷新数码管{Timer1_count=0;}Timer2_count++;if(Timer2_count%250==0)ad_flag=1;if(Timer2_count>=500)//1ms频率  500ms刷新一次{Timer2_count=0;Hz=Timer0_count*2;Timer0_count=0;}if(LED_flag==1){Timer_count++;if(Timer_count>=1000){LED_status=!LED_status;}}
}

mycode.c

#include "mycode.h"
unsigned char code smg_d[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
///.. 11  F
0x7f,0xff,0x8e,0xc8,0xc1,0xbf
};
bit ad_flag=0;
unsigned int Hz=0;//频率数据
unsigned int Us=0;//周期数据
unsigned char chanl=1;
unsigned char page_flag=1;//页面标志
bit LED_flag=0;unsigned int dat1=0;//电压值
void Smg_show(void)
{switch(page_flag){case 1:page_1();break;case 2:page_2();break;case 3:page_3();break;}
}
void page_1(void)
{unsigned char len=0;unsigned int  t;display(0,12);//显示Ft=Hz;while(t){    t/=10; len++;}//计算数据长度while(len){display(8-len,Hz%((int)pow(10,len))/((int)pow(10,len-1)));len--;}if(Hz==0) display(7,0);LATCH(COM,0xFF);LATCH(SEG,0xFF);
}void page_2(void)
{unsigned char len=0;unsigned int  t;display(0,13);//显示NUs=100000/Hz;t=Us;while(t){  t/=10; len++;}//计算数据长度while(len){display(8-len,Us%((int)pow(10,len))/((int)pow(10,len-1)));len--;}if(Us==0) display(7,0);LATCH(COM,0xFF);LATCH(SEG,0xFF);
}void page_3(void)
{display(0,14);//显示Ndisplay(1,15);//显示_display(2,chanl);//显示通道display(5,dat1/100);display(5,10);//显示小数点display(6,dat1%100/10);display(7,dat1%10);LATCH(COM,0xFF);LATCH(SEG,0xFF);
}void display(unsigned char c,unsigned char dat)
{LATCH(SEG,0xff);LATCH(COM,1<<c);LATCH(SEG,smg_d[dat]);delay_ms(1);
}unsigned char Key_scan(void)
{unsigned char key_v=0;if(!SW_4){delay_ms(10);if(!SW_4){while(!SW_4) Smg_show();return SW_4_press;}}if(!SW_5){delay_ms(10);if(!SW_5){while(!SW_5) Smg_show();return SW_5_press;}}if(!SW_6){delay_ms(10);if(!SW_6){while(!SW_6) Smg_show();return SW_6_press;}}if(!SW_7){delay_ms(10);if(!SW_7){while(!SW_7) {Smg_show();LED_flag=1;}Timer_count=0;LED_flag=0;return SW_7_press;}}Smg_show();return 0;
}void Timer0Init(void)      //1微秒@12.000MHz
{AUXR |= 0x80;     //定时器时钟1T模式TMOD &= 0xF0;       //设置定时器模式TMOD |= 0x04;     TL0 = 0xFF;        //设置定时初始值TH0 = 0xFF;       //设置定时初始值TF0 = 0;      //清除TF0标志TR0 = 1;      //定时器0开始计时ET0 = 1;
}void Timer1Init(void)      //1毫秒@12.000MHz
{AUXR |= 0x40;     //定时器时钟1T模式TMOD &= 0x0F;       //设置定时器模式TL1 = 0x20;       //设置定时初始值TH1 = 0xD1;       //设置定时初始值TF1 = 0;      //清除TF1标志TR1 = 1;      //定时器1开始计时ET1 = 1;
}void Systeam_Init(void)
{LATCH(4,0xff);//LED灯全关LATCH(5,0x00);//ULN2003 关闭LATCH(0,0x00);
}void delay_us(unsigned int t)      //@12.000MHz
{while(t--){_nop_();_nop_();_nop_();_nop_();}
}void delay_ms(unsigned int t)      //@12.000MHz
{unsigned char i, j;while(t--){i = 12;j = 169;do{while (--j);} while (--i);}
}

mycode.h

#ifndef __MYCODE_H__
#define __MYCODE_H__
#include <reg52.h>
#include <stdio.h>
#include <intrins.h>
#include <string.h>
#include <math.h>
#include "iic.h"sfr AUXR = 0x8e;
#define COM         6
#define SEG         7
#define LATCH(x,y) {P2=(P2&0x1F|(x<<5)); P0=y;}
sbit SW_4=P3^3;
sbit SW_5=P3^2;
sbit SW_6=P3^1;
sbit SW_7=P3^0;
sbit LED1=P0^0;
sbit LED2=P0^1;
extern bit LED_flag;
extern bit ad_flag;
extern unsigned short int Timer_count;
extern  unsigned int dat1;//电压值
#define SW_4_press  1
#define SW_5_press  2
#define SW_6_press  3
#define SW_7_press  4
extern unsigned int Hz;//频率数据
extern unsigned int Us;//周期数据
extern unsigned char page_flag;//页面标志
extern unsigned char chanl;//采集通道void page_1(void);
void page_2(void);
void page_3(void);
unsigned char Key_scan(void);
void display(unsigned char c,unsigned char dat);
void delay_us(unsigned int t);      //@12.000MHz
void delay_ms(unsigned int t);      //@12.000MHz
void Systeam_Init(void);
void Timer0Init(void);      //1毫秒@12.000MHz
void Timer1Init(void)   ;
void Smg_show(void);
#endif

iic.c

#include "iic.h"#define DELAY_TIME 5//I2C总线内部延时函数
void IIC_Delay(unsigned char i)
{do{_nop_();}while(i--);
}//I2C总线启动信号
void IIC_Start(void)
{SDA = 1;SCL = 1;IIC_Delay(DELAY_TIME);SDA = 0;IIC_Delay(DELAY_TIME);SCL = 0;
}//I2C总线停止信号
void IIC_Stop(void)
{SDA = 0;SCL = 1;IIC_Delay(DELAY_TIME);SDA = 1;IIC_Delay(DELAY_TIME);
}//发送应答或非应答信号
void IIC_SendAck(bit ackbit)
{SCL = 0;SDA = ackbit;                    IIC_Delay(DELAY_TIME);SCL = 1;IIC_Delay(DELAY_TIME);SCL = 0; SDA = 1;IIC_Delay(DELAY_TIME);
}//等待应答
bit IIC_WaitAck(void)
{bit ackbit;SCL  = 1;IIC_Delay(DELAY_TIME);ackbit = SDA;SCL = 0;IIC_Delay(DELAY_TIME);return ackbit;
}//I2C总线发送一个字节数据
void IIC_SendByte(unsigned char byt)
{unsigned char i;for(i=0; i<8; i++){SCL  = 0;IIC_Delay(DELAY_TIME);if(byt & 0x80) SDA  = 1;else SDA  = 0;IIC_Delay(DELAY_TIME);SCL = 1;byt <<= 1;IIC_Delay(DELAY_TIME);}SCL  = 0;
}//I2C总线接收一个字节数据
unsigned char IIC_RecByte(void)
{unsigned char i, da;for(i=0; i<8; i++){   SCL = 1;IIC_Delay(DELAY_TIME);da <<= 1;if(SDA) da |= 1;SCL = 0;IIC_Delay(DELAY_TIME);}return da;
}unsigned char Read_AD(unsigned char chanl)
{unsigned char dat;IIC_Start();IIC_SendByte(0x90);IIC_WaitAck();IIC_SendByte(chanl);IIC_WaitAck();IIC_Start();IIC_SendByte(0x91);IIC_WaitAck();dat=IIC_RecByte();IIC_WaitAck();IIC_Stop();return dat;
}

iic.h

#ifndef _IIC_H
#define _IIC_H#include "reg52.h"
#include "intrins.h"sbit SDA = P2^1;
sbit SCL = P2^0;void IIC_Start(void);
void IIC_Stop(void);
bit IIC_WaitAck(void);
void IIC_SendAck(bit ackbit);
void IIC_SendByte(unsigned char byt);
unsigned char IIC_RecByte(void);
unsigned char Read_AD(unsigned char chanl);
#endif

蓝桥杯单片机:13届省赛模拟相关推荐

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

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

  2. 【蓝桥杯】第十三届蓝桥杯单片机第二次省赛 代码程序

    第十三届蓝桥杯单片机第二次省赛 题目 hex文件 代码 工程文件 B站视频 更多资料 题目 历届的省赛和国赛的题目我已经在前面的文章(点击查看)里给大家分享了(网盘资源),需要的话,直接去下载,我在这 ...

  3. 蓝桥杯第3届省赛(单片机)_自动售水机

    蓝桥杯第3届省赛(单片机)_自动售水机 题目 这是2012年蓝桥杯的省赛的题目,也是单片机第一次加入蓝桥杯比赛系列,由于是初次加入蓝桥杯,所以这次比赛的自动售水机的题目(自动售水机)也比较简单,主要考 ...

  4. 蓝桥杯单片机——第十二届蓝桥杯单片机第一场省赛

    蓝桥杯单片机--第十二届蓝桥杯单片机第一场省赛 目录 蓝桥杯单片机--第十二届蓝桥杯单片机第一场省赛 一.赛题分析 二.问题总结 三.代码 一.赛题分析 前两天实验室的学妹把开发板还给我了,刚好今天没 ...

  5. 计蒜客 2020 蓝桥杯大学 A 组省赛模拟赛 (一)题目及解析

    新手,欢迎交流,剩下D题不知如何下手,望大佬指教. 计蒜客 2020 蓝桥杯大学 B 组省赛模拟赛 (一)题目及解析 文章目录 A. 结果填空:计算周长 B. 结果填空:七巧板 C. 结果填空:苹果 ...

  6. 蓝桥杯第十三届国赛PythonB组题解

    蓝桥杯第十三届国赛PythonB组题解 [写在前边] 这次的题还是比较难的,只做出来7道,交上去6道,还有一半是暴力做的

  7. 【蓝桥杯第六届省赛题-简易温度采集与控制装置】

    蓝桥杯第六届省赛题-简易温度采集与控制装置 #include "reg52.h" #include "onewire.h" #include "int ...

  8. Python代码解蓝桥杯第十三届省赛(C/C++大学B组)赛题

    Python代码解蓝桥杯第十三届省赛(C/C++大学B组)赛题. [学习的细节是欢悦的历程] Python 官网:https://www.python.org/ Free:大咖免费"圣经&q ...

  9. 计蒜客 2020 蓝桥杯大学 B 组省赛模拟赛 (一)题目及解析

    新手,欢迎交流,更新完毕. 计蒜客 2020 蓝桥杯大学 A 组省赛模拟赛 (一)题目及解析 文章目录 A. 结果填空:有趣的数字 B. 结果填空:爬楼梯 C. 结果填空:七巧板 D. 结果填空:苹果 ...

  10. 第十届蓝桥杯单片机组(省赛)——试题解答

    前言 本人曾在第十三届蓝桥杯大赛单片机组中获得国一,以下是我在准备比赛过程中的一些记录,希望能给大家带来帮助 本人持续分享更多关于嵌入式和单片机的知识,如果大家喜欢,别忘点个赞加个关注哦,让我们一起共 ...

最新文章

  1. 《零基础看得懂的C++入门教程 》——(10)面向对象
  2. 专注数据,打造阿里云Elasticsearch“一站式”数据服务体系
  3. Linux 用户及用户组的基本管理
  4. Tensorflow Python3 做神经网络(视频教程)
  5. python 操作进程_python进程简单操作
  6. DBCP数据库连接失效的解决方法(Io 异常:Connection reset)
  7. 成语接龙、歇后语 js JavaScript html web nodejs成语接龙离线js库
  8. linux opendir路径_Linux下目录文件的操作(opendir,readdir,closedir) 以及DIR,dirent,stat等结构体详解...
  9. 数据分析(1)案例和面试题
  10. Centos7 安装独立显卡驱动
  11. docker语句及SQL查询
  12. 矩阵的求逆:inv( )
  13. 如何从YouTube历史记录中暂停,清除和删除视频
  14. 汇编语言中xor指令_汇编语言XOR指令:对两个操作数进行逻辑(按位)异或操作(推荐)...
  15. 初探RxJava(基础篇)
  16. 人工智能基础——为什么逻辑学中“假推真”、“假推假”永远是真命题?
  17. 编写python代码获取4k高清壁纸
  18. vue实现调用showModalDialog传递参数
  19. 智能视频分析技术及应用扫盲
  20. 80老翁谈人生(250):究竟是谁损害了北京大学的名声?

热门文章

  1. php表单数据写入txt文件_vba写入txt数据,发生数据丢失的奇怪现象
  2. Java 设计模式之 Composite 组合模式
  3. 解决to_hdf() 报错ImportError: Missing optional dependency ‘tables‘. Use pip or conda to install tables.
  4. Linux(Ubuntu18.04)安装SEAL-python
  5. python函数使用两个小括号
  6. i9100美化android.policy.jar,摆脱越狱束缚 三星I9100安装应用更轻松
  7. 第2节 storm实时看板案例:10、redis的安装使用回顾
  8. svn 验证位置失败 Authorization failed
  9. 9.22 keep studying
  10. 漫谈惯性、视觉暂留、潜意识、混合动力发动机、先入为主 - 纯粹的无厘头?...