STC单片机流水灯设计.doc_第1页
STC单片机流水灯设计.doc_第2页
STC单片机流水灯设计.doc_第3页
STC单片机流水灯设计.doc_第4页
STC单片机流水灯设计.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/*程序名: 编写人: 杨斌 编写时间:2010 年 9月 24日硬件支持:接口说明:LED接入P0口 修改日志:NO.1-/*说明:(现象)当按键1按下时八个LED灯开始循环亮灭,当按下按键2时灯熄灭/*/#include /STC12Cx052或STC12Cx052AD系列单片机头文件#define uchar unsigned charuchar code table=0xfe,0xfd,0xfb,0xf7,0x7f,0xbf,0xdf,0xef;/int i;int n=0;sbit key1=P10;sbit key2=P12;/*函数名:主函数调 用:无参 数:无返回值:无结 果:程序开始处,无限循环备 注:/*/void DELAY_MS (unsigned int a)unsigned int i;while( -a != 0)for(i = 0; i 600; i+);void key_11()if(key1=0)DELAY_MS (30);if(key1=0) for(i=0;i9;i+) if(i=8) i=0; P0=tablei; DELAY_MS (500); if(key2=0) DELAY_MS (5); if(key2=0) break; P0=0XFF; void main (void)P0=0XFF;/初始程序while(1)key_11(); /在主函数中检测按键是否被按下 /*/*程序名: 编写人: 杨斌 编写时间:2010 年 9月 27日硬件支持:接口说明: 修改日志:NO.1-/*说明:/*/#include /STC12Cx052或STC12Cx052AD系列单片机头文件/主函数模板sbit led1=P17;sbit led2=P15;sbit led3=P14;sbit led4=P13;sbit led5=P12;sbit key1=P37;sbit key2=P33;unsigned char b=0;unsigned char m=0;/*函数名:主函数调 用:无参 数:无返回值:无结 果:程序开始处,无限循环备 注:/*/void DELAY_MS (unsigned int a)unsigned int i;while( a- != 0)for(i = 0; i 20; i+);void key_1()if(key1=0)DELAY_MS (5);if(key1=0)if(b100) b+;while(key1=0&m0) b-;while(key2=0&m50)/m的作用:当按键2按下时且不松手m会自加,加到51时会推出while循环,使b减1从而使LED灯亮度变暗 led1 = 0;/点亮LED灯 DELAY_MS(b);/修改这里的数值看看会有什么变化 led1 = 1;/熄灭LED灯 DELAY_MS(101-b); m+; void main (void)/初始程序while(1) key_1(); key_2(); m=0; led1 = 0;/点亮LED灯 DELAY_MS(b);/修改这里的数值看看会有什么变化 led1 = 1;/熄灭LED灯 DELAY_MS(101-b);/*/每按下按键1一次,LED亮度增加一些,每按下按键2一次,LED灯亮度变暗一些 (或者一直按住按键1使LED灯亮度也会增加,一直按住按键2使LED灯亮度/慢慢变暗)#include #define uchar unsigned char #define uint unsigned intsbit RS=P13;sbit RW=P02;sbit E=P01;sbit s1=P03;sbit s2=P06;sbit s3=P34;sbit s4=P11;uchar code table1=13:39:50;uchar code table2=2010-04-24 6;uint num ,nian=2010;uchar count1,count2,s1num,ri=24,yue=4,xq=6,t,s1num=0,s1num2=0;char miao=50,shi=13,fen=39;void delay(uchar ms) /延时函数 uchar i; while(ms-) for(i=0;i250;i+);void write_com(uchar com)/写命令RS=0;P2=com;delay(5);E=1;delay(10);E=0;RS=0;RW=0;void write_data(uchar date)RS=1;RW=0;delay(10);P2 =date;delay(5);E=1;delay(10);E=0;RS=1;RW=0;void init()/初始化E=0;RS=0;RW=0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80);IE=0x82;/开启总中断及定时器0中断TMOD=0x01;/设置定时器0为工作方式1TL0=0x09;TH0=0xF6; /给定时器0装初值 TR0=1;/启动定时器0 void write_sfm(uchar add,uchar date)uchar shi,ge;shi=date/10;ge=date%10;write_com(0x80+add);/送地址write_data(0x30+shi);/送数据write_data(0x30+ge);void write_nyr(uchar add ,uchar date)uchar shi ,ge;shi=date/10;ge=date%10;write_com(0x80+0x40+add);/写地址write_data(0x30+shi); /送数据write_data(0x30+ge); void write_nian(uchar add,uint date)uchar qian, bai,shi,ge;qian=date/1000;ge=date%10;date=date/10;shi=date%10;date=date/10;bai=date%10;write_com(0x80+0x40+add);write_data(0x30+qian);/write_com(0x80+0x40+1);write_data(0x30+bai);/write_com(0x80+0x40+2);write_data(0x30+shi);/write_com(0x80+0x40+3);write_data(0x30+ge);/*void write_duty(uchar add,uchar date)write_com(0x80+0x40+add);write_data(0x30+date);*/void write_xq(uchar add,uchar date)write_com(0x80+0x40+add);write_data(0x30+date);void keyscan1()/时分秒按键设置if(s1=0)delay(5);if(s1=0)s1num+;while(!s1);if(s1num=1)TR0=0;write_com(0x80+7);write_com(0x0f); if(s1num=2)write_com(0x80+4);if(s1num=3)write_com(0x80+1);if(s1num=4)s1num=0;write_com(0x0c);TR0=1;if(s1num!=0)/当第一个键按下 开始时分秒的设置if(s2=0)/当第二个按下 时分秒加的设置delay(5);if(s2=0)while(!s2);if(s1num=1)miao+;if(miao=60)miao=0;write_sfm(6,miao); write_com(0x80+7);if(s1num=2)fen+;if(fen=60)fen=0;write_sfm(3,fen);write_com(0x80+4);if(s1num=3)shi+;if(shi=24)shi=0;write_sfm(0,shi);write_com(0x80+1);if(s3=0)/当第三个按下 时分秒减的设置delay(5);if(s3=0)while(!s3);if(s1num=1)miao-;if(miao=-1)miao=59;write_sfm(6,miao);write_com(0x80+7);if(s1num=2)fen-;if(fen=-1)fen=59;write_sfm(3,fen);write_com(0x80+4);if(s1num=3)shi-;if(shi=-1)shi=23;write_sfm(0,shi);write_com(0x80+1);void keyscan2()/年月日 星期的按键设置if(s4=0)delay(5);if(s4=0)s1num2+;while(!s4);if(s1num2=1) TR0=0;write_com(0x80+0x40+9);delay(5); write_com(0x0f);if(s1num2=2)write_com(0x80+0x40+6);delay(5);if(s1num2=3)write_com(0x80+0x40+3);delay(5);if(s1num2=4)write_com(0x80+0x40+11);if(s1num2=5)s1num2=0;TR0=1;write_com(0x0c);if(s1num2!=0) /如果第四个键按下if(s2=0)/用作时分秒 年月日 星期加的函数delay(5);if(s2=0)while(!s2);if(s1num2=1)ri+;if(ri=31) ri=1;write_nyr(8,ri);write_com(0x80+0x40+9); if(s1num2=2) yue+;if(yue=13) yue=1;write_nyr(5,yue);write_com(0x80+0x40+6); if(s1num2=3) nian+;/if(yue=13) yue=1;write_nian(0,nian);write_com(0x80+0x40+3); if(s1num2=4) xq+;if(xq=7) xq=0;write_xq(11,xq);write_com(0x80+0x40+11); if(s3=0)/用作时分秒 年月日 星期减的函数delay(5);if(s3=0)while(s3!=0);if(s1num2=1) delay(100);ri-;if(ri=0)ri=30;write_nyr(8,ri);write_com(0x80+0x40+8);if(s1num2=2) yue-;delay(100);if(yue=0) yue=1;write_nyr(5,yue);write_com(0x80+0x40+6); if(s1num2=3)nian-;delay(100);write_nian(0,nian);write_com(0x80+0x40+3);if(s1num2=4)xq-;if(xq=-1) xq=1;delay(200);write_xq(11,xq);write_com(0x80+0x40+11); void main() PCA0MD=0;XBR1=0x40;/关闭看门狗 交叉开关使能init();for(num=0;num8;num+)write_data(table1num);delay(5);write_com(0x80+0x40);for(num=0;num12;num+)write_data(table2num);delay(5);while(1) keyscan1(); keyscan2(); if(count1=101)count1=0;miao+;if(miao=60)miao=0; fen+;if(fen=60)fen=0;shi+;if(shi=24)shi=0;write_sfm(0,shi);write_sfm(3,fen);write_sfm(6,miao);if(miao=0)&(fen=0)&(shi=0)if(yue=4)|(yue=6)|(yue=9)|(yue=11)ri+;if(ri=31)ri=1;yue+;if(yue=13)yue=1;nian+;write_nian(1,nian);write_nyr(5,yue);write_nyr(8,ri);else if(yue=1)|(yue=3)|(yue=5)|(yue=7)|(yue=8)|(yue=10)|(yue=12)ri+;if(ri=32)ri=1;yue+;if(yue=13)yue=1;nian+;write_nian(1,nian);write_nyr(5,yue);write_nyr(8,ri);if(nian%400=0)&(yue=2)ri+;if(ri=30)ri=1;yue+;write_nyr(5,yue);write_nyr(8,ri);if(nian%400!=0)if(yue=2)ri+;if(ri=29)ri=1;yue+;write_nyr(5,yue);write_nyr(8,ri);delay(5);switch(t=xq)case 1:write_xq(11,2);xq+;break;case 2:write_xq(11,3);xq+;break;case 3:write_xq(11,4);xq+;break;case 4:write_xq(11,5);xq+;break;case 5:write_xq(11,6);xq+;break;case 6:write_xq(11,0);xq=0;break;case 0:write_xq(11,1);xq+;break;void timer0() interrupt 1 TL0=0x09; TH0=0xF6; /给定时器0装初值 count1+; count2+; #include #define uint unsigned int#define uchar unsigned charuchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x3e,0x77,0x7c,0x39,0x5e,0x79,0x71;/对共阴数码管0-9编码sbit gj=P21;sbit wx1=P31;sbit wx2=P32;sbit wx3=P33;sbit wx4=P34; /定义数码管的四个位选uint xx, bb,bb1,bb2,cc,dd,ee;float aa;void delay(int m) int i,j; for(i=0;im;i+) for(j=0;jm;j+) ; void display1();void display2();main() PCA0MD=0; /关闭看门狗P2MDIN=0xFD; P2SKIP=0x02;AMX0P=0x09; AMX0N=0x1F; ADC0CN=0x80;REF0CN=0x0A;/基准电压(电压基准控制寄存器)EIE1=0x08; IE=0x8A;XBR1=0x40; /跳过交叉开关/TMOD=0x11; /定时器0工作在1方式,定时器1工作在1方式(定时器方式寄存器)/TH0=0xFF; /定时器0初始值/ TL0=0x01; /定时器0初始值/TH1=0xFF; /定时器1初始值/ TL1=0x01; /定时器1初始值P0MDOUT=0xFF;/推挽输出AD0BUSY=1; /AD开始转换while(1) /* wx1=0; wx2=0; wx3=0; wx4=0; P0=0x77; P0=0x7c; P0=0x39; P0=0x5e; P0=0x79; P0=0x71; */void AD_interrupt() interrupt 10/中断函数AD0INT=0;/ 置0开始下一次转换xx=ADC0H*256+ADC0L;aa=xx*15/1023.0;if(0aa&aa10)aa=aa*100;bb=(uint)aa/100;cc=(uint

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论