基于51单片机的多功能计算器设计课程设计(编辑修改稿)内容摘要:

k 1个; 10k滑动变阻器 1个; 10Ω 1个; ( 10) 开关 1个 ( 11) 5V有源蜂鸣器 1个 ( 12) 三极管 S8550一个 ( 13) 排针若干,杜邦线若干 22 附录 2 程序清单 分 9 个文件: , ,, , (a) 程序清单: ifndef __delay_h__ define __delay_h__ void delay_us(uint t)。 void delay_ms(uint t)。 endif (b) 程序清单: include void delay_us(unsigned int t) { while(t)。 } void delay_ms(unsigned int t) { unsigned int i, j。 for (i = 0。 i t。 i++) { for (j = 0。 j 65。 j++) { delay_us(1)。 } } } (c) 程序清单: ifndef __LCD1602_H define __LCD1602_H void LCD_write_(unsigned char )。 void LCD_write_Data(unsigned char Data)。 void LCD_clear(void)。 void LCD_init(void)。 void LCD_write_char(unsigned char x,unsigned char y,unsigned char Data)。 void LCD_write_str(unsigned char x,unsigned char y,unsigned char *s)。 23 endif (d) 程序清单: include sbit RS = P2^4。 //定义端口 数据命令选择 H/L sbit RW = P2^5。 //读写 H/L sbit EN = P2^6。 //使能 extern unsigned char sk。 define RS_CLR RS=0 define RS_SET RS=1 define RW_CLR RW=0 define RW_SET RW=1 define EN_CLR EN=0 define EN_SET EN=1 /******************************************************************/ /* 写入命令函数 */ /******************************************************************/ void LCD_write_(unsigned char ) { RS_CLR。 RW_CLR。 EN_SET。 P0 =。 delay_us(5)。 EN_CLR。 } /******************************************************************/ /* 写入数据函数 */ /******************************************************************/ void LCD_write_Data(unsigned char Data) { RS_SET。 RW_CLR。 EN_SET。 P0 = Data。 delay_us(5)。 EN_CLR。 } /******************************************************************/ /* 清屏函数 */ /******************************************************************/ void LCD_clear(void) { LCD_write_(0x01)。 delay_ms(5)。 24 if(sk == 1) { LCD_write_char(0,1,0xde)。 LCD_write_(0x80)。 } else { LCD_write_char(0,1,0x20)。 LCD_write_(0x80)。 } } /******************************************************************/ /* 写入字符串函数 */ /******************************************************************/ void LCD_write_str(unsigned char x,unsigned char y,unsigned char *s) { unsigned char i,j。 if (y == 0) { LCD_write_(0x80 + x)。 } else { LCD_write_(0xC0 + x)。 } for(i=4。 i0。 i) { if(s[14] == 39。 039。 || s[14] == 39。 .39。 ) { for(j=14。 j1。 j) { s[j] = s[j1]。 } } else break。 } while (*s) { LCD_write_Data(*s)。 s++。 } } /******************************************************************/ /* 写入字节函数 */ 25 /******************************************************************/ void LCD_write_char(unsigned char x,unsigned char y,unsigned char Data) { if (y == 0) { LCD_write_(0x80 + x)。 } else { LCD_write_(0xC0 + x)。 } LCD_write_Data(Data)。 } /******************************************************************/ /* 初始化函数 */ /******************************************************************/ void LCD_init(void) { LCD_write_(0x38)。 /*显示模式设置 */ delay_ms(5)。 LCD_write_(0x38)。 delay_ms(5)。 LCD_write_(0x38)。 delay_ms(5)。 LCD_write_(0x38)。 LCD_write_(0x08)。 /*显示关闭 */ LCD_write_(0x01)。 /*显示清屏 */ LCD_write_(0x06)。 /*显示光标移动设置 */ delay_ms(5)。 LCD_write_(0x0C)。 /*显示开及光标设置 */ } (e)按键 程序清单: ifndef __KEYBOARD_H define __KEYBOARD_H unsigned char KeyProcess(void)。 //读按键函数 unsigned char keyscan(void)。 //键盘扫描函数 endif (f)按键 程序清单: include extern unsigned char sk。 sbit key0=P2^0。 sbit key1=P2^1。 sbit key2=P2^2。 sbit key3=P2^3。 26 sbit speak=P2^7。 unsigned char KeyProcess(void) { unsigned char key。 unsigned char keyvalue = 16。 key=keyscan()。 //调用键盘扫描 switch(key) { case 0xee:keyvalue = 0。 break。 //0 按下相应的键显示相对应的码值 case 0xde:keyvalue = 1。 break。 //1 按下相应的键显示相对应的码值 case 0xbe:keyvalue = 2。 break。 //2 case 0x7e:keyvalue = 3。 break。 //3 case 0xed:keyvalue = 5。 break。 //4 case 0xdd:keyvalue = 6。 break。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。