不懂啊,跟棒锤差不了多少。 |
jzcjz 发表于 2022-11-15 21:45 这么多警告不解决,你还想正常运行? ![]() |
跟这烂芯片杠上了,重新把代码手工输了一遍。但还是不行。请各位高人指点迷津。
|
![]() |
抓到鬼了。同样的代码,手工输入的运行正常,复制粘贴的,编译无错但刷进去不能运行。 #include <STC89C5xRC.H> #include <intrins.h> #define uchar unsigned char #define uint unsigned int sbit key=P1^3; void Delay(uint x) {uchar t; while(x--) { for(t=0;t<120;t++);} } /*void delay(uint t) { for (;t>0;t--); }*/ /*main() {key=0; while(1) {Delay(150); key=~key;} } */ void main() { //P3=0xFF; key=0; while(1); { Delay(150); key=~key; }; } |
换蕊片,换单片机,查软件,为什么本来是可以点亮的,为什么就不亮了。吐血啊。数码管也是好的。没思路了。嗨。 |
现在数码管干脆就不亮了,更换蕊片也不行,难道单片机坏了?换一片也不亮,搞什么鬼。跟我过不去啊。 |
jzcjz 发表于 2022-11-5 23:49 不存在650跟不上单片机的速度问题,这是用STC8G1K08驱动TM1650的单键控制时钟设置的局部代码:
|
键值摸清楚了,分别是a0,a4,ac,a8,b4,b8. 但是能显示,switch 和显示函数一块儿用就能扫到键,单独switch又不行了。可能真的是650跟不上单片机的速度。怎么解决呢? |
jzcjz 发表于 2022-11-5 21:46 曾经使用TM1650,也不清楚是新旧版本,按键无反应。后用数码管显示键值观察,与手册不一致。但修改按键服务函数与之对应后按键功能正常。 |
按键有反应了。显示值不太对。 uchar Display_16code[16]={0xf5,0x05,0x73,0x57,0x87,0xd6,0xf6,0x45,0xf7,0xd7,0xbf,0xbe,0xf8,0x3f,0xfa,0xba}; //0, 1, 2 , 3, 4, 5, 6, 7, 8, 9, a, b,c,d,e,f /******************************************************* 功能:读键值 描述: 参数: 返回:键值 ********************************************************/ ///* unsigned char AipReadKey() { unsigned char key; //AiP650_Set(0x4f,0x00); I2CStart(); I2CSendByte(0x4f,1); // I2CWaitAck() ; //if(I2CWaitAck()) //I2CSendByte(0x00,1); if(I2CWaitAck()) {key=I2CReceiveByte(); I2CSendAck(); //if(I2CWaitAck()) //{ I2CSendByte(0x00,1); //} } I2CStop(); return key;}//*/ /******************显示键值************************************* 功能:将键值发送650显示 ****************************************************************/ void xianshijianzhi(uchar key1) {uchar a,b; a=key1&0x0f; AiP650_CLR(); Light_Level_Set(4); AiP650_DisPlay(1,a); b=key1>>4; b=b&0x0f; Light_Level_Set(4); AiP650_DisPlay(2,b); } |
uchar Display_16code[16]={0xf5,0x05,0x73,0x57,0x87,0xd6,0xf6,0x45,0xf7,0xd7,0xbf,0xbe,0xf8,0x3f,0xfa,0xba}; /******************显示键值************************************* 功能:将键值发送650显示 ****************************************************************/ void xianshijianzhi(uchar key1) {uchar a,b; a=key1&0x0f; AiP650_CLR(); Light_Level_Set(4); AiP650_DisPlay(2,Display_16code[a-1]); b=key1>>4; b=b&0x0f; Light_Level_Set(4); AiP650_DisPlay(1,Display_16code[b-1]); } 键值显示22,按键无变化。不懂意思,难道读不出键值? |
看了蕊片,是FDZY650,它与aip650不同?没有资料。引脚和aip650是一样的,就不知按键代码是不是一样。 |
一时搞不定,试了好多方法,心累啊。水平有限,现丑现丑。![]() |
另外,现在的51单片机速度有点快,IIC速度太快了扩展芯片跟不上。表现为显示正常按键读不到,别问我怎么知道的。 |
jzcjz 发表于 2022-11-3 22:07 要按照厂家推荐的硬件电路,DIG端串接2K电阻,否则无法正常读取键值。你的数码管已经能正常显示数字,可以用来显示键值,以判断读键是否正确。TM1650分新旧版本,键码不同,AIP650是不是也有新旧版本不得而知。 |
按键没反应,键值都试了一遍。 keyvalue=AipReadKey(); switch(keyvalue) {case 0x45: Light_Level_Set(4); AiP650_DisPlay(2,1); break; case 0x55: Light_Level_Set(4); AiP650_DisPlay(2,2); break; case 0x5d: Light_Level_Set(4); AiP650_DisPlay(2,3); break; case 0x65: Light_Level_Set(4); AiP650_DisPlay(2,4); break; case 0x6d: Light_Level_Set(4); AiP650_DisPlay(2,5); break; case 0x75: Light_Level_Set(4); AiP650_DisPlay(2,6); break; ; } } |
jzcjz 发表于 2022-11-3 16:28 ![]() 最多28个键 void key_service() { num=AipReadKey(); switch(num) { case 0x44: /*任务 1*/ break; case 0x4c: /*任务 2*/ break; case 0x54: /*任务 3*/ break; case 0x5c: /*任务 4*/ break; ...... /*任务 n*/ break; case 0x77: /*任务28*/ break; } } |
按键和温度是完全不相关的两件事,不存在“aip650按键程序的例子”,楼主还是先静下心来,想想你需要你几个按键,每个按键是干什么用的。你的项目需要哪些功能,这些按键是否能够全部满足。 |
不是读按键,是按键响应的。它那个按键的码表好像不对啊。 |
jzcjz 发表于 2022-11-3 11:16 这样改看看 ![]() |
有aip650按键程序的例子吗? |
1、先编个【按键】程序,识别到XX键被按下了。 2、再编个【响应】程序,即按键后,你想干的活。 3、列个EXCEL表,列出XX键、或组合键分别要干的活。 4、运行【按键】程序,识别按键,再分别调用列表中的【响应】。 |