51单片机c语言教程感应灯控制,可手动调节亮度的自感应开关台灯单片机源码+PCB源文件...
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源文件...相关推荐
- 0.《新概念51单片机C语言教程》(郭天祥)学习笔记
看到之前的阅读量,有标题党的嫌疑,再接再厉,加油坚持自己的文风,相信会写的越来越好:) 继续更(一个人,一个记事本,一个PDF阅读器,装备全靠打) <新概念51单片机C语言教程>(郭天祥) ...
- 单片机人体感应灯c语言,单片机光控人体感应灯案例.doc
本科毕业论文(设计) 题目: 单片机光控人体感应灯 学院: 物理与电子科学学院 班级: 2010级电子三班 姓名: 许鋆 指导教师: 杨春花 职称: 教授 完成日期: 2014 年 5 月 26 日 ...
- c语言52单片机液晶屏显示,[手把手教你学51单片机C语言教程]22 LCD12864液晶屏显示.pdf...
您所在位置:网站首页 > 海量文档  > 计算机 > C/C++资料 [手把手教你学51单片机C语言教程]22 LCD ...
- 用c语言完成流水灯控制的程序设计,单片机C语言程序设计之TIMER0控制流水灯
描述 基于单片机的LED流水灯的应用十分广泛,由单片机作为的核心控制器,通过按键实现控制功能和数据输入是非常普遍的.通常在所需按键数量不多时,系统常采用独立式按键.这种按键的电路配置灵活,软件结构简单 ...
- c语言怎么编程输出相框,手把手教你学PIC单片机C语言教程第1课.PDF
手把手教你学PIC单片机C语言教程第1课 - PIC HL-K18 - PIC HL-K18 慧净电子--做人人都买得起的PPIICC单片机开发板真诚为你服务,基于HHLL--KK1188 开发板 手 ...
- c语言控制led闪烁次数,单片机C语言程序设计之定时器控制4个LED滚动闪烁
描述 通过单片机课程设计,熟练掌握C语言的编程方法,将理论联系到实践中去,提高我们的动脑和动手的能力.通过定时器控制4只LED滚动闪烁系统的设计,掌握定时/计数器的使用方法,和简单程序的编写,最终提高 ...
- 基于51单片机的蓝牙控制双色LED点阵显示屏(实物图+原理图+源码+全套资料)
资料编号:086 采用stm32单片机,可以通过蓝牙app控制点阵显示不同效果, 具体功能请看演示视频,全套资料齐全: 86-基于51单片机的蓝牙控制双色LED点阵显示屏(实物图+原理图+源码+全套资 ...
- 51单片机C语言led流水灯及数码管实现秒表
51单片机C语言练习题 单片机型号 普中科技的 led练习题 led小灯闪烁 #include<reg52.h> sbit LED = P0^0; void main() {unsigne ...
- 新概念51单片机C语言教程纠错(1)
寒假突发奇想学了一下51单片机,以前一直在用32系列,这一次用的是郭天祥新概念51单片C语言教程,发现里面一处错误,先写下来以免以后忘掉. 正文第34页讲了如何对单片机总线编码,用了一个单片机控制8个 ...
最新文章
- IslandViewer4|基因组岛在线预测
- inputstream 初始化_MyBatis初始化之加载初始化
- (7)nginx: 搭建 nginx+php环境
- Web.config中用customErrors可以自定义默认的出错页面
- android 外接u盘格式化,u盘格式(安卓u盘格式化工具apk)
- 张宇1000题高等数学 第十七章 多元函数积分学的预备知识
- linux firefox 插件开发教程,火狐(firefox)浏览器插件开发简明教程
- 福昕阅读器 自定义注释快捷键
- php对联广告代码,网站漂浮对联广告代码
- Python新手到熟练的百天之路
- 【转】NAT穿透技术
- 区块链、人工智能和物联网之间是什么关系?
- VM虚拟机设置桥接模式
- Dom及JavaScript图片库
- 大学生竞赛管理系统-JAVA【数据库设计、源码、开题报告】
- c语言中 程序各步作用,C语言学习网总结C语言学习五步曲
- UITableView reload刷新闪动问题
- 服务器状态502 503 504,服务器错误500/502/503/504详解
- OpenGL ES 苹果编程指南 官方文档翻译01
- 7.9模拟比赛解题报告