蓝桥杯单片机学习过程记录(十七)第九届彩灯控制器
错误提示:
WARNING L5: CODE SPACE MEMORY OVERLAP
地址重叠。两个定时器重名,interrupt都用了1,一直报警告。
然后不得不说,从历年省赛来看,单片机是越来越难了,从开始到完成差不多正好比赛时间,包括吃饭啊啥的,比往届感觉要难,中间出了一个问题,因为审题不清楚,一开始只用了一个eep进行存储状态,后来分析,应该是4个模式下的小灯分别对应着一个流转间隔,又重新改了一下,头都大了,4个寄存器用数组来表示,但是重复的东西太多,超级繁琐,后续慢慢学习进行改进,放进函数里应该会好很多。用了两个定时器,一个控制小灯模式和亮度,另一个控制设置时得闪烁。在进行设置模式的流转间隔时,分别用中间变量进行存储。
应用内容:
数码管、LED小灯
独立按键、定时器
EEPROM寄存器存写读取
滑动变阻器IIC的读取
主函数:
//第九届彩灯控制
#include<STC15F2K60S2.H>
#include<iic.h>
sbit s7=P3^0;
sbit s6=P3^1;
sbit s5=P3^2;
sbit s4=P3^3;
unsigned char led_count;
unsigned char flag_yemian=1,s6_flag,flag_set;
char led_mode=1,count_mode,led_mode_temp,led_light_mode=1;
unsigned char seg[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};
unsigned char eep[4];
unsigned char yi,er,san,si,wu,liu,qi,ba;
unsigned char t_0,t,t_1;
int dianya,eep_temp,count_eep;
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 key_scan();
void Timer0Init();
void Timer1Init();
unsigned char iic_read();
unsigned char eep_read(add);
void eep_write(add,dat);
void led_light();
void main(){
//初始化
allinit();
Timer0Init();Timer1Init();
EA=1;ET0=1;ET1=1;
//四个寄存器
eep[0]=eep_read(0x10);eep[1]=eep_read(0x20);
eep[2]=eep_read(0x40);eep[3]=eep_read(0x80);
yi=11;er=11;san=11;si=11;wu=11;liu=11;qi=11;ba=11;
while(1){
dianya=iic_read();
dianya=dianya*2;
//亮度等级判断
led_light();
//eep中间暂存
eep_temp=count_eep+eep;
//设置页面模式及间隔
if(flag_yemian==1){
//选择模式
if(s6_flag==1){
//模式中间暂存
led_mode_temp=(led_mode+count_mode)%4;
if(led_mode_temp==0)
led_mode_temp=4;
if(flag_set==0){
//亮
switch(led_mode_temp){
case 1: yi=10;er=led_mode_temp;san=10;si=11;wu=eep[0]/10;liu=eep[0]%10;qi=0;ba=0;break;
case 2: yi=10;er=led_mode_temp;san=10;si=11;wu=eep[1]/10;liu=eep[1]%10;qi=0;ba=0;break;
case 3: yi=10;er=led_mode_temp;san=10;si=11;wu=eep[2]/10;liu=eep[2]%10;qi=0;ba=0;break;
case 4: yi=10;er=led_mode_temp;san=10;si=11;wu=eep[3]/10;liu=eep[3]%10;qi=0;ba=0; break;
}
}
//灭
else {
switch(led_mode_temp){
case 1: yi=11;er=11;san=11;si=11;wu=eep[0]/10;liu=eep[0]%10;qi