智能照明系统的课程设计报告(3)

2019-03-10 19:36

附录:

附1:元器件明细表

器件名称 电容 光敏电阻 电阻 芯片底座 芯片 学习板 插针 杜邦线 LED灯 规格 150PF 10千欧 20pin ADC0804 高亮灯 数量 1个 1个 4个 1个 1个 1个 若干 19根 一个 附2:电路图图纸

实物图

11

附3:程序清单

基本要求的程序:

#include

#define uint unsigned int #define uchar unsigned char sbit adcs=P1^7; sbit adrd=P3^7; sbit adwr=P3^6; sbit led=P1^5; sbit Seg_ce=P1^0; sbit Dig_ce=P1^1;

uchar tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //0到9 uint ad_data,m=0,n=0,t1=5,t2=25; //ad_data表示AD输出8位2进制,t1为定时5秒后启动光采集电路,t2为定时25秒后关闭光采集电路 void delay(uint i) {

uint j;

for(i;i>0;i--)

for(j=124;j>0;j--); }

void keyscan(uint num) //显示5秒 {

uint ge,shi; ge=num;

12

shi=num/10;

P0=0; Seg_ce=1;Seg_ce=0; //清段选 P0=0xff; Dig_ce=1;Dig_ce=0; //清位选 P0=tab[ge]; Seg_ce=1;Seg_ce=0;

P0=0xfe; Dig_ce=1;Dig_ce=0; //显示5秒 }

void read_ad() {

adcs=0;

adwr=0;delay(1);adwr=1;delay(1); //启动AD,开始采样(/wr低电平保持的最短时间为100ns启动转换后必须加入一个延时以等待AD采样结束 adrd = 0;delay(1);ad_data =P2;delay(1);adrd=1; //读数据读取转换结果(/rd>200ns) adcs=1; }

void main() { P0=0;

P1=0x2c; //初始化P1_5为低(灯一开始是灭的)

TMOD=0x01; //方式1,16位定时器 TH0=(65536-50000)/256;

TL0=(65536-50000)%6; //设置定时器初值 IE=0x82; //设置中断允许 TR0=1; //启动定时器 while(1) {

if(m==0)keyscan(t1);

if(t1==0) //5秒已完,启动光采集电路 {

while(t2)

{ read_ad();

if(ad_data<125) //当外界很亮的时候关灯

{

led=1; } else {

led=0; //亮灯 delay(1); } }

if(t2==0) led=0; //25秒已完 ,forever亮

} }

13

}

void T0_timer()interrupt 1 //定时器T0中断函数 {

TH0=(65536-50000)/256; TL0=(65536-50000)%6;

if(t1!=0)m++; //不为0说明光采集电路还未启动,还在5秒之内

if(m==20) //1秒 时间 {

m=0; t1--; }

if(t2!=0)n++; //不为0说明还在25秒之内

if(n==20) //1秒 时间 {

n=0; t2--; } }

#include #define uint unsigned int #define uchar unsigned char

sbit Dig_ce = P1^1; sbit Seg_ce = P1^0; sbit Key_ce = P1^3; sbit led= P1^5; uint z;

uchar tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //0-9

void delay(uint i) {

uint j;

for(i;i>0;i--)

for(j=19;j>0;j--); }

void keyscan() {

uchar Temp1,Temp2;

P0=0;Seg_ce=1;Seg_ce=0;

P0=0xfe;Dig_ce=1;Dig_ce=0;delay(1); //扫描第一行,将第一行置低电平

Key_ce=0; //将P1_3口拉低,74LS244使能

Temp1=P0; //读P0口数据

14

Temp1=Temp1&0x0f; //提取按键相关数据-P0口的低四位

if(Temp1!=0x0f) //判断是否有按键按下 {

delay(10); //延时消抖

Temp2=P0;Temp2=Temp2&0x0f; //再读P0口,并提取P0口低四位数据

if(Temp1==Temp2) {

switch(Temp2) {

case 0x0e:z=z+10; break; // 按K0键每按一次键就增加10%的亮度,从而逐渐变亮,若低四位的值与0x0e相等,就执行其后的语句

case 0x0d:z=z-10;break; // 按K1键每按一次键就减少10%的亮度,从而逐渐变暗

case 0x07:z=0; break; //按K3键清零 default:break;

} //等待按键释放

while(Temp2!=0x0f) {

//不断地读取P0口数据,只要结果不等于0x0f,说明有按键没有被释放,直到释放,才退出 Temp2=P0;

Temp2=Temp2&0x0f; } } }

Key_ce=1; //关使能端 if(z<=100)

{ P0=0xff; Dig_ce=1;Dig_ce=0; //清段选 P0=tab[z]; Seg_ce=1;Seg_ce=0;delay(5); // 个位 P0=0xfe; Dig_ce=1;Dig_ce=0;delay(5);

P0=0xff; Dig_ce=1;Dig_ce=0;

P0=tab[(z/10)]; Seg_ce=1;Seg_ce=0;delay(5); // 十位 P0=0xfd; Dig_ce=1;Dig_ce=0;delay(5);

P0=0xff; Dig_ce=1;Dig_ce=0;

P0=tab[z/100]|0x80; Seg_ce=1;Seg_ce=0;delay(5); // 百位 P0=0xfb; Dig_ce=1;Dig_ce=0;delay(5); }

else z=0; }

void main()

15


智能照明系统的课程设计报告(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:数学思想与方法任务答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: