还剩13页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
单片机实验报告题目:流水灯设计姓名___________XX______________学号:_______________学院:计算机与信息技术学院专业:软件工程指导教师:2013年6月3日forw=0;w2gFlag;w++{P
3.4=1;//LED1亮P
13.0=1;Delay1;Delay1;P
3.4=1;〃LED2亮P
13.1=1;Delay1;Delay1;P
3.4=1;//LED3亮P
13.2=1;Delay1;Delay1;P3A=1;//LED4亮P
13.3=1;Delay1;Delay1;P
3.4=1;//LED5亮P
14.0=1;Delay1;Delay1;P
3.4=1;//LED6亮P
14.1=1;Delay1;Delay1;P
3.4=1;//LED7亮P
14.2=1;Delay1;Delay1;P
3.4=1;//LED8亮P
14.3=1;Delay1;Delay1;P
3.4=1;〃LED9亮P
15.0=1;Delay1;Delay1;P
3.4=1;//LED10亮P
15.1=1;Delay1;Delay1;P
3.4=1;//LED11亮P
15.2=1;Delay1;Delay1;P
3.4=1;//LED12亮P
15.3=1;Delay1;Delay1;小灯闪亮模式6void Modle6void〃由中间开始像打开扇子一样〃依次亮灯,循环两次unsigned char w;pokeb0xFA40,0x0f;//LCD显示6pokeb0xFA41,0x05;forw=0;w2gFlag;w++P
13.1=1;〃中间三个灯亮P
3.4=1;P
14.3=1;//延时DelayO;P
13.0=1;〃上方两个灯亮P
13.2=1;//延时DelayO;P
15.3=1;〃东西方向上上方两个灯亮P
13.3=1;//延时Delay;P
15.2=1;〃东西方向上中间两个灯亮P
14.0=1;〃延时Delay;〃东西方向上下方两个灯亮P
15.1=1;P
14.1=1;Delay;〃延时P
15.O=1;//下方两个灯亮P
14.2=1;DelayO;//延时LightOff;//灯全灭P
3.4=0;/*------------song--------------*/void Timerlnitvoid〃计时时钟频率二fprs/2=4MHzPRM00=0x01;//CR000作为比较寄存器CRC00=0x00;〃方波输出TOCOO=0x03;〃M=62002CR000=0xllCl;〃计时器初始化PM
3.4=0;P
3.4=0;//蜂鸣器初始化PM
3.3=0;void INTTMOOOvoid{〃禁止屏蔽〃TMMK000=0;低优先级TMPR000=0xl;〃定时中断-interrupt voidMD」NTTM000Num-=1;P
3.3=!P
3.3;}〃n区别音高,m控制音长,四分之一拍的m倍void flatintn,int mNum=m*freq_b[n]/2;TMC00=ObllllOOll;CR000=regSet_b[n];〃控制时长,四分之一拍;TMCOO|=ObOOOOllOO;whileNum0{;}//TMCOO=ObllllOOU;void stopvoid〃音乐停止函数PM
3.3=1;TMCOO=ObllllOOll;void song〃音乐《小星星》unsigned intM=0;DI;INTTM0000;Timerlnit;EI;flatl,l;flatl,l;flat5,l;flat5,l;flat6,l;flat6,l;flat5,2;flat4,1;flat4,1;flat3,1;flat3,1;flat2,1;flat2,l;flatl,2;flat5J;flat5J;flat4J;flat4J;flat3,l;flat3,l;flat2,2;flat5,l;flat5,l;flat4,l;flat4,l;flat3,l;flat3J;flat2,2;〃音乐停stop;/*---------------主函数----------------*/void main〃设置segO到segl9引脚所对应的端PF2=0x00;PFALL=0X0F;//口为SEG信号输出口LCDCO=0X34;〃设置LCD原时钟和LCD时钟频率LCDMD=0X30;〃设置LCD电压为3/5电源电压LCDM=0XC0;//输出SEG和COM波形,4分时1/3〃偏压模式InitKey_INTKR;〃初始化按键LightOff;〃灯全熄灭InitLed;//初始化LED灯EI;〃开中断whilel〃判断当前显示模式switchgCurrentSchemecase1://清有按键按下标志gFlag=1;〃运行模式1ModlelQ;〃清除当前模式gCurrentScheme=0;break;case2:〃清有按键按下标志gFlag=1;〃运行模式2Modle2;〃清除当前模式gCurrentScheme=0;break;case3:〃清有按键按下标志gFlag=1;〃运行模式3Modle3;//清除当前模式gCurrentScheme=0;break;case4://清有按键按下标志gFlag=1;〃运行模式4Modle4;〃清除当前模式gCurrentScheme=0;break;case5://清有按键按下标志gFlag=1;〃运行模式5Modle5;//清除当前模式gCurrentScheme=0;break;case6://清有按键按下标志gFlag=1;〃运行模式6Modle6;//清除当前模式gCurrentScheme=0;break;default:break;设计思路程序开始运行,音乐开始播放,播放完成后,小灯开始跳舞按下keyl键,屏幕(LCD)显示数字1,表示第一式红、黄、绿灯依次出来亮相,灯光按红灯点亮再熄灭、黄灯点亮再熄灭、绿灯点亮再熄灭的方式循环两次按下key2键,屏幕显示数字2,表示第二式各灯光就位,灯光依次按北、东、南、西四个方向点亮再同时熄灭,循环两次按下Key3键,屏幕显示数字3,表示第三式,小灯以对角线方式,从LED1开始按顺时针方向依次全部点亮,再按此方式熄灭,循环两次按下Key4键,屏幕显示数字4,表示第四式将所有的灯划为4部分东北方向、东南方向、西南方向和西北方向的四个部分小灯依次按东北、东南、西南、西北方向点亮,再按此方向熄灭,循环两次按下Key5键,屏幕显示数字5,表示第五式把中间的LED灯LEDSEC看做领舞,由其带领每个灯点亮,从LED]开始按顺时针方式点亮,全部点亮后熄灭,循环两次按下Key6键,屏幕显示数字6,表示第六式将所有的小灯像打开扇子一样点亮,从中间开始,全部点亮后熄灭,循环两次流程图:开始▼有键值键值1键值2键值3键值4键值5键值6其他▼程序清单//onchip.asm文件OPT_SET CSEGAT80HOPTION:DB2EHDB OOHDB OOHDBOOHDB03HEND//music.h文件#ifndef_MUSIC_H_#define_MUSIC_H_#pragma sfr#pragma EI#pragma DIvoidTimerlnitvoid;〃声明开中断void INTTMOOOvoid;〃声明关中断—interrupt voidMD」NTTM000;void flatintn,int m;void stopvoid;void songvoid;#endif//主程序文件#pragma sfr#pragma NOP#pragma ACCESS〃使用特殊功能寄存器#pragma DI〃使用空操作功能#pragma EI〃使用存储器读写功能#pragma interruptINTKR OnKeyPress〃使用关中断功能#pragma interruptINTTM000MDJNTTM000〃使用开中断功能#include music.h signedint Num=0;unsigned intfreq_b[]={524,587,660,698,784,880,988};〃使用按键中断功能unsigned intregSet_b[]={3816,3406,3030,2864,2550,2272,//Interrupt2022;unsigned chargCurrentScheme=1;〃定义当前小灯闪亮模式unsigned chargFlag=1;〃有按键按下时设置标志gFlag为0,〃否则为1/*---------------长延时函数----------------*/void Delayunsigned char i,j;fori=0;i200;i++forj=0;j100;j++}/*---------------短延时函数----------------*/void Delay1unsigned chari,j;fori=0;i200;i++forj=0;j50;j++/*----------按键中断初始化函数-------------*/void InitKey」NTKRvoidPM4=0x3F;//端口4的位5〜位0为输入端口〃PU4=0x3F;设置端口4的位5〜位0使用内〃部上拉电阻〃设置每个按键按下都会产生按〃键KRM=0x3F;中断信号〃按键中断屏蔽标志设置为允许按//KRMK=0;键中断/*-------------初始化LED灯-----------------*/void InitLed//端口13的低4位为输出模式PM13=0xF0;//端口14的低4位为输出模式//PM14=0xF0;端口15的低4位为输出模式〃端口PM15=0XF0;P34为输出模式PM
3.4=0;*/按键中断服务函数void OnKeyPressvoid〃关中断DI;//设置有按键按下标志gFlag=0;〃检测P4端口的位5〜位0的值switchP40x3F〃按下Keyl键case0x3E://选择1号LED灯闪亮模式gCurrentScheme=1;break;//按下Key2键case0x3D:〃选择2号LED灯闪亮模式gCurrentScheme=2;break;case0x3B:gCurrentScheme=3;break;〃按下Key3键case0x37://选择3号LED闪亮模式gCurrentScheme=4;break;case0x2F:〃按下Key4键gCurrentScheme=5;break;//选择4号LED闪亮模式case OxIF:gCurrentScheme=6;//按下key5键break;〃选择5号LED闪亮模式default:break;〃按下key6键〃选择6号LED闪亮模式EI;/*-------------灯全熄灭函数------------------刃void LightOff〃开中断〃中断返回P13=0;P14=0;P15=0;〃端口13的低四位输出为0〃端口14的低四位输出为/*-------------小灯闪亮模式1----------------*/〃端口15的低四位输出为void Modlelvoidunsigned charw;pokeb0xFA40,0x00;//LCD显示1pokeb0xFA41,0x06;〃无按键中断时循环2次forw=0;w2gFIag;w++P
3.4=1;〃点亮红灯P
13.0=1;P
13.3=1;P
14.2=1;P
15.1=1;Delay;//延时P
3.4=0;〃熄灭红灯P
13.0=0;P
13.3=0;P
14.2=0;P
15.1=0;DelayO;//延时P
13.1=1;P
14.0=1;〃点亮黄灯P
14.3=1;P
15.2=1;DelayO;P
13.1=0;//延时P
14.0=0;〃熄灭黄灯P
14.3=0;P
15.2=0;DelayO;〃延时P
13.2=1;P
14.1=1;〃点亮绿灯P
15.0=1;P
15.3=1;DelayO;P
13.2=0;//延时P
14.1=0;〃熄灭绿灯P
15.0=0;P
15.3=0;DelayO;//延时}void Modle2voidunsigned charw;pokeb0xFA40,0x0e;//LCD显示2pokeb0xFA41,0x03;forw=0;w2gFlag;w++〃没有中断时循环两次P
13.0=1;〃北边三个灯亮P
13.1=1;P
13.2=1;Delay;〃延时P
13.3=1;P
14.0=1;〃东边三个灯亮P
14.1=1;Delay;//延时P
14.2=1;P
14.3=1;〃南边三个灯亮P
15.0=1;DelayO;//延时P
15.1=1;P
15.2=1;//西边三个灯亮P
15.3=1;Delay;LightOffO;//延时Delay;〃12个灯熄灭〃延时/*--------------小灯闪亮模式3-----------------*///从以LED1为对角线的灯开始顺void Modle3void〃时针以对角线方式亮//再依次对角线方式灭彳盾环两次unsigned charw;//LCD显示3pokeb0xFA40,0x0a;pokeb0xFA41,0x07;〃没有中断时循环2次forw=0;w2gFlag;w++//LED
1、LEDSEC、LED7亮P
13.0=1;P
3.4=1;P
14.2=1;//延时Delay;P
13.1=1;〃LED
2、LED8亮P
14.3=l;Delay;〃延时P
13.2=1;//LED
3、LED9亮P
15.O=1;Delay;//延时P
13.3=1;〃LED
4、LED10亮P
15.1=1;DelayO;//延时P
14.0=1;〃LED
5、LED11亮P
15.2=1;Delay;〃延时P
14.1=1;〃LED
6、LED12亮P
15.3=1;Delay;//延时P
13.0=0;LED7灭//LED
1、LEDSEC P
3.4=0;P
14.2=0;Delay;〃延时P
13.1=0;P
14.3=0;〃LED
2、LED8灭//延时Delay;〃LED
3、LED9灭〃延时P
13.2=0;〃LED
4、LED10灭//延时P
15.0=0;Delay;〃LED
5、LED11灭P
13.3=0;P
15.1=0;〃延时Delay;〃LED
6、LED12灭P
14.0=0;P
15.2=0;//延时DelayO;P
14.1=0;P
15.3=0;Delay;〃方向依次亮void Modle4void〃再按此方式灭,循环两次unsignedcharw;pokeb0xFA40,0x03;//LCD显示4pokeb0xFA41,0x06;forw=0;w2gFlag;w++P
13.1=1;〃东北方向3个小灯亮P
13.2=1;P
13.3=1;Delay;//延时P
14.0=1;P
14.1=1;〃东南方向3个小灯亮P
14.2=1;Delay;〃延时P
14.3=1;P
15.0=1;〃西南方向3个小灯亮P
15.1=1;Delay;〃延时P
15.2=1;P
15.3=1;〃西北方向3个小灯亮P
13.0=1;DelayO;//延时P
3.4=1;Delay;//LEDSEC灯亮LightOff;〃延时P
3.4=0;〃所有灯全灭/*------------小灯闪亮模式5----------------*/void Modle5void〃由LEDSEC灯带动,每次带动一〃个灯亮,〃从LED1开始,顺时针亮循环两次unsignedcharw;pokeb0xFA40,0x0b;//LCD显示5pokeb0xFA41,0x05;。
个人认证
优秀文档
获得点赞 0