蓝桥杯单片机学习过程记录(三十一)第九届国赛多功能测量仪表
第九届国赛,比较基础。有几点需要注意:一是温度获取需要小数,定义变量时long。二是存储时拆分开成两部分进行存储,要不然eeprom保存不了那么大的数字。三是小灯亮灭部分谁开谁闭,非与或灯要理清楚。四是NE555的计数定时,要清楚定时器的原理。
应用的内容:
独立按键、数码管
led、定时器
温度传感器DS18B20
IIC中RB2和EEPROM读取写入
NE555方波产生器
题目如下:
/*
---------------------
第九届国赛多功能测量仪表
2020.3.29
完成
---------------------
*/
#include<STC15F2K60S2.H>
#include<intrins.h>
#include<onewire.h>
#include<iic.h>
sbit s7=P3^0;
sbit s6=P3^1;
sbit s5=P3^2;
sbit s4=P3^3;
bit flag_shanshuo;
long wendu;
unsigned int count_freq,freq,rb2_read;
unsigned char t_1,rb2_save,freq_save_1,freq_save_2,wendu_save_1,wendu_save_2,dis_h_1,dis_h_2,dianya_set;
unsigned char flag_yemian,flag_h,flag_longset;
unsigned char yi,er,san,si,wu,liu,qi,ba;
unsigned char seg[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10, 0xbf,0xff,0xc1,0xc6,0x8e,0x89,0x8c};
void allinit();
void delayms(int ms);
void display_12(yi,er);
void display_34(san,si);
void display_56(wu,liu);
void display_78(qi,ba);
void Timer0Init(void);
void Timer1Init(void);
unsigned char iic_read(unsigned char add);
void eeprom_write(unsigned char add,unsigned char dat);
unsigned char eeprom_read(unsigned char add);
long ds18b20_get();
void key_scan();
void led_set();
//主函数
void main(){
//初始化
allinit();
Timer0Init();Timer1Init();
EA=1;ET0=1;ET1=1;
dianya_set=eeprom_read(0x10);delayms(5);
while(1){
//实时读取电压
rb2_read=iic_read(0x03)*2;
//小灯亮灭函数
led_set();
//电压显示界面
if(flag_yemian==0){
yi=22;er=21;san=21;si=21;wu=21;liu=21;qi=rb2_read/100+10;ba=rb2_read%100/10;
}
//频率显示界面
else if(flag_yemian==1){
yi=24;er=21;san=21;si=freq/10000;wu=freq%10000/1000;liu=freq%1000/100;qi