STC单片机,C语言,环境亮度低自动开灯,可通过按键手动调节亮度Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)

0.png (19.89 KB, 下载次数: 3)

2018-11-14 03:46 上传

0.png (44.8 KB, 下载次数: 2)

2018-11-14 03:46 上传

0.png (47.48 KB, 下载次数: 2)

2018-11-14 03:46 上传

单片机源码:

#include                          //调用单片机头文件

#define uchar unsigned char  //无符号字符型 宏定义        变量范围0~255

#define uint  unsigned int         //无符号整型 宏定义        变量范围0~65535

sbit SCL=P2^2;                //SCL定义为P1口的第3位脚,连接ADC0832SCL脚

sbit DO=P2^3;                //DO定义为P1口的第4位脚,连接ADC0832DO脚

sbit CS=P2^0;                //CS定义为P1口的第4位脚,连接ADC0832CS脚

sbit red = P1^4;           //红色指示灯

sbit td_led = P3^5;    //台灯

uchar f_pwm_l ;          //越小越亮

bit flag_moshi;

uchar dangwei;   //档位

uchar guangxian;            //光线的显示变量

/***********************1ms延时函数*****************************/

void delay_1ms(uint q)

{

uint i,j;

for(i=0;i

for(j=0;j<120;j++);

}

/***********读数模转换数据********************************************************/

//请先了解ADC0832模数转换的串行协议,再来读本函数,主要是对应时序图来理解,本函数是模拟0832的串行协议进行的

//  1  1  0 通道

//  1  1  1 通道

unsigned char ad0832read(bit SGL,bit ODD)

{

unsigned char i=0,value=0,value1=0;

SCL=0;

DO=1;

CS=0;                //开始

SCL=1;                //第一个上升沿

SCL=0;

DO=SGL;

SCL=1;          //第二个上升沿

SCL=0;

DO=ODD;

SCL=1;           //第三个上升沿

SCL=0;           //第三个下降沿

DO=1;

for(i=0;i<8;i++)

{

SCL=1;

SCL=0; //开始从第四个下降沿接收数据

value<<=1;

if(DO)

value++;

}

for(i=0;i<8;i++)

{                        //接收校验数据

value1>>=1;

if(DO)

value1+=0x80;

SCL=1;

SCL=0;

}

CS=1;

SCL=1;

if(value==value1)                                //与校验数据比较,正确就返回数据,否则返回0

return value;

return 0;

}

uchar key_can;

/********************独立按键程序*****************/

void key()

{

static uchar key_new;

key_can = 20;

if((P2 & 0xf0) != 0xf0)

{

delay_1ms(1);

if(((P2 & 0xf0) != 0xf0) && (key_new == 1))

{

key_new = 0;

switch(P2 & 0xf0)

{

case 0xe0:  key_can = 3;  break;         //左边第1个

case 0xd0:  key_can = 2;  break;         //左边第2个

case 0xb0:  key_can = 1;  break;         //左边第3个

}

red = 0;

delay_1ms(80);

red = 1;

//                        write_sfm2(2,0,key_can);

}

}

else

key_new = 1;

}

/***************档位***************/

void led_dangwei(uchar dat)

{

switch(dat)

{

case 7: TR0 = 0;         //最亮

td_led = 0;

break;

case 6: TR0 = 1;         //亮

f_pwm_l = 20;

break;

case 5: TR0 = 1;         //亮

f_pwm_l = 40;

break;

case 4: TR0 = 1;         //亮

f_pwm_l = 60;

break;

case 3: TR0 = 1;         //亮

f_pwm_l = 80;

break;

case 2: TR0 = 1;         //亮

f_pwm_l = 90;

break;

case 1: TR0 = 1;         //亮

f_pwm_l = 95;

break;

case 0: TR0 = 0;         //灭

td_led = 1;

break;

}

}

/****************按键处理函数***************/

void key_with()

{

if(key_can == 1)          //设置键

{

flag_moshi = ~flag_moshi;

}

if(flag_moshi == 1)          //手动模式

{

if(key_can == 2)   //加

{

dangwei ++;

if(dangwei >= 7)

dangwei = 7;

}

if(key_can == 3)   //减

{

if(dangwei != 0)

dangwei --;

}

led_dangwei(dangwei) ;    //档位

}

}

/*************定时器0初始化程序***************/

void time_init()

{

EA   = 1;                   //开总中断

TMOD |= 0X21;          //定时器1工作方式1

ET0  = 1;                  //开定时器0中断

TR0  = 0;                  //允许定时器0定时

}

/********************************************************************

* 名称 : Main()

* 功能 : 主函数

* 输入 : 无

* 输出 : 无

***********************************************************************/

void Main()

{

uchar flag_200ms;

P0 = P1 = P2 = P3 = 0xff;           //初始化单片机IO口为高电平        write_string(2,0,"     :  :        ");

time_init();                    //初始化定时器

red = 0;

f_pwm_l = 99;

while(1)

{

key();

if(key_can < 10)

key_with();

if(flag_moshi == 0)          //自动模式

red = 1;

else

red = 0;                  //手动模式

if(flag_moshi == 0)          //自动模式

{

if(guangxian <= 20)             //开灯

{

TR0 = 0;         //最亮

td_led = 0;

}else if(guangxian >= 80)        //关灯

{

TR0 = 0;         //灭

td_led = 1;

}else

{

TR0 = 1;

f_pwm_l = guangxian;

}

}

flag_200ms ++;

if(flag_200ms >= 200)

{

flag_200ms = 0;

guangxian = ad0832read(1,0); //采集光线

guangxian = guangxian * 99 / 255;

}

delay_1ms(1);

}

}

/*******************定时器0用做单片机模拟PWM 调节***********************/

void Timer0() interrupt 1  //调用定时器0

{

static uchar value_l;

TH0=0xfe;    //    定时10ms中断一次

TL0=0x0c;         //500us

if(td_led==1)

{

value_l+=3;

if(value_l > f_pwm_l)   //高电平

{

value_l=0;

if(f_pwm_l != 0)

td_led=0;

}

}

else

{

value_l+=3;

if(value_l  > 100 - f_pwm_l)                  //低电平

{

value_l=0;

td_led=1;

}

}

}

全部资料51hei下载地址:

灯光.rar

(58.53 KB, 下载次数: 34)

2018-11-13 20:41 上传

点击文件名下载附件

原理图,PCB,C程序

下载积分: 黑币 -5

51单片机c语言教程感应灯控制,可手动调节亮度的自感应开关台灯单片机源码+PCB源文件...相关推荐

  1. 0.《新概念51单片机C语言教程》(郭天祥)学习笔记

    看到之前的阅读量,有标题党的嫌疑,再接再厉,加油坚持自己的文风,相信会写的越来越好:) 继续更(一个人,一个记事本,一个PDF阅读器,装备全靠打) <新概念51单片机C语言教程>(郭天祥) ...

  2. 单片机人体感应灯c语言,单片机光控人体感应灯案例.doc

    本科毕业论文(设计) 题目: 单片机光控人体感应灯 学院: 物理与电子科学学院 班级: 2010级电子三班 姓名: 许鋆 指导教师: 杨春花 职称: 教授 完成日期: 2014 年 5 月 26 日 ...

  3. c语言52单片机液晶屏显示,[手把手教你学51单片机C语言教程]22 LCD12864液晶屏显示.pdf...

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspC/C++资料 [手把手教你学51单片机C语言教程]22 LCD ...

  4. 用c语言完成流水灯控制的程序设计,单片机C语言程序设计之TIMER0控制流水灯

    描述 基于单片机的LED流水灯的应用十分广泛,由单片机作为的核心控制器,通过按键实现控制功能和数据输入是非常普遍的.通常在所需按键数量不多时,系统常采用独立式按键.这种按键的电路配置灵活,软件结构简单 ...

  5. c语言怎么编程输出相框,手把手教你学PIC单片机C语言教程第1课.PDF

    手把手教你学PIC单片机C语言教程第1课 - PIC HL-K18 - PIC HL-K18 慧净电子--做人人都买得起的PPIICC单片机开发板真诚为你服务,基于HHLL--KK1188 开发板 手 ...

  6. c语言控制led闪烁次数,单片机C语言程序设计之定时器控制4个LED滚动闪烁

    描述 通过单片机课程设计,熟练掌握C语言的编程方法,将理论联系到实践中去,提高我们的动脑和动手的能力.通过定时器控制4只LED滚动闪烁系统的设计,掌握定时/计数器的使用方法,和简单程序的编写,最终提高 ...

  7. 基于51单片机的蓝牙控制双色LED点阵显示屏(实物图+原理图+源码+全套资料)

    资料编号:086 采用stm32单片机,可以通过蓝牙app控制点阵显示不同效果, 具体功能请看演示视频,全套资料齐全: 86-基于51单片机的蓝牙控制双色LED点阵显示屏(实物图+原理图+源码+全套资 ...

  8. 51单片机C语言led流水灯及数码管实现秒表

    51单片机C语言练习题 单片机型号 普中科技的 led练习题 led小灯闪烁 #include<reg52.h> sbit LED = P0^0; void main() {unsigne ...

  9. 新概念51单片机C语言教程纠错(1)

    寒假突发奇想学了一下51单片机,以前一直在用32系列,这一次用的是郭天祥新概念51单片C语言教程,发现里面一处错误,先写下来以免以后忘掉. 正文第34页讲了如何对单片机总线编码,用了一个单片机控制8个 ...

最新文章

  1. IslandViewer4|基因组岛在线预测
  2. inputstream 初始化_MyBatis初始化之加载初始化
  3. (7)nginx: 搭建 nginx+php环境
  4. Web.config中用customErrors可以自定义默认的出错页面
  5. android 外接u盘格式化,u盘格式(安卓u盘格式化工具apk)
  6. 张宇1000题高等数学 第十七章 多元函数积分学的预备知识
  7. linux firefox 插件开发教程,火狐(firefox)浏览器插件开发简明教程
  8. 福昕阅读器 自定义注释快捷键
  9. php对联广告代码,网站漂浮对联广告代码
  10. Python新手到熟练的百天之路
  11. 【转】NAT穿透技术
  12. 区块链、人工智能和物联网之间是什么关系?
  13. VM虚拟机设置桥接模式
  14. Dom及JavaScript图片库
  15. 大学生竞赛管理系统-JAVA【数据库设计、源码、开题报告】
  16. c语言中 程序各步作用,C语言学习网总结C语言学习五步曲
  17. UITableView reload刷新闪动问题
  18. 服务器状态502 503 504,服务器错误500/502/503/504详解
  19. OpenGL ES 苹果编程指南 官方文档翻译01
  20. 7.9模拟比赛解题报告

热门文章

  1. 2020年登高架设证考试题库及登高架设试题解析
  2. 快速开发架构Spring Boot 从入门到精通 附源码
  3. 中南大学计算机学院刘晴,杨迎泽 - 中南大学 - 计算机学院
  4. 10月31今天万圣节,好玩的一天,不信看google首页的图片
  5. python中requests库获取东方财富网动态指数行情数据
  6. 7-5 就不告诉你 (15 分) PTA 练习题满分答案
  7. 思考力|《零秒思考》
  8. Java版——企业进销存管理系统设计文档+源码
  9. 以上帝视角进行资产梳理
  10. 计算机二级中的9种运算问题:笛卡尔积,自然连接,交,并,选择,投影。。。