求代做凌阳61单片机的数字电子钟课程设计的毕业设计

家电百科 产品:
> 求凌阳61单片机电子音乐闹钟时间在2位片选的4位数码管上显示的程序,并能帮忙标注下具体每段的作用。
求凌阳61单片机电子音乐闹钟时间在2位片选的4位数码管上显示的程序,并能帮忙标注下具体每段的作用。 常见问题
主函数是c写的,但是系统函数和按键程序是用汇编写的,4*4键盘按键显示,四位八段共阴数码管,希望能帮到你// 工程名称: led_Show_Key.led_Show_Key.spj &在LED上显示按键&// 功能描述: 按键在LED数码管上显示// 文件来源: 4*4键盘输入在LED数码管上的显示&// IDE环境: SUNPLUS u'nSPTM IDE 1.8.0(or later)// 硬件连接: A0---A6接LED a--g;A8--A14 接LED CS1--4// B口的低8位接键盘// 涉及的库: (a) C-Lib: (CMacro.lib);// // 组成文件:// main.ctypedef#define HaveKey 1#define NoKey 0unsigned int KeyVunsigned int KeyDownT //保存按键次数unsigned int KeycodeLED[4]; //保存显示的LED数字unsigned int KeyF //按键标识//===============================================================================================// 函数: main()// 描述:主函数//============================================================================================int main(){ SP_Init_IOA(); //带数据缓存器的高电平输出 初始化A口为输出口 SP_Init_IOB(); //初始化B口低字节的高四位带数据缓存器的高电平为输出口KeyDownTimes = 0; //低四位为带下拉电阻的输入端KeyFlag = NoKSP_INT_128Hz(); //key scanwhile(1){ while(KeyFlag == HaveKey){ KeyVal=F_Get_Key();KeyFlag = NoKswitch(KeyVal){case 11: //删除键处理if(KeyDownTimes&0)KeyDownTimes--;if(KeyDownTimes==0) TurnOffLed(); //熄灭所有的灯; case 0: //错误键处理 default: //数字键处理if(KeyDownTimes&4){if(KeyVal==10) KeyVal = 0;KeycodeLED[KeyDownTimes] = KeyV //将键值保存到数组中去KeyDownTimes++; }} } for(i=0;iF_Show(i,KeycodeLED[i]); F_ClearWatchdog(); //清看门狗}}//*******************************************************************************************/// void SP_Init_IOA(int A,int B,int C); 来自于Hardware.asm,API接口函数。IOA初始化。A,方向向// 量单元,B数据单元,C属性向量单元// void SP_Init_IOB(int A,int B,int C); 来自于Hardware.asm,API接口函数。IOB初始化。A,方向向// 量单元,B数据单元,C属性向量单元// void SP_INT_128Hz(); 来自于SYSTEM.asm,.TMB2选择128Hz// void F_Get_Key();来自于key.asm,取键值函数// void F_Show(int A,int B);点亮LED;A,LED的位数(C_Dig),B,LED的显示值// main.c 结束//*************************************************************************************************//===============================================================//system,asm//==================================================================.INCLUDE hardware.inc.RAM.DATAC_Address: .DW 0x00bf,0xdb,0x00cf, 0x00e6,0x00ed,0x00fc,0xff,0x00//'0''1''2''3''4''5''6''7''8''9'的代码C_Dig: .DW 0x0,0x0;//选中LED管.EXTERNAL _KeycodeLED.EXTERNAL _KeyDownTimes .CODE//============================================================================================//函数: SP_Init_IOA()//语法:void SP_Init_IOA(int A,int B,int C)//描述:初始化A口//参数:A,方向向量单元,B数据单元,C属性向量单元//返回:无//=============================================================================================.PUBLIC _SP_Init_IOA; //初始化A口为同相高电平输出口_SP_Init_IOA: .PROCr1 = 0 [P_IOA_Attrib] = r1; [P_IOA_Dir] = r1;[P_IOA_Data] = r1;RETF.ENDP;//============================================================================================//函数: SP_Init_IOB()//语法:void SP_Init_IOB(int A,int B,int C)//描述:初始化B口//参数:A,方向向量单元,B数据单元,C属性向量单元//返回:无//=============================================================================================.PUBLIC _SP_Init_IOB; _SP_Init_IOB: .PROCr1 = 0x00f0; [P_IOB_Attrib] = r1; [P_IOB_Dir] = r1;[P_IOB_Data] = r1;RETF.ENDP;//============================================================================================//函数: TurnOffLed()//语法:void TurnOffLed()//描述:关闭所有LED函数//参数:无//返回:无//=============================================================================================.PUBLIC _TurnOffL_TurnOffLed: .PROCr1 = 0x0000[P_IOA_Data] = r1RETF.ENDP//============================================================================================//函数: SP_INT_128Hz()//语法:void SP_INT_128Hz()//描述:TMB2选择128Hz//参数:无//返回:无//=============================================================================================.public _SP_INT_128Hz;_SP_INT_128Hz:r1 = 0x0000;[P_TimeBase_Setup]=r1 // TMB2选择128Hz //TMB1选择8Hz,但不起作用r1 = 0x0001 //开中断IRQ6_TMB2[P_INT_Ctrl]= r1INT IRQRETF;//============================================================================================//函数: F_Show()//语法:void F_Show(int A,int B)//描述:点亮LED//参数:A,LED的位数(C_Dig),B,LED的显示值//返回:无//============================================================================================ .PUBLIC _F_S_F_Show: .PROCPUSH BP TO [SP]; //弹出入口参数共两个入口参数BP = SP + 1 L_Loop:r1 = [BP+3] //取出第一个入口参数r3 = [BP+4] //取出第二个入口参数r2 = r1 + C_D //取LED管的片选地址 r2 = [r2] r4 = r3 + C_Address //取显示数据的地址r4 = [r4]r2 |= r4 [P_IOA_Data] = r2; //显示数据 POP BP FROM [SP]RETF;.ENDP//============================================================================================//函数: F_ClearWatchdog()//语法:void F_ClearWatchdog(void)//描述:清看门狗//参数:无//返回:无//============================================================================================.PUBLIC _F_ClearW_F_ClearWatchdog: .PROCr1 = 1;[P_Watchdog_Clear] = r1;RETF;.ENDP//===================================================================//system.asm结束//=====================================================================//=======================================================================//key.asm//=========================================================================.INCLUDE hardware.inc.IRAM.VAR I_KeyBuf = 0 //保存键值.VAR I_Key_Delay = 0 //扫描有键按下的次数.EXTERNAL _KeyFlag //有键按下标识符.CODE//============================================================================================//函数: F_Key_Scan()//语法:void F_Key_Scan()//描述:键盘扫描函数//参数:无//返回:无//=============================================================================================.PUBLIC F_Key_SF_Key_Scan: .PROC r1 = 0x00F0 //扫描键盘[P_IOB_Data] = r1r1 = 0x000f r1 &= [P_IOB_Data]JNZ L_Have_Key_PressedL_NoKey_Press: //无键按下r1 = 0[I_KeyBuf] = r1 //清键盘缓冲区[_KeyFlag] = r1[I_Key_Delay]=r1;RETFL_Have_Key_Pressed: //有键按下处理 CALL F_Key_Scaning //行扫描确定键CALL Enter_K //确认有键按下RETF .ENDP//============================================================================================//函数: unsigned F_Key_Scaning()//语法:void unsigned F_Key_Scaning()//描述:行扫描函数//参数:无//返回:扫描键值//=============================================================================================.PUBLIC F_Key_S F_Key_Scaning:F_Key_Scan_B7: r2=0x0080 //扫描第一行//changed by abin 扫描第四列[P_IOB_Data] = r2 r1 = 0x000f r1& =[P_IOB_Data]CMP r1,0x0000 //是否该行有键按下JNZ F_Key_Pressed F_Key_Scan_B6:r2=0x0040 //扫描第二行[P_IOB_Data] = r2r1 = 0x000f r1& =[P_IOB_Data]CMP r1,0x0000 //是否该行有键按下JNZ F_Key_Pressed F_Key_Scan_B5: r2=0x0020 //扫描第三行[P_IOB_Data] = r2r1 = 0x000f r1& =[P_IOB_Data]CMP r1,0x0000 //是否该行有键按下JNZ F_Key_Pressed F_Key_Scan_B4:r2=0x0010 //扫描第四行[P_IOB_Data] = r2r1 = 0x000f r1& =[P_IOB_Data]CMP r1,0x0000 //是否该行有键按下JNZ F_Key_Pressed RETF F_Key_Pressed:r2|=r1 //r2--B11~B8:输出 r1--B0~B7,输入RETF//============================================================================================//函数: Enter_Key()//语法:Enter_Key()//描述:确定有键按下函数//参数:无//返回:无//============================================================================================Enter_Key:Scan_first:r3 = [I_Key_Delay]CMP r3,0x0000JNZ L_Scan_[I_KeyBuf] = r2;r3 += 1;[I_Key_Delay] = r3;RETF;L_Scan_many: //去抖r1 = [I_KeyBuf] CMP r1,r2JNE L_Error_Key_r3 = [I_Key_Delay]r3 += 1;[I_Key_Delay] = r3; CMP r3, 0x0010; JE L_Enter_Have_KeyDRETF;L_Enter_Have_KeyDown:r1 = 1;[_KeyFlag] = r1r3 = 0;[I_Key_Delay]=r3RETFL_Error_Key_pro:r3 = 0;[I_Key_Delay]=r3[I_KeyBuf] = r3RETF;//============================================================================================//函数: unsigned F_Get_Key()//语法:unsigned F_Get_Key()//描述:取键值函数//参数:无//返回:键值//============================================================================================.PUBLIC _F_Get_K _F_Get_Key: .PROCr3 = 1r2 = [I_KeyBuf]L_Key_value_Loop:bp = r3 + Key_Tabler1 = [bp]CMP r1,r2JE L_KeyCode_Returnr3 += 1CMP r3,11JBE L_Key_value_Loopr3=0L_KeyCode_Return:r1 = 0;[I_KeyBuf] = r1;r1=r3 RETF //清键盘缓冲区.ENDP Key_Table:.DW 0x4,0x4.DW 0x2,0x1.DW 0x1,0x8.DW 0x2,0x8//===============================================================//key.asm结束//=================================================================
标签:&&&&&&&&&
" tab="tab_0" >常见问题热点事件家电人物家电名词
热门新品1 123 4 5 6 7 8 9 10基于凌阳61单片机的音乐播放器的设计与实现论文_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
基于凌阳61单片机的音乐播放器的设计与实现论文
阅读已结束,如果下载本文需要使用
想免费下载本文?
你可能喜欢基于凌阳单片机的便携式瓦斯智能监测系统设计毕业设计_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
&购买后可评价
您可以上传图片描述问题
联系电话:
请填写真实有效的信息,以便工作人员联系您,我们为您严格保密。
基于凌阳单片机的便携式瓦斯智能监测系统设计毕业设计
试读已结束,如果需要继续阅读或下载,敬请购买
你可能喜欢北京求代做单片机毕业设计_百度知道
北京求代做单片机毕业设计
需要做硬件,手工焊板
我有更好的答案
我们是专业的团队为你您服务 ,给讲解辅导。包会。让你顺利通过答辩。
你好,我们可以给你做。已经加qq了。联系吧。
其他类似问题
为您推荐:
单片机毕业设计的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 单片机制作电子钟 的文章

 

随机推荐