单片机音乐盒设计程序:数字音乐盒(急求大神帮忙,超感谢)

51单片机程序问题,急求大神帮忙!!_百度知道
数组名不能以数字开头和某些特殊符号,你可以这样写就没事,例如 uchar code first[]={};
其他类似问题
为您推荐:
51单片机的相关知识
其他1条回答
这是一个数组,怎么了?
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁热门版块:
PIC10LF322单片机问题,急求大神帮忙
本帖最后由 小妮子900718 于
19:26 编辑
程序不知道哪里出问题了,烧进单片机后不运行啊,单片机电压正常,电路的各个工作点电压也正常,急求大神帮忙解决,菜鸟在此感激不尽啊#include&xc.h&#define_XTAL_FREQ& && &8000000#define__delay_us(x) _delay((unsigned long)((x)*(_XTAL_FREQ/)))#define__delay_ms(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000.0)))main(){& && && &unsigned&&& & & && && && &IRCF0=0;& && && &&&& && && &IRCF1=1;& && && && && && && && && && &IRCF2=1;& && && &&&TRISA=0X09;& && && && && &PORTA=0x00;& && && && && && &ANSA0=0;& && && && && && && && && && && && && && && & ANSA1=0;& && && && && && && && && && && && && && && & ANSA2=0;& && && && && && && && && && && && && && && & SWDTEN=0;& && && && && && && && && && && &__delay_ms(480);& && && && &&&RA1=1;& && && && && && && && && && && && && && && && && &WPUA3=1;& && && && && && && && && && && &&& if(LFIOFR==1)& && && && && && && && && & & &{& & IRCF0=0;& && && && && && &IRCF1=0;& && && &&&& && && &IRCF2=0;&&& &} SWDTEN=1;& && && && && && && &&&& &&&WDTPS0=0;& && && && && && && & WDTPS1=1;& && &&&WDTPS2=1;& && && && & WDTPS3=0;& && && && && &&&WDTPS4=0;& && &for(i=1;i&235;i++)& && && && &&&& &{ & &asm(&SLEEP&); & &} while(1)& && && &{& && && && && & RA2=1;& && && && && && && && &&&}
系统时钟有没有设置了
站长推荐 /4
Powered by单片机课程设计题目大全_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
文档贡献者
评价文档:
单片机课程设计题目大全
大小:2.20MB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢音乐盒设计(单片机课程设计)1_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
音乐盒设计(单片机课程设计)1
阅读已结束,如果下载本文需要使用
想免费下载本文?
你可能喜欢急求大神帮看下这段程序 ,谢谢,本人邮箱_51单片机吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:20,758贴子:
急求大神帮看下这段程序 ,谢谢,本人邮箱收藏
功能:住户刷卡开门、住户按钮开门、访客呼叫开门;相关的LCD1602显示、4*4键盘矩阵的模块 8255a扩展,max813l看门狗,ds1302时钟芯片,max232串口电路,t713xm读卡器,lcd1602显示模块,#include &reg52.h&#include &intrins.h&#include&define.h&#include&delay.h&#include&enter_out.h&#include&lcd.h&#include&keyboard.h&#include&display.h&#include&T1.h&#include&math.h&#include&stdio.h&Sbit pfo=P3^2;sbit wdi= P2^6;sbit t2in= P3^1;sbit r2out= P3^0;sbit lcde= Pb^0;sbit rs= Pb^1;sbit rw= Pb^2;sbit scl= P2^1;sbit sda=P2^0;sbit sclk=P2^5;sbit ce= P3^5;sbit io=P3^4;sbit so= P2^2;sbit sck = P2^3;sbit cp = P2^4;sbit d= Pc^3;sbit c= Pc^2;sbit b= Pc^1;sbit a= Pc^0;sbit en= Pc^4;sbit REL=PB^3; //输出信号,为0是开门sbit beep=PB^5;
0为报警sbitled= PB^4
//指示灯#defineuchar unsigned char#defineuint unsigned int#include&absacc.h& #define PORTA XBYTE[0X7FFC]#define CONTROL XBYTE[0X7FFF]/********************************显示数据表*********************************/unsignedchar code dis1[] = {&WELCOME!INPUT&};unsignedchar code dis2[] = {&模拟刷卡或者门号输入?&};unsignedchar code dis3[] = {&PLEASE &};unsignedchar code dis4[] = {&模拟刷卡&};unsignedchar code dis5[] = {&卡号正确&};unsignedchar code dis6[] = {&________&};unsignedchar code dis7[] = {&非法卡&};unsignedchar code dis57[] = {&门号输入!&};unsignedchar code dis8[] = {&*
&};unsignedchar code dis9[] = {&第二的门号:&};unsignedchar code dis10[] = {&**
&};unsignedchar code dis11[] = {&第三个门号:&};unsignedchar code dis12[] = {&***
&};unsignedchar code dis60[]= {&门号输入正确&};unsignedchar code dis61[]= {&连接中…&};unsignedchar code dis62[]= {&门号输入错误&};unsignedchar code dis63[]= {&错误三次&};unsignedchar code dis10[]= {&门开状态&};unsignedchar tab_time[];unsignedchar tab_1302[];unsignedchar tab_ymdw[];intturedoornum[16]={101,102,103,201,202,203,301,302,303,401,402,403,501,502,503,601};unsignedchar numface=0;unsignedchar numface1=0;unsignedchar numface2=0;unsignedchar numface3=0;uchardoornumkey_data=0;
unsignedchar key_data=0;unsignedchar doornum[]={0,0,0};unsignedchar errortimes=0;ucharNumber=0;void watchdog()
max813l_pin_WDI=1;
max813l_pin_WDI=0;
} uchartab_1302[7]; //初始化时时间日期设置
//----向DS1302写一字节 (上升沿有效)-------//----数据输入从低位到高位
------------voidwriteds_byte(uchar dat)
{uchari,dat_w;dat_w=
//数据送给变量dat_wfor(i=0;i&8;i++)
//数据线先拉低
if(dat_w&0x01)
dat_w=dat_w&&1;
//右移一位
//先拉低时钟信号
//拉高时钟信号
//写一字节完毕,拉低时钟信号}//----从DS1302读一字节(下降沿有效) --------//----读出数据时从低位0位到高位7
-----------ucharreadds_byte(){uchari,k;k=0;for(i=0;i&8;i++){
{k=k|0x80;}
//先拉低时钟信号
sclk=0;}sclk=0;return(k);}//----指定地址写一数据 --------voidwriteds_add(uchar add,uchar dat) //dat为十进制数{rst=0;sclk=0;rst=1;
//拉高RSTwriteds_byte(add);
// 写地址writeds_byte((dat/10&&4)|(dat%10));// DS1302中的时间数据是BCD码形式sclk=0;rst=0;}//----指定地址读出一数据 ------ucharreadds_add(uchar add){uchartemp,dat1,dat2;rst=0;sclk=0;rst=1;writeds_byte(add);temp=readds_byte();//读取的数据为16进制sclk=0;
//读取完毕,拉低SCLKrst=0;
//拉低SCLKdat1=temp/16;
//16进制转成BCDdat2=temp%16;temp=dat1*10+dat2;
//转换成10进制数字return(temp);
}//----DS1302初始化 --------//----设置初始时间 --------voidds1302_init(){uchari,add=0x80;writeds_add(0x8e,0x00);
//允许写入for(i=0;i&7;i++)
writeds_add(add,tab_1302[i]);
}writeds_add(0x90,0xa6);
//写充电控制寄存器.writeds_add(0x8e,0x80);
//禁止写入}//----获取DS1302时间 --------//----在主函数中调用 --------voidds1302(){uchari,add=0x81;writeds_add(0x8e,0x00);
//允许向DS1302写入数据for(i=0;i&7;i++){
tab_1302[i]=readds_add(add); //获得的数据已转换为十进制
add+=2;}writeds_add(0x8e,0x80);
//获取完一次时间,禁止向DS1302写入数据,提高可靠}/*************函数名:时间限制***************/bittrans(){//result=(bit)((tab_1302[2]!=0)&&(tab_1302[2]!=1)&&tab_1302[2]!=2&&tab_1302[2]!=3&&tab_1302[2]!=4&&tab_1302[2]!=5);//在凌晨0点到5点的时刻进行门号呼叫的限制}/******************
函数名:两个延时子程序*************/voiddelay10ms(void) //10ms延时程序{
unsigned char a,b;
for(a=20;a&0;a--)
for(b=248;b&0;b--); }
void delay1ms(int z)
//延时为1ms
当 delay(1000)为1000为一秒{
for(x=z;x&0;x--)
for(y=110;y&0;y--);}/******************函数功能:1602的LCD延时子程序*********************/voiddelay(unsigned char ms){
while(ms--)
for(i = 0; i& 250; i++)
}}/**************************函数功能:测试LCD忙碌状态***************/bitlcd_bz(){
result = (bit)(P0 & 0x80);
ep = 0;}/********函数功能:写指令数据到LCD子程序****************/voidlcd_wcmd(unsigned char cmd){
while(lcd_bz());//判断LCD是否忙碌
ep = 0;}/*******函数功能:设定显示位置子程序**********/voidlcd_pos(unsigned char pos){
lcd_wcmd(pos | 0x80);}/************函数功能:写入显示数据到LCD子程序********************************/voidlcd_wdat(unsigned char dat){
while(lcd_bz());//判断LCD是否忙碌
ep = 0;}/**************函数功能:LCD初始化子程序********************/voidlcd_init(){
lcd_wcmd(0x38);
lcd_wcmd(0x0c);
lcd_wcmd(0x06);
lcd_wcmd(0x01);
delay(1);}/*********欢迎界面***************************************************/
void welcome(void){示位置
i = 0;while(dis2[i]!= '\0')
lcd_wdat(dis2[i]);// 显示字符
while(P1!=0x0f);}/******函数名:上次开门时间显示***************/voidcheckdisplay(void)//上次的开门时间 {
lcd_init();// 初始化LCD
delay(10);
lcd_pos(0x01);//设置显示位置
while(tab_ymdw[i]!= '\0')
lcd_wdat(tab_ymdw[i]);//显示字符
lcd_pos(0x42);// 设置显示位置
while(tab_time[i]!= '\0')
lcd_wdat(tab_time[i]);// 显示字符
delay1ms(10);
//延时为1ms
当 delay(1000)为1000为一秒延时2秒}
/************函数名:warning(void) 功
能:报警 说
明:未关报警********************/voidwarning(void)
delay1ms(200);
delay1ms(200);
delay1ms(200);
delay1ms(200);
delay1ms(200);
delay1ms(200);
delay1ms(200);
delay1ms(200);
delay1ms(200);
}/************函数名:void Pass_face6() /*******函数名:doornumdis() 功
能:门号输入界面 说
明: dis60[i],dis6[i] ******************/voiddoornumdis(void) {
lcd_init();// 初始化LCD
delay(10);
lcd_pos(0x01);//设置显示位置
while(dis60[i] != '\0')
lcd_wdat(dis60[i]);//显示字符
lcd_pos(0x42);// 设置显示位置
while(dis61[i] != '\0')
lcd_wdat(dis61[i]);// 显示字符
numface=1;
//输入0个密码标识符
while(P1!=0x0f);}
/********* 函数名:doornum_ok() 功
能:门号输入正确显示界面 说
明:对输入密码输入模拟
dis62[i],dis63[i] **************/voiddoornum_ok(void) {
lcd_init();// 初始化LCD
delay(10);
lcd_pos(0x01);//设置显示位置
while(dis62[i] != '\0')
lcd_wdat(dis62[i]);//显示字符
lcd_pos(0x42);// 设置显示位置
while(dis63[i] != '\0')
lcd_wdat(dis63[i]);// 显示字符
delay1ms(2000);
welcome();}
/***** 函数名:
doorchoose(); 功
能:门号选择 说
明:对输出对门号的选择**************/voiddoorchoose(void){ switch(num){ case 101:P3=0xe0;//0 case 102:P3=0xe8;//1 case 103:P3=0xe4;//2 case 201:P3=0//3 case 202:P3=0xe2;//4 case 203:P3=0//5 case 301:P3=0xe6;//6 case 302:P3=0//7 case 303:P3=0xe1;//8 case 401:P3=0xe9;//9 case 402:P3=0xe5;//10 case 403:P3=0//11 case 501:P3=0xe3;//12 case 502:P3=0//13 case 503:P3=0xe7;//14 case 601:P3=0//15 }}
/************************** 函数名: doornumcom(); 功
能:门号输入比较函数 说
明:对输入门号与机器设置的门号比较***********/voiddoornumcom(void)//门号比较函数{
num=doornum[0]*100+doornum[1]*10+doornum[2];if(com=(num==turedoornum[0]||num==turedoornum[1]||num==turedoornum[2]||num==turedoornum[3]||num==turedoornum[4]||num==turedoornum[5]||num==turedoornum[6]||num==turedoornum[7]||num==turedoornum[8]||num==turedoornum[9]||num==turedoornum[10]||num==turedoornum[11]||num==turedoornum[12]||num==turedoornum[13]||num==turedoornum[14]||num==turedoornum[15]))
doornum_ok();
doorchoose();
// 调用门号选择函数
delay1ms(500);
// 正确提示音
// 继电器关闭,即密码锁开启
else if(com==0)
pass_error();//输出“密码错误的显示”
}}/*****************函数名:Getch() 功
能:键盘扫描程序 说
明:对4x4键盘扫描输出键值*********/unsignedchar Getch(void){
unsigned char X,Y,Z;
//先对P1 置数行扫描
//k=0xff表示没有键被按下
if(P1!=0x0f)
//判断是否有键按下
delay10ms(); //延时,软件去干扰
if(P1!=0x0f) //确认按键按下X= P1;
//保存行扫描时有键按下时状态
//保存列扫描时有键按下时状态
//取出键值
switch ( Z )
//判断键值(那一个键按下)
case 0xee: k=0; //对键值赋值
case 0xde: k=1;
case 0xbe: k=2;
case 0x7e: k=3;
case 0xed: k=4;
case 0xdd: k=5;
case 0xbd: k=6;
case 0x7d: k=7;
case 0xeb: k=8;
case 0xdb: k=9;
case 0xbb: k=10;
case 0x7b: k=11;
case 0xe7: k=12;
case 0xd7: k=13;
case 0xb7: k=14;
case 0x77: k=15;
} //等待按键释放
while(P1!=0x0f);
}}unsignedchar keyscan(void)
//调用键盘扫描程序{
returnGetch();} //////////主函数/////////////////////voidmain(void){
ds1302(); //实时时钟芯片时间读入
if(face6==1)
//////////////////////////为门号输入按键扫描
else if((k&=0 &&k&=9)&&(numface==1))
//门号第一位 1
doornumkey_data=k;
doornum[0]=doornumkey_
doornumkey_data=0;
numface=2;
doornumface1();
numface1=1;
else if((k&=0 &&k&=9)&&(numface==2)&&(numface1==1)) //门号第二位
doornumkey_data=k;
doornum[1]=doornumkey_
doornumkey_data=0;
numface1=2;
doornumface2();
numface2=1;
else if((k&=0 &&k&=9)&&(numface==2)&&(numface1==2)&&(numface2==1))//门号第3位
doornumkey_data=k;
doornum[2]=doornumkey_
doornumkey_data=0;
numface2=2;
doornumface3();
numface3=1;
else if(k==15)
//密码输入界面
codeinput(); //codeinput显示函数
else if(k==14&&trans())//门号输入
doornumdis();
else if(k==13&&trans())
//欢迎界面
welcome();
else if(k==12&&trans())//门号重复输入界面
doornumcom();
ucharLCD_Display_Data[]={&DATA:00-00-00
&};ucharLCD_Display_Time[]={&TIME:00-00-00
&};uchar Time_Data[7];uchar Months_Day[]={0,31,0,31,30,31,30,31,31,30,31,30,31};//ucharWeek[]={&SUN&,&MON&,&TUS&,&WEN&,&THU&,&FRI&,&SAT&};uchar Char_Flag[]={&-MHDM-Y&};char Adjust_Idx=-1;//ucharSet_Time_Data[]={0x05,0x05,0x05,0x05,0x05,0x05,0x05};void _delay_ms(unsigned int x){while(x--){for(i=0;i&200;i++);}}bit LCD_Busy(void)//测忙{bit LCD_S//返回值变量LCD_RS=0;//读取状态LCD_RW=1;LCD_EN=1;_nop_();_nop_();_nop_();_nop_();LCD_Status=(bit)(P0&0x80);LCD_EN=0;return LCD_S}void LCD_Write_Command(uchar cmd)//写指令{//while(LCD_Busy());LCD_RS=0;//LCD_RW=0;LCD_EN=0;_nop_();_nop_();P0=_nop_();_nop_();_nop_();_nop_();LCD_EN=1;_nop_();_nop_();_nop_();_nop_();LCD_EN=0;}void LCD_Write_Data(uchar dat)//写数据{//while(LCD_Busy());//每次写数据操作之前均需要检测忙信号LCD_RS=1;LCD_RW=0;LCD_EN=0;P0=_nop_();_nop_();_nop_();_nop_();LCD_EN=1;_nop_();_nop_();_nop_();_nop_();LCD_EN=0;}void Init_LCD(void)//液晶初始化{_delay_ms(15);//延时15MSLCD_Write_Command(0x38);_delay_ms(5);LCD_Write_Command(0x38);_delay_ms(5);LCD_Write_Command(0x38);//以后每次写指令操作之前均需要检测忙信号//while(LCD_Busy());//while(LCD_Busy());_delay_ms(5);LCD_Write_Command(0x38);//设置16*2显示,5*7点阵,8位数据接口_delay_ms(5);LCD_Write_Command(0x01);//清屏_delay_ms(5);//while(LCD_Busy());LCD_Write_Command(0x0c);//开显示,不显示光标_delay_ms(5);//while(LCD_Busy());LCD_Write_Command(0x06);//当读或写一个字符后地址指针加一,且光标加一}void LCD_POS(uchar pos)//字符显示位置{LCD_Write_Command(0x80|pos);}void Show_String(uchar *str)//显示字符串{while(*str!='\0')LCD_Write_Data(*str++);}void DS1302_Write_A_Byte(uchar x){for(i=0;i&8;i++){DS1302_SDA=x&0x01;DS1302_SCL=1;DS1302_SCL=0;x&&=1;}}void DS1302_Write_Data(uchar addr,uchardat){DS1302_SCL=0;DS1302_RST=1;DS1302_Write_A_Byte(addr);DS1302_Write_A_Byte(dat);DS1302_SCL=0;//DS1302_RST=0;}uchar DS1302_Read_A_Byte(void){uchar i,b,t;for(i=0;i&8;i++){b&&=1;t=DS1302_SDA;b|=t&&7;DS1302_SCL=1;DS1302_SCL=0;}return (b/16*10+b%16);}uchar Read_Data(uchar addr){DS1302_RST=0;DS1302_SCL=0;DS1302_RST=1;DS1302_Write_A_Byte(addr);dat=DS1302_Read_A_Byte();DS1302_SCL=1;DS1302_RST=0;}void Get_Time(void){uchar i,addr=0x81;for(i=0;i&7;i++){Time_Data[i]=Read_Data(addr);addr+=2;}}void Set_DS1302(void){DS1302_Write_Data(0x8e,0x00);for(i=0;i&7;i++){DS1302_Write_Data(0x80+i*2,(Time_Data[i]/10&&4)|(Time_Data[i]%10));}DS1302_Write_Data(0x8e,0x80);}uchar Leap_Year(uint y){return(y%4==0&&y%100!=0)||(y%400==0);}/*void I_Week_Day(void){uint i,Week,Dfor(i=2000;i&2000+Time_Data[6];i++){Day=Leap_Year(i)?366:365;Week=(Week+Day)%7;}Day=0;for(i=1;i=Time_Data[4];i++){Day+=Months_Day[i];}Day+=Time_Data[3];Time_Data[5]=(Week+Day)%7+1;}*/void Set_Time_Data(uchar x){switch(Adjust_Idx){case 6:if(x==1&&Time_Data[6]&99)Time_Data[6]++;if(x==-1&&Time_Data[6]&0)Time_Data[6]--;Months_Day[2]=Leap_Year(2000+Time_Data[6])?29:28;if(Time_Data[3]&Months_Day[Time_Data[4]])Time_Data[3]=Months_Day[Time_Data[4]];//I_Week_Day();case 4:if(x==1&&Time_Data[4]&12)Time_Data[4]++;if(x==-1&&Time_Data[4]&1)Time_Data[4]--;Months_Day[2]=Leap_Year(2000+Time_Data[6])?29:28;if(Time_Data[3]&Months_Day[Time_Data[4]])Time_Data[3]=Months_Day[Time_Data[4]];//I_Week_Day();case 3:Months_Day[2]=Leap_Year(2000+Time_Data[6])?29:28;if(x==1&&Time_Data[3]&Months_Day[Time_Data[4]])Time_Data[3]++;if(x==-1&&Time_Data[3]&0)Time_Data[3]--;//I_Week_Day();case 2:if(x==1&&Time_Data[2]&23)Time_Data[2]++;if(x==-1&&Time_Data[2]&0)Time_Data[2]--;case 1:if(x==1&&Time_Data[1]&59)Time_Data[1]++;if(x==-1&&Time_Data[1]&0)Time_Data[1]--;}}void Scan_Set_Time(void){if(key0==0){while(!key0);if(Adjust_Idx==-1||Adjust_Idx==1)Adjust_Idx=7;Adjust_Idx--;if(Adjust_Idx==5)Adjust_Idx=4;LCD_Display_Time[13]='[';LCD_Display_Time[14]=Char_Flag[Adjust_Idx];LCD_Display_Time[15]=']';}else if(key1==0){while(!key1);Set_Time_Data(1);}else if(key2==0){while(!key2);Set_Time_Data(-1);}else if(key3==0){while(!key3);Set_DS1302();LCD_Display_Time[13]=' ';LCD_Display_Time[14]=' ';LCD_Display_Time[15]=' ';Adjust_Idx=-1;}}void main(void){Init_LCD();Set_DS1302();while(1){//Get_Time();LCD_Display_Data[5]=Time_Data[6]/10+'0';LCD_Display_Data[6]=Time_Data[6]%10+'0';LCD_Display_Data[8]=Time_Data[4]/10+'0';LCD_Display_Data[9]=Time_Data[4]%10+'0';LCD_Display_Data[11]=Time_Data[3]/10+'0';LCD_Display_Data[12]=Time_Data[3]%10+'0';//LCD_Display_Data[13]=Week[Time_Data[5]-1];LCD_Display_Time[5]=Time_Data[2]/10+'0';LCD_Display_Time[6]=Time_Data[2]%10+'0';LCD_Display_Time[8]=Time_Data[1]/10+'0';LCD_Display_Time[9]=Time_Data[1]%10+'0';LCD_Display_Time[11]=Time_Data[0]/10+'0';LCD_Display_Time[12]=Time_Data[0]%10+'0';LCD_POS(0);Show_String(LCD_Display_Data);LCD_POS(0x40);Show_String(LCD_Display_Time);if(Adjust_Idx==-1)Get_Time();Scan_Set_Time();}}
闯了天涯、逛了世界,太太只青睐洋房,金悦府,一个有花有树的地方,还有你的幸福,怎么样亲爱的,我们就住在这里吧!满足你种草赏花的愿望。买房QQ群:0391789了解详情请点击:河南郑州
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或

我要回帖

更多关于 单片机音乐盒 的文章

 

随机推荐