蓝桥杯单片机学习过程记录(十七)第九届彩灯控制器

蓝桥杯单片机学习过程记录(十七)第九届彩灯控制器


错误提示:
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
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值