为什么我的UIButton.uiimage tintcolorr不工作

为什么我的超声波测距不工作|我爱单片机 - 数码之家
查看完整版本: [--
赞助商链接
我用的是STC12C2052AD,超声波模块是HC-SR04,显示用4位共阳数码管,12M晶振。我是参照这个帖子一楼的程序写的。可是没有达到想要的结果。现象就是,一直显示 000,而且亮度很低很低很低,希望大神们给我看看,代码如下:#include &STC12C2052AD.H&&&&&//加载stc12c2052ad头文件#include &intrins.h&#define shumaguan&&&&P1&&&&&&&&//P1 定义为数码管阴极sbit V1 = P3 ^ 4;&&&&//数码管1正极sbit V2 = P3 ^ 5;&&&&//数码管2正极sbit V3 = P3 ^ 3;&&&&//数码管3正极sbit V4 = P3 ^ 7;&&&&//数码管4正极sbit trig = P3 ^ 2;&&&&&&&&//sbit echo = P3 ^ 6;&&&& //bit flag = 0;unsigned long S=0;unsigned int&&timer=0;unsigned int&&time=0;unsigned char disbuff[4] = { 0,0,0,0,};void xianshi (unsigned char a,b,c,d)&&&&//显示函数,a,b,c,d分别表示数码管1,2,3,4所显示数字{&&&&code unsigned char shuzi []= &&&&{0x14,0x77,0x4c,0x45,0x27,0x85,0x84,0x57,0x04,0x05,0xff,0xbc,0x14,0x34,0x8c};&&&&//0~9,10为不显示&&&&V1 = 1;V2 = V3 = V4 = 0;&&&&//数码管1&&&&shumaguan = shuzi[a];&&&&P1 = 0&&&&V2 = 1;V1 = V3 = V4 = 0;&&&&//数码管2&&&&shumaguan = shuzi;&&&&P1 = 0&&&&V3 = 1;V1 = V2 = V4 = 0;&&&&//数码管3&&&&shumaguan = shuzi[c];&&&&P1 = 0&&&&V4 = 1;V1 = V2 = V3 = 0;&&&&//数码管4&&&&shumaguan = shuzi[d];&&&&&&&&&&&&P1 = 0} void Conut(void)&&&&&&&&//计算函数{&&&& time=TH0*256+TL0;&&&& TH0 = 0;&&&& TL0 = 0;&&&&&&&& S = (time*17)/1000;&&&& //算出来是CM&&&& if((S&=700)||flag==1) //超出测量范围不显示&&&& {&&&& &&&&&&flag=0;&&&&&&disbuff[0]=10;&&&&&& //不显示&&&&&&disbuff[1]=10;&&&&&& //不显示&&&&&&disbuff[2]=10;&&&&&& //不显示&&&& }&&&& else&&&& {&&&&&&disbuff[0]=S%;&&&&&&disbuff[1]=S%;&&&&&&disbuff[2]=S%;&&&& }}void main (void)&&&&&&&&//主函数{&&&&&&&&TMOD = 0x11; //高4位控制T/C1&&&&TH0 = 0;&&&&TL0 = 0;&&&&&&&&&&&&&&TH1 = 0xf8;&&&&&&&&&& //2MS定时&&&&TL1 = 0x30;&&&&ET0 = 1;&&&&&&&&&&&& //允许T0中断&&&&ET1 = 1;&&&&&&&&&&&&&& //允许T1中断&&&&TR1 = 1;&&&&&&&&&&&&&& //开启定时器&&&&EA = 1;&&&&&&&&&&&&&& //开启总中断&&&&P3M0&&= 0x40;&&&&&&//设置P3口为推挽输出&&&&P3M1&&= 0xb8;&&&&P1 = 0&&&&&&&&&&&&&&&&&& //初始化&&&&V1 = V2 = V3 = V4 =0;&&&& &&&& while(1)&&&&{&&&&&&&&&&&&while(echo == 0);&&&&&&&&//当RX为零时等待&&&&&&&& TR0=1;&&&&&&&&&&&&&&&&//开启计数&&&&&&&& while(echo == 1);&&&&&&&&&&&&//当RX为1计数并等待&&&&&&&& TR0=0;&&&&&&&&&&&&&&&&//关闭计数&&&&&&&& Conut();&&&&&&&&&&&&//计算&&&& &&&&}} /********************************************************/void dingshiqi_0 (void) interrupt 1 using 1&&&&&&&&&&//T0中断用来计数器溢出,超过测距范围{&&&& flag = 1;&&&&&&&&&&&&&&&&&&&&&&&&&&&& //中断溢出标志}/********************************************************/void dingshiqi_1 (void) interrupt 3 using 2&&&&&&&&&&//T1中断用来扫描数码管和计800MS启动模块{&&&& TH1=0xf8;&&&&&&&&//2ms&&&& TL1=0x30;&&&& xianshi(disbuff[0],disbuff[1],disbuff[2],10);&&&&&&&&//扫描数码管&&&& timer++;&&&& if(timer&=400)&&&& {&&&&&&&&timer = 0;&&&&&&&&&&trig = 1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&//800MS&&启动一次模块&&&&&&&&&&_nop_(); &&&&&&&&&&_nop_(); &&&&&&&&&&_nop_(); &&&&&&&&&&_nop_(); &&&&&&&&&&_nop_(); &&&&&&&&_nop_(); &&&&&&&&_nop_(); &&&&&&&&&&_nop_(); &&&&&&&&&&_nop_(); &&&&&&&&&&_nop_(); &&&&&&&&&&_nop_(); &&&&&&&&&&_nop_(); &&&&&&&&&&_nop_(); &&&&&&&&&&_nop_(); &&&&&&&&&&_nop_(); &&&&&&&&&&_nop_(); &&&&&&&&&&_nop_();&&&&&&&&&&_nop_(); &&&&&&&&&&_nop_(); &&&&&&&&&&_nop_(); &&&&&&&&&&_nop_();&&&&&&&&&&trig = 0;&&&&} }
赞助商链接
中断里用延时不太好。
不太懂,绑定。
echo = P3 ^ 6; 你的echo引脚永远是高电平。 echo引脚对应的IO口是要来开始计时和停止计时判定的,可是你定义了P3.6,程序里面有没有对让P3.6对计时进行判定。不过补推荐普通IO口接echo引脚,最好用外中断IO来判断,这样几乎没有延迟。毕竟其他IO都是软件判断状态,有一定的软件延迟(我有做过实验,误差大点)。照你的程序看来,本来应该echo引脚接外中断的,你把他改成P3.6。现在的解决方法:echo引脚接P3.2或者P3.3,然后开外中断,用外中断来停止和开始定时器0。
:echo = P3 ^ 6; 你的echo引脚永远是高电平。[表情] echo引脚对应的IO口是要来开始计时和停止计时判定的,可是你定义了P3.6,程序里面有没有对让P3.6对计时进行判定。.......&( 08:49)&此位是大神了,楼主要虚心接受
再次帮顶。嘿嘿
这是用c语言编写的?
帮顶下了,我的STC89c52rc
搜别人编好的程序试下
:这是用c语言编写的? ( 16:55) 是c语言呀呀呀。。。。。。。。。。
不懂程序帮顶,建议检查一下硬件是否有问题
数码管显示程序要改成,每中断一次,只显示一位,这样显示出来的亮度才会高。还有T1 中断里的nop 可以全部取消。你的echo引脚要接一个下拉电阻,比如10K的电阻。
不懂的我帮顶
th0的初值应该赋值tho==1,而不是0.
unsigned long[color=#ff0000] S[/color]=0;unsigned int timer=0;unsigned int [color=#ff0000]time[/color]=0;unsigned char disbuff[4] = { 0,0,0,0,};。。。。。。。。。。。。。。void Conut(void)&&&&&&&&//计算函数{[color=#ff0000]&&&& time[/color]=TH0*256+TL0;&&&& TH0 = 0;&&&& TL0 = 0;&&&&[color=#ff0000]&&&& S[/color] = ([color=#ff0000]time[/color]*17)/1000;&&&& //算出来是CM&&&& if((S&=700)||flag==1) //超出测量范围不显示这里的time和S都应该是长字符型。
我也把我的贴上来顺便麻烦大神给看看又没有错。只是用ISIS仿真了的,还没有做硬件出来试。 [attachment=3277254]40ms的时钟信号,占空比为50%,就是20ms的高电平,相当于超声波从发射到接受用了20ms,所以进行计算:[attachment=3277313] 算得距离为3.40M,而仿真的为3.39M,有1cm的误差。但是仿真时显示在持续跳动为3.40或者3.39,因此,可以忽略不计。所以我自己感觉程序还是通过了的。
这是我的程序:#include&reg51.h&void xianshi();void jishuan();void delay(unsigned char n);#define LED_DATA P0&&&&&&&& //LED数据口#define LED_XZ P2&&&&&&&& //LED片选口sbit&&data_out = P1^0;&&&& //超声波输入sbit&&data_in = P1^1;&&&& //超声波输入unsigned long time=0,S=0;&&//时间、距离。。位数过度选择long型unsigned char timer=0;&&&&&& //定时器1,中断次数unsigned int&&flag =0;&&&&&& //定时器0、中断标志,说明超时unsigned char const seg[]={0x3F/*0*/,0x06/*1*/,0x5B/*2*/,0x4F/*3*/,0x66/*4*/,&&&&&&&&&&&&&&&&&&&&&&&&&&&&0x6D/*5*/,0x7D/*6*/,0x07/*7*/,0x7F/*8*/,0x6F/*9*/,0x40/*-*/};unsigned char temp[]={0x40,0x40,0x40};&&&&&&//LED输出数据缓存unsigned char sw=0;&&&&&&&&&&&&&&&&&&&&&&&&&&//LED片选位void main(){&&&&&&TMOD=0x11;&&&&&&&&&&&&&&&&&& //开定时器0、定时器1。&&&&TH0=0;&&&&TL0=0;&&&&&&&&&&&&&&TH1=()/256;&&//定时器1,定时25ms&&&&TL1=()%256;&&&&&&&&ET0=1;&&&&&&&&&&&&&&&&&&&& //允许T0中断&&&&ET1=1;&&&&&&&&&&&&&&&&&&&&&& //允许T1中断&&&&TR1=1;&&&&&&&&&&&&&&&&&&&&&& //开启定时器&&&&EA=1;&&&&&&&&&&&&&&&&&&&&&& //开启总中断&&&&P1 = 0;&&&&while(1)&&&&{ &&&& while(!data_in);&&&&//当data_in&&上升时启动计时&&&& TR0=1;&&&&&&&&&&&&&&&&//开启计数&&&& while(data_in);&&&&//当data_in&&下降时结束计时&&&& TR0=0;&&&&&&&&&&&&&&&&//关闭计数&&&& jishuan();&&&&&&&&&&&&//计算&&&&}}void zd1() interrupt 1&&&&&&&&&&{&&&&flag=1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&}void&&zd2()&&interrupt 3&&&&&&&&&&{&&&&TH1=()/256;&&&&&&&&//定时器1,定时25ms&&&&TL1=()%256;&&&&&&&& &&&&LED_DATA = 0x00;&&&&xianshi();&&&&sw++;&&&&if(sw &= 3)&&&&&&&&sw = 0;&&&&timer++;&&&&if(timer&=32)&&&&&&&&&&&&&& //定时器1产生32次中断后为800ms,开始发送一个脉冲让超声波工作&&&&{&&&&&&&&timer=0;&&&&&&&&data_out=1;&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&delay(1);&&&&&&&&data_out=0;&&&&&&&&&&&&&&&&//data_out产生1ms高电平脉冲,超声波开始工作&&&&} }void xianshi()&&&&&&&&&&&&&&&& {&&&&LED_DATA = temp[sw];&&&&if(sw == 0)&&&&&&&& LED_XZ = ~0X01;&&&&if(sw == 1)&&&&&&&&LED_XZ = ~0x02;&&&&if(sw == 2)&&&&&&&&LED_XZ = ~0x04;}void jishuan(){ &&&&time=(TH0*256)+TL0;&&&&&&&&&&&&//计算时间&&&&TH0=0;&&&&TL0=0;&&&&&&&&S=(time*1.7)/100;&&&&&&&&&&&&&&&& //计算距离单位cm&&&&if(S &= 600 || flag == 1)&&&&{&&&&&&&&flag=0;&&&&&&&&temp[0] = seg[10];&&&&&&&&temp[1] = seg[10];&&&&&&&&temp[2] = seg[10];&&&&}&&&&else &&&&{&&&&&&&&temp[0] = seg[S/100]|0x80;&&&&&& //米位。加小数点&&&&&&&&temp[1] = seg[(S/10)%10];&&&&&&&&temp[2] = seg[S%10];&&&&&&}}void delay(unsigned char n)&&&&&&&&&& //1ms延时函数{&&&&unsigned char a,b,c;&&&&for(c=n;c&0;c--)&&&&&&&&for(b=142;b&0;b--)&&&&&&&&&&&&for(a=2;a&0;a--);}
楼主现在正常了吗?
不懂,帮你顶一下。
马克一下,有时间学学代码
今天心情不错,给你解释一下吧,想不管什么测距算法问题对不对,首先你的显示程序就对了,你不相信可以把第98行 xianshi(disbuff[0],disbuff[1],disbuff[2],10); 改成xianshi(1,2,3,4); 这能让数码管强制动态显示1234数字。你仔细看你的显示函数,完全不对,很多地方错了。unsigned char code shuzi [] =&&{0x14,0x77,0x4c,0x45,0x27,0x85,0x84,0x57,0x04,0x05,0xff,0xbc,0x14,0x34,0x8c};&&&&//0~9,10为不显示void xianshi (unsigned char a,b,c,d)&&&&//显示函数,a,b,c,d分别表示数码管1,2,3,4所显示数字{&&&&V1 = 1;V2 = V3 = V4 = 0;&&&&//数码管1&&&&shumaguan = shuzi[a];&&&&&& // 显示第一位&&&&P1 = 0&&&&&&&&&&&&&&&&&&&&&&&&&& // 显示完后立即关显示???这尼玛关得太快了吧,用12M就1us的时间,一个灯亮1us你看得到个JB!!!这就是你显示亮度暗的原因&&&&V2 = 1;V1 = V3 = V4 = 0;&&&&//数码管2&&&&shumaguan =&&&&&&&&&& // &&&&P1 = 0&&&&V3 = 1;V1 = V2 = V4 = 0;&&&&//数码管3&&&&shumaguan = shuzi[c];&&&&P1 = 0&&&&V4 = 1;V1 = V2 = V3 = 0;&&&&//数码管4&&&&shumaguan = shuzi[d];&&&&&&&&&&&&P1 = 0} 你没理解动态扫描的原理,你扫描得太快了,快得眼睛都跟不上,你在好好看看这方面的程序吧,给你个以前写的数码管扫描程序给你参考我只写关键部分,具体情况意会~sbit&&&&smga = P2^7;sbit&&&&smgb = P2^6;sbit&&&&smgc = P2^5;uchar data display[3];/*&&&&定时器1 数码管显示&&&&*/void time1( void ) interrupt 3&&&&&&&&&&&&&&&&// 数码管显示 {&&&& &&&&TH1 = VTH1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&// 重新装载定时常数&& &&&&TL1 = VTL1;&&&&switch (num1)&&&&{&&&&&&&&case 0:&&&&P0 = dis_7[display[num1]];&&&&// 数据显示 个位&&&&&&&&&&&&&&&&smgc = 0;&&&&&&&&&&&&&&&&smga = 1;&&&&&&&&&&&&&&&&&&&&&&&&case 1:&&&&P0 = dis_7[display[num1]];&&&&// 数据显示 十位&&&&&&&&&&&&&&&&DIN = 0;&&&&&&&&&&&&&&&&smga = 0;&&&&&&&&&&&&&&&&smgb = 1;&&&&&&&&&&&&&&&&&&&&&&&&case 2:&&&&P0 = dis_7[display[num1]];&&&&// 数据显示 百位&&&&&&&&&&&&&&&&smgb = 0;&&&&&&&&&&&&&&&&smgc = 1;&&&&&&&&&&&&&&&&&&&&&&&&&&&&}&&&&num1 ++;&&&&if (num1 == 3)&&&&{&&&&&&&&num1 = 0;&&&&}&&&&&&&&&& }
查看完整版本: [--
Powered by
Time 0.073158 second(s),query:5 Gzip enabled父亲说我不工作天天在家,我昨天突然威胁说了一句自己活不长了,今天感到后悔怎么弥补自己昨天的过失,我_百度知道
父亲说我不工作天天在家,我昨天突然威胁说了一句自己活不长了,今天感到后悔怎么弥补自己昨天的过失,我
我的确太激动了,我昨天突然威胁说了一句自己活不长了,今天感到后悔怎么弥补自己昨天的过失父亲说我不工作天天在家
我有更好的答案
按默认排序
别大的出息,然后好好的找个工作!但是自己静下来的时候自己想想,如果什么都没收获那么你就落下来在地上踏踏实实的走,有句话说三十岁你可以随便狂因为你有这个资本狂,说完自己挺后悔挺不懂事的,希望对你有帮助,假如你现在18岁你现在这么玩让你玩十年等你二十八岁的时候你还能找什么工作呢,别在飘了?那时候你就真的不知道干什么了,跟父亲说昨天不知道怎么走火入魔了说出那句话,或者不跟你父亲说什么也可以!什么岁数说什么话,因为你已经懒散惯了,父母只能陪你只有那么几十年,三十岁以前你可以干任何事想任何事狂任何事,没有父母记恨儿女的?收获什么了!饭还得一口一口不是一碗一碗吃,还有就是工作必须得找了!你都干了些什么了,只有恨铁不成钢的!如果三十岁后你还是这样那你这辈子就这样了,觉得有用请采纳 撸字挺累的,会做饭菜就自己做一次然后跟父母一起吃,截至在三十岁天下没有怪儿女做错事的
天下只有不对的子女没有不对的家长.听起来是有点偏激但常理是这样的,我想当你认为你错的那天其实他可能已经原谅你了,但总是你的不对,用你的诚恳和爱他的心去象他认错他会原谅你的,他是老人了有时就象一个小孩子,面子很重要,让他知道在你心中他就是家长你就是小辈,真诚的心,我想他会原谅你的,还有你为啥人那么热不去找工作?你自己问问自己是你自己懒惰还是、因为你有你的追求,如果你有追求大胆的说出来有可能会有好的收获,给父亲认个错,因为我有过这样的经历,天下的父母都疼爱自己的孩子,无论他是如何一个人,父母都爱他样的孩子,就象你爱你的孩子一样,也许你没有孩子,但是父母的爱都无私的伟大的,去吧,我相信他会原谅你的.
不知道怎么道歉。
大多数的男孩子与父亲吵架后都不知道怎么去说,觉得不好意思或开不了口,其实这些真的是爱与面子,其实你要好好想想,今天你的一切是谁的给与,当你来到这个世界上,是谁用伟大的身躯替你遮风挡雨,是谁用滴滴血汗喂养弱小的你,是谁用自己辛苦赚来的钱,给你一个家,让你穿的暖,吃的健康,玩的高兴。是谁抱着还不会走路的你去玩,而累的他们腰臂酸痛。是谁抱着生病的你不顾自己的疲劳一刻不停地奔跑去看医生,哪怕摔倒都是把他们最软的身躯倒地,双手还紧紧的抱着你,不让你有丝毫的畏惧。是谁教不会走路的你走出第一步,却没让你摔过一次。等等等等,如果你感动了,那么也就不在乎怎么道歉了,呵呵呵我给你分享一个我道歉的方法,如果说不口,那么就静下心来给父亲写一封信,我想你不好意思说的,其实都可以写下来给父亲。加油吧。
和你父亲好好谈谈你内心真实的想法和感受。再找个工作认真上班,毕竟你过得好才是他们最高兴的事情,他们的希望和未来都寄托在你的身上,不要再让他们失望。
突然表现得很高兴很兴奋的样子,最好回家就给你老爸一个拥抱。然后告诉他医院检查错了,然后表示以前太不懂事,从今天起要好好做人。
带他玩两把撸啊撸,让他玩上瘾了,在帮他上段位,以后他就会叫你帮他上段,哈哈哈,我真他妈机智。
赶紧找工作,想想父亲也不容易。给他道歉吧,父亲不会记仇的。
最快的速度赚钱
往家里打钱
让他你知道你错了
今天再对他说“爸,我已经重新投胎了。”
赶紧找个工作
陪爸爸喝喝酒,,随便说说心里话。。
跟你父亲解释道歉
用事实证明一切
很爸爸诚恳的道歉!告诉他自己错了,不该那么激动!
找工作,道歉
其他类似问题
等待您来回答
为您推荐:
下载知道APP
随时随地咨询
出门在外也不愁我现在在职,想找份新的工作,但是很多人都说找到工作再辞职,为什么我就不能先不工作放松一下呢?_好搜问答
|注册&您有新任务,
我现在在职,想找份新的工作,但是很多人都说找到工作再辞职,为什么我就不能先不工作放松一下呢?
被浏览89次
采纳率:59%
這完全是在於個人意願,不過別人建義你先找到工作再辭職,這也是好心的在想辦法為你省去一些多於的開支,如果你覺得省不省這點錢無所謂,那你也完全可以按照自己的想法去做,忽略別人的建議. 用微信扫描二维码分享至好友和朋友圈分享到:
下面是答答童鞋给您的小建议,您看靠谱吗?初来乍到,弄错了您不要生气哦(*^__^*)答答小贴士
等您帮助的附近的朋友换一换
大家都在搜好搜APP下载好搜摸字APP 随时随地随心搜索 用好搜, 特顺手!
第9天生活就像海洋,只有意志坚强的人才能达到生命的彼岸。知道了iOS 问题:求解,我在tableViewCell里添加了一个按钮,给按钮加了个tag,tag = indexPath.row.怎么让能在点击这个button的时候拿到这个tag。一直取不到。代码是这么写的。
这是添加button的代码
UIButton *callBtn = [UIButton buttonWithType:UIButtonTypeCustom];
callBtn.frame = CGRectMake(270, 11, 20, 20);
callBtn.backgroundColor = [UIColor clearColor];
[callBtn setBackgroundImage:[UIImage imageNamed:@"app_im_friend_call.png"] forState:UIControlStateNormal];
callBtn.tag = indexPath.
[callBtn addTarget:self action:@selector(callButton:) forControlEvents:UIControlEventTouchUpInside];
[cell.contentView addSubview:callBtn];
怎么才能在点击的方法里拿到这个tag -
求解,我在tableViewCell里添加了一个按钮,给按钮加了个tag,tag = indexPath.row.怎么让能在点击这个button的时候拿到这个tag。一直取不到。代码是这么写的。
这是添加button的代码
UIButton *callBtn = [UIButton buttonWithType:UIButtonTypeCustom];
callBtn.frame = CGRectMake(270, 11, 20, 20);
callBtn.backgroundColor = [UIColor clearColor];
[callBtn setBackgroundImage:[UIImage imageNamed:@"app_im_friend_call.png"] forState:UIControlStateNormal];
callBtn.tag = indexPath.
[callBtn addTarget:self action:@selector(callButton:) forControlEvents:UIControlEventTouchUpInside];
[cell.contentView addSubview:callBtn];
怎么才能在点击的方法里拿到这个tag
共有 2 个回答
在callButton:(UIButton *)button_这个方法里,button_.tag就是你点击的Button的tag值呀
登录后方可回复
点击button的 方法里面 - (void)click:(id)sender{
UIButton *btn = (UIButton *)
}这样不就取到tag值了了。。
IOS菜鸟群 : 欢迎各路菜鸟 大神入住。
登录后方可回复
登录后方可回答
耗时 0.0616 秒}

我要回帖

更多关于 ios uibutton 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信