完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
用proteus进行仿真编译也成功了,可是就是实现不了功能。 程序也检查不出什么问题。 求解大神怎么破
#include #define CLEARSCREEN LCD_write_command(0x01) #define uint unsigned int #define uchar unsigned char /**************定义接口************************/ #define LCDIO P0 #define KEYBOARD P1//保留 ***it LCD1602_RS=P2^0; ***it LCD1602_RW=P2^1; ***it LCD1602_EN=P2^2; /************************************************/ code uchar mayuan[16]={'0','1','2','3','4','5','6','7','8','9','0','/','*','-','+','='};//不错,这个比较明了 unsigned char code keycode[]={0x11,0x21,0x41,0x81,0x12,0x22,0x42,0x82, 0x14,0x24,0x44,0x84,0x18,0x28,0x48,0x88};//键盘编码值() int i,j,k=1,s;// int t,t1,t2,a[];// void delay(uchar);//延时 /**************定义函数************************/ void LCD_init(void);//初始化函数 void delay_nms(unsigned int n);//延时函数 void LCD_write_command(unsigned char command);//写入指令函数 void LCD_write_dat(unsigned char dat);//写入数据函数 void delay_10ms(); initial(); uchar keyscan();//键盘扫描函数 calc(uchar);//计算函数 uchar num,temp,key,keynum; void main()//主函数 { LCD_init(); delay_nms(100); while(1) { initial();//有中断 KEYBOARD =0xf0;//键盘的列值全置高电平 } } /**********************************开中断***************************************/ initial() { EA=1;//总开关 EX0=1;//中断方式0开启 IT0=0; } /*******************************************************************************/ /*********************************中断函数************************************/ void inter0() interrupt 0 { unsigned char n; delay_10ms();//延时 if(INT0==0)//没键按下 { EX0=0;//关中断 n=keyscan(); calc(n); EX0=1;//开中断 KEYBOARD=0xf0;//键盘的列值全置高电平 } } /************************************************************************/ calc(uchar n) { if(n<10)//键值小于10 { t1=t1*10+n; LCD_write_command(0x00);//写命令语句 LCD_write_dat(mayuan[n]);//写数据函数 } else { if(n==10){LCD_init();t1=0;t2=0,t=0;k=1;} else{ if(n<15){ t2=t1;t1=0;j=n; LCD_write_command(0x00); LCD_write_dat(mayuan[n]);} else{ LCD_write_command(0x00); LCD_write_dat(mayuan[n]); switch(j){ case 11: t=t2/t1; break; case 12: t=t2*t1; break; case 13: t=t2-t1; break; case 14: t=t2+t1; break; } if(t<=9){ LCD_write_command(0x00); LCD_write_dat(t+48);} if(t>9) { while(t>9) { s=t%10; t=t/10; a[k]=s; k++; } if(t<=9){ LCD_write_command(0x00); LCD_write_dat(t+48);} for(i=k-1;i>=1;i--) { LCD_write_command(0x00); LCD_write_dat(a[i]+48); } } } } } } /*****************************************键盘扫描函数************************************/ uchar keyscan()//键盘扫描 { KEYBOARD=0xf0;//键盘的列值全置高电平 delay_10ms();//延时 if(KEYBOARD!=0xf0)//有键按下 { temp=KEYBOARD;//保存键盘此刻的键植 delay_10ms();//延时 if(KEYBOARD==temp)//再次确认键盘是否被按下 { uchar i; KEYBOARD=0x0f;//键盘的行值全置高电平 delay_10ms();//10MS时间延时 keynum=temp | KEYBOARD;//保存键盘的行值 while(KEYBOARD!=0x0f);//松手检测 for(i=0;i<16;i++) if(keycode[i]==~keynum) return (i); } } return -1; } /******************************************************************************/ /********** 延时**********************/ void delay_nms(unsigned int n) { unsigned int i=0,j=0; for (i=n;i>0;i--) for (j=0;j<10;j++); } void delay_10ms()//10MS延时 { unsigned char i,j; for(i=0;i<10;i++) for(j=0;j<120;j++); }
|
|
相关推荐
3个回答
|
|
你是否是在keil编写的程序,如果是在keil编写的程序,需要在keil的Tool项重新设置引导程序。
|
|
|
|
你是否安装KEIL与proteus连接软件,你是否画对电路,你是否编译成功(实现所需要的功能,而不是程序没有错误),还有你是否将编译链接生成的.hex文件添加到仿真的单片机中!!
|
|
|
|
我发现你的按键电路有问题,正确的连接应该是这样的。。。你试试看。。。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
277 浏览 0 评论
【敏矽微ME32G070开发板免费体验】之原厂2812测试例程解析
368 浏览 0 评论
766 浏览 2 评论
《DNESP32S3使用指南-IDF版_V1.6》第二十六章 INFRARED_RECEPTION实验
592 浏览 0 评论
879 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12037 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 08:01 , Processed in 0.471989 second(s), Total 45, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号