- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * 5.11 使用C51编译器时的注意事项 1.采用短变量。减小变量的数据宽度是提高代码效率的最基本的方法。 2.避免使用浮点运算。在8位CPU上进行32位浮点数运算,速度是很慢的,如果需要使用浮点数时,可以考虑是否使用整型运算来替代浮点运算。整型(长整型)的运算速度要比浮点数(双精度)的运算速度要快得多。 3.使用位变量。对于逻辑值运算应使用位变量。 4.使用宏定义常量。这可以提高程序的可维护性。 5.用局部变量代替全局变量。全局变量始终占用内存空间,因此使用全局变量会占用更多的内存空间。 * * 6.尽量使用内部数据存储区。从存储速度考虑,应按下面的顺序使用存储器DATA、IDATA、PDATA、XDATA。 7.使用存储器指针。程序中使用指针时,应指定指针的类型,确定它们指向的存储区域,这样程序代码会更加紧凑,运行速度会更快。 8.存储器模式。C51编译器提供了3种存储器模式,应该尽量使用小存储器模式。 例:设计单片机与4×4矩阵键盘接口并驱动一数码管显示的电路,P1口接键盘,P0口接共阴数码管,按数字键(0 ~ 9),在数码管上显示相应的键号,按其它键数码管清零,编程实现。 #include reg51.h #define uchar unsigned char #define uint unsigned int //段码 uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82, 0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00}; sbit BEEP=P3^7; //上次按键和当前按键的序号,该矩阵中序号范围0~15, // 16表示无按键 uchar Pre_KeyNo=16 , KeyNo=16; //延时 void DelayMS(uint x) { uchar i; while(x--) for(i=0; i120; i++); } //矩阵键盘击键检查 uchar CH_Key (void) { uchar key_temp; P1=0x0f; //高4 位置0,放入4 行 key_temp =P1^0x0f; return (key_temp);} //矩阵键盘扫描 void Keys_Scan() { uchar Tmp; P1=0xf0; //低4 位置0,放入4列 Tmp=P14 ^ 0x0f switch(Tmp) //判断按键发生于0~3 行的哪一行 { case 1: KeyNo=0 ; break; case 2: KeyNo=4 ; break; case 4: KeyNo=8 ; break; case 8: KeyNo=12;break; default: KeyNo=16; //无键按下 } P1=0x0f; //高4 位置0,放入4 行 Tmp=P1^0x0f; switch(Tmp) //对0~3 列分别附加起始值0,1,2,3 { case 1: KeyNo+=0;break; case 2: KeyNo+=1;break; case 4: KeyNo+=2;break; case 8: KeyNo+=3; break; default: KeyNo=16; //无键按下 } } //开蜂鸣器 void Open_Beep(void ) { BEEP=1; } //关蜂鸣器 void Close_Beep(void ) { BEEP=0; } //主程序 void main( ) { P0=0x00; Close_Beep( ); while(1) //显示键号 void Show_Count_ON_DSY() {if(KeyNo16) P0=DSY_CODE[KeyNo]; ELSE P0=DSY_CODE[0]; } { if (CH_Key ( )!=0 ) { DelayMS(10); if (CH_Key ( )!=0 ) { Keys_Scan( ); //获取键序号 if( Pre_KeyNo!= KeyNo ) { Show_Count_ON_DSY(KeyNo ) Open_Beep( ); Pre_KeyNo
您可能关注的文档
最近下载
- 部编版四上语文第三单元语文单元整体教学设计(学历案).pdf VIP
- 2025年新冀教版数学一年级上册全册同步教学课件.pptx
- 《中国的能源安全(第2课时)》教学设计【高中地理(新课标)选必修3】.pdf VIP
- ISO9001-2025年质量管理体系全套文件(手册及程序文件).docx
- 【附依据】企业通用--全套消防工作台账、表格汇总.docx VIP
- GB51004-2015建筑地基基础工程施工规范.doc VIP
- 部编版四上语文第八单元语文单元整体教学设计(学历案).pdf VIP
- 2025-2030年中国泡沫铝市场发展方向调查及投资行情价值规划报告.docx
- 部编版四上语文第四单元语文单元整体教学设计(学历案).pdf VIP
- 科迈控制器IC-NT中文说明书.pdf
文档评论(0)