这个PWM可以显示出来,但是目前确实没有想到怎样控制灯光的明暗,如果有哪位大佬直接,欢迎直接留言。下面是源代码
main.c

#include"reg52.h"
#include"intrins.h"
#include"iic.h"
int led_work_mode=1;
int time_blank=4;
int K7=0;
int K6=0;
unsigned char add=0x00;
sbit S7=P3^0;
sbit S6=P3^1;
sbit S5=P3^2;
sbit S4=P3^3;
sfr AUXR=0x8e;
char code xianshi[13]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf,0x7F};
void choose_573(int n)
{switch(n){case(0):P2=(P2&0x1f)|0x00;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 init_system()
{choose_573(4);P0=0xff;choose_573(5);P0=0x00;choose_573(0);P0=0xff;
}
//==========================IIC
int guangxian;
void get_guangxian()
{guangxian=read_v();
}
//==========================
//==========================工作模式
void Delay100ms()       //@11.0592MHz
{unsigned char i, j, k;_nop_();_nop_();i = 5;j = 52;k = 195;do{do{while (--k);} while (--j);} while (--i);
}void work()
{if(K7==1&&led_work_mode==1){int i;int t;for(i=0;i<9;i++){choose_573(4);P0=(0xff>>i);choose_573(0);for(t=0;t<time_blank;t++){Delay100ms();}if(K7!=1){break;break;}} }if(led_work_mode==2&&K7==1){int i;int t;for(i=0;i<9;i++){choose_573(4);P0=(0xff<<i);choose_573(0);for(t=0;t<time_blank;t++){Delay100ms();}} }if(led_work_mode==3&&K7==1){int i;int t;for(i=0;i<5;i++){choose_573(4);P0=(0xff<<i)&(0xff>>i);choose_573(0);for(t=0;t<time_blank;t++){Delay100ms();}}}if(led_work_mode==4&&K7==1){int i;int t;for(i=5;i>=0;i--){choose_573(4);P0=~((0xff<<i)&(0xff>>i));choose_573(0);for(t=0;t<time_blank;t++){Delay100ms();}}   }
}
//==========================
//==========================按键void Delay5ms()     //@11.0592MHz
{unsigned char i, j;i = 54;j = 199;do{while (--j);} while (--i);
}void key_board()
{if(S7==0){Delay5ms();if(S7==0){if(K7==0){K7=1;}else{K7=0;}}while(!S7);}if(S6==0){Delay5ms();if(S6==0){K6++;if(K6==3){K6=0;}}while(!S6);}if(S5==0&&K6==1){Delay5ms();if(S5==0&&K6==1){led_work_mode++;if(led_work_mode>=5){led_work_mode=4; }}while(!S5);}if(S4==0&&K6==1){Delay5ms();if(S4==0&&K6==1){led_work_mode--;if(led_work_mode<=0){led_work_mode=1;}  }while(!S4);}if(S5==0&&K6==2){Delay5ms();if(S5==0&&K6==2){time_blank++;if(time_blank>=13){time_blank=12;}write_EEPROM(add,time_blank);}while(!S5);}if(S4==0&&K6==2){Delay5ms();if(S4==0&&K6==2){time_blank--;if(time_blank<4){time_blank=4;}write_EEPROM(add,time_blank);}while(!S4);}
}
//==========================
//==========================数码管
void Delay300us()       //@11.0592MHz
{unsigned char i, j;_nop_();_nop_();i = 4;j = 54;do{while (--j);} while (--i);
}
int shanshuo_mode=0;
void SMG(int wei,int number)
{choose_573(6);P0=0x80>>(wei-1);choose_573(7);P0=xianshi[number];choose_573(0);P0=0xff;
}
void smg_display()
{if(K6==1){SMG(1,0);Delay300us();SMG(2,0);Delay300us();SMG(3,time_blank%10);Delay300us();if(time_blank<10){SMG(4,10);Delay300us();}else{SMG(4,time_blank/10);Delay300us();}SMG(5,10);Delay300us();if(shanshuo_mode==0){SMG(6,11);Delay300us();SMG(7,led_work_mode);Delay300us();SMG(8,11);Delay300us();}else{SMG(6,10);Delay300us();SMG(7,10);Delay300us();SMG(8,10);Delay300us();}}if(K6==2){if(shanshuo_mode==0){SMG(1,0);Delay300us();SMG(2,0);Delay300us();SMG(3,time_blank%10);Delay300us();if(time_blank<10){SMG(4,10);Delay300us();}else{SMG(4,time_blank/10);Delay300us();}SMG(5,10);Delay300us();}else{SMG(1,10);Delay300us();SMG(2,10);Delay300us();SMG(3,10);Delay300us();SMG(4,10);Delay300us();SMG(5,10);Delay300us();   }SMG(6,11);Delay300us();SMG(7,led_work_mode);Delay300us();SMG(8,11);Delay300us();   }if(K6==0&&S4==0){SMG(1,guangxian);Delay300us();SMG(2,11);Delay300us();SMG(3,10);Delay300us();SMG(4,10);Delay300us();SMG(5,10);Delay300us();SMG(6,10);Delay300us();SMG(7,10);Delay300us();SMG(8,10);Delay300us();}
}
//==========================//==========================   中断
void Timer0Init(void)       //5毫秒@11.0592MHz
{AUXR |= 0x80;     //定时器时钟1T模式TMOD &= 0xF0;       //设置定时器模式TL0 = 0x00;       //设置定时初始值TH0 = 0x28;       //设置定时初始值TF0 = 0;      //清除TF0标志TR0 = 1;      //定时器0开始计时ET0=1;EA=1;
}
int n=0;
void Timer0Init_server() interrupt 1
{key_board();get_guangxian();if(K6==1||K6==2){n++;if(n>=160){if(shanshuo_mode==1){shanshuo_mode=0;}else{shanshuo_mode=1;}n=0;    }}
}
//==========================
void main()
{init_system();Timer0Init();time_blank=read_EEPROM(add);   while(1){work();smg_display();}
}

iic.c

/*程序说明: IIC总线驱动程序软件环境: Keil uVision 4.10 硬件环境: CT107单片机综合实训平台 8051,12MHz日    期: 2011-8-9
*/#include "reg52.h"
#include "intrins.h"#define DELAY_TIME 5#define SlaveAddrW 0xA0
#define SlaveAddrR 0xA1//总线引脚定义
sbit SDA = P2^1;  /* 数据线 */
sbit SCL = P2^0;  /* 时钟线 */void IIC_Delay(unsigned char i)
{do{_nop_();}while(i--);
}
//总线启动条件
void IIC_Start(void)
{SDA = 1;SCL = 1;IIC_Delay(DELAY_TIME);SDA = 0;IIC_Delay(DELAY_TIME);SCL = 0;
}//总线停止条件
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;                    // 0:应答,1:非应答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;
}
void write_EEPROM(unsigned char add,unsigned char dat)
{IIC_Start();IIC_SendByte(0xa0);IIC_WaitAck();IIC_SendByte(add);IIC_WaitAck();IIC_SendByte(dat);IIC_WaitAck();IIC_Stop();
}
unsigned char read_EEPROM(unsigned char add)
{unsigned char temp;IIC_Start();IIC_SendByte(0xa0);IIC_WaitAck();IIC_SendByte(add);IIC_WaitAck();IIC_Stop();IIC_Start();IIC_SendByte(0xa1);IIC_WaitAck();temp=IIC_RecByte();IIC_SendAck(1);IIC_Stop();return temp;
}unsigned char read_v()
{unsigned char temp;IIC_Start();IIC_SendByte(0x90);IIC_WaitAck();IIC_SendByte(0x03);IIC_WaitAck();IIC_Stop();IIC_Start();IIC_SendByte(0x91);IIC_WaitAck();temp=IIC_RecByte();IIC_SendAck(1);IIC_Stop();return temp*0.019;
}

iic.h

#ifndef _IIC_H
#define _IIC_Hvoid 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_v();
unsigned char read_EEPROM(unsigned char add);
void write_EEPROM(unsigned char add,unsigned char dat);
#endif

蓝桥杯单片机第九届 省赛 彩灯控制器相关推荐

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

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

  2. 蓝桥杯嵌入式-第九届省赛-电子定时器

    /*程序说明: 蓝桥杯大赛嵌入式-第九届省赛-电子定时器软件环境: Keil uVision 4.11 硬件环境: CT117E嵌入式竞赛板(代码兼容ILI932X系列.uc8230液晶控制器)日 期 ...

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

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

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

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

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

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

  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. 【蓝桥杯】第九届蓝桥杯单片机国赛 代码程序

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

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

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

最新文章

  1. 云开发地图标记导航 云开发一次性取所有数据
  2. PCA、LDA、MDS、LLE、TSNE等降维算法的Python实现
  3. 自律到极致-人生才精致:第4期
  4. python游戏编程入门 免费-Python游戏编程入门4
  5. python2 与 python3 语法区别--转
  6. OS / Linux / SIGCHLD 信号
  7. Rain and Umbrellas(dp)
  8. linux shell脚本编程技巧介绍(一)
  9. VSTS2008和FTS2008的系统要求好高啊~
  10. 十二、K8s job cronjob相关操作
  11. js ws 状态_使用ws
  12. 【终极算法】从阿尔法狗元(AlphaGo Zero)的诞生看终极算法的可能性
  13. wamp+php+下载,PHPWind Wamp
  14. lua 常用数据类型总结
  15. python词云图生成
  16. 通过修改注册表权限修复ArcMap启动报错问题
  17. Python 查看微信撤回消息
  18. [Luogu P3975] [TJOI2015]弦论
  19. 3*4的方格,有多少个长方形?
  20. 《系统论、信心论、控制论》读书笔记1

热门文章

  1. 产品设计:《广告设计与创意》
  2. 首都师范 博弈论 5 3 1合作博弈与数学表达
  3. 网页(HTML)转换为PDF
  4. 链路聚合LACP配置与结果验证
  5. Jiagu 自然语言处理工具
  6. FlashFXP 4.0注册码key 及教程
  7. OriginPro 中文
  8. 36氪独家|京东零售宣布多位高管新任命,POP平台部门成整合重点
  9. hash表的实现原理
  10. 电子计算机最早的应用,电子计算机的最早应用领域是什么?