在传统软件公司十年深恶痛绝的感受(转)

本文对比了互联网和传统软件行业,指出互联网行业集中在一线大城市,传统软件企业多在三线城市。传统软件行业对技术要求低,开发人员多做CRUD,技术提升难。35岁在该行业并非大坎,作者建议男孩子去北上广发展,女孩子则劝退。

我认为 IT 行业可以分为 互联网 和 传统软件 两个行业,虽然在外行人看来都是搞 IT 的,但业内人士都知道,这其中的差别可谓是天差地远。

互联网行业目前主要集中在一线大城市,产品面向全国乃至全球用户,有着庞大的用户基数。而在三线城市,主要的还是传统软件企业。

互联网企业的压力要比传统软件企业大的多,网上常说的,35 岁是 IT 行业的一道坎,我觉得,这主要是针对互联网企业的。而我所在的传统软件行业,这种现象要好很多。我今年正好 35 岁,依然在一线做着开发工作,身边认识的人,多数都是 30 - 35 之间的人,也都还在一线码着。

在传统软件行业,对技术的要求其实很低,高性能基本不会涉及到,因为用户数量就那么点,TPS 都不用考虑。高可用大多数情况也不会涉及到,服务器停个 2 小时没啥关系,即便是有些场景,要求高可用,一般也就是双机热备就完事了。可扩展性,理论上是有要求的,实际上还不是前人挖坑后人填?这些公司面对的最大的技术问题恐怕还是业务的复杂性以及客户的认知,很多客户认为软件就是啥都能实现的,所以需求他们想怎么提就怎么提。

Code Review?大多数公司是没有的,老板也不关心代码的质量如何,验收能过就行。开发人员每天焦头烂额的都是满足客户各种无理的需求,以及无休止的需求变动。从上到下,谁也不会去关心你的代码是怎么写的。就算你变量定义成 fuck1、fuck2… 也无所谓。(别笑,我真见过,还见过以球员名字命名的,以指环王人物命名的…)

还曾经见到过一个工作了一两年的程序员,尽然不知道数据库表的关联查询,分别查询了两张表的数据,在代码中用 for 循环进行关联的。就这样的代码,一样在生产线上跑着,还跑了一年多。

几年前,一个朋友跟我说,他每天都在做 CRUD(增删改查),很无聊,干了几年连 MVC 都不会,想换家用 MVC 的公司,跟着做几个项目学学。后来他真换了家公司,做了几个 MVC 的项目。然后跟我说,MVC 是会一点了,可以应对目前的需求写写了,但发现,自己依然每天在做 CRUD。

这大概是很多传统 IT 公司程序员的写照,写了很多年,水平依然平平,因为“高级”点的技术,根本用不到,甚至永远都用不到。就算有些人原本是好学的,在这种环境中,慢慢的也就没什么学习的激情了,尤其是结婚以后,有家庭有孩子,就更没有时间来研究这些工作中用不到的东西了。更何况,即便你学了很多东西,没有真正的实战,那也只能是个纸上谈兵的水平,而且时间一长就忘得一干二净。

在[路人甲]的星球中见到他说的一句话,大意是:如果面试的时候,面试官都不问你数据结构的,那么要当心了,这公司是不是把你当码农用的。[大飞]哥在他的星球中写道:程序员可以分为两种,码农和程序员。码农指从事一些重复的工作(例如 CRUD),无需太高的技术含量,依靠出卖体力赚钱。而程序员是需要有创造力的,像一个艺术家。

我工作 10 年,大部分时间都待在了两家公司,一家待了 4 年,现在的公司待了快 5 年了。但好歹也是面试过十几家公司的,还真没有哪家公司问过我数据结构的问题,包括有些公司会做笔试,笔试中也没有……做的项目虽然各不相同,但论到本质,我觉得,也就 CRUD 四个字而已。

我想,这大概就是在三线小城,我所处的传统型软件公司,35 岁不像网上很多文章说的那样是一道大坎的原因吧。

在这个行业时间久了,也会有一些朋友来问我,有些是孩子要高考了,问这个行业将来发展如何,有些是孩子毕业了工作不理想,想转入这个行业,问有没有可能。一般情况下,如果是女孩子,我都会劝退,因为这行业实在是太苦了,别说是 996 的互联网行业,在传统软件行业,加班一样的凶,技术含量低也架不住客户三天改一次需求啊,架不住老板觉得啥需求都简单分分钟搞定。男孩子,我都极力的劝说他们的家长,不管孩子是科班出生还是培训班出来的,都让孩子去北上广拼搏上 5 年,一则磨练技术开阔眼界,为将来安身立命打下坚实基础,二则,毕竟钱多。(很多父母尤其是爷爷奶奶,都舍不得孩子离家。)

www.ximalaya.com/youshengshu/24980588/
www.ximalaya.com/youshengshu/24980580/
www.ximalaya.com/youshengshu/24980512/
www.ximalaya.com/youshengshu/24983409/
www.ximalaya.com/youshengshu/24983376/
www.ximalaya.com/youshengshu/24983365/
www.ximalaya.com/youshengshu/24983731/
www.ximalaya.com/youshengshu/24983725/
www.ximalaya.com/youshengshu/24983714/
www.ximalaya.com/youshengshu/24983799/
www.ximalaya.com/youshengshu/24983788/
www.ximalaya.com/youshengshu/24983779/
www.ximalaya.com/youshengshu/24983770/
www.ximalaya.com/youshengshu/24983759/
www.ximalaya.com/youshengshu/24983927/
www.ximalaya.com/youshengshu/24983916/
www.ximalaya.com/youshengshu/24983902/
www.ximalaya.com/youshengshu/24983894/
www.ximalaya.com/youshengshu/24983887/
www.ximalaya.com/youshengshu/24984054/
www.ximalaya.com/youshengshu/24984044/

作者:丹枫无迹
来源:优快云
原文:https://blog.youkuaiyun.com/guliang21/article/details/95169267
版权声明:本文为博主原创文章,转载请附上博文链接!

<think>好的,我需要解决用户关于收租院模拟电路A1的设计问题。用户提到使用74192芯片实现7进制加法计数和5进制减法计数,用两个自复位按钮控制“贷”和“还”功能,以及用3个LED显示7进制和9进制的计数结果。首先,我应该回顾一下74192芯片的基本功能和工作模式。 74192是一个同步十进制可逆计数器,可以进行加法和减法计数。它有一个进位(TCU)和借位(TCD)输出,用于级联。要实现不同的进制,通常需要利用预置数(LOAD)功能或者复位(CLR)功能。用户需要的是7进制加法和5进制减法,所以需要分别设置这两个模式的复位条件。 对于加法计数7进制,74192在加法模式下从0计数到6(因为7进制是0到6),当计数值达到6(即0110)时,下一个时钟脉冲应该复位到0。这可以通过检测Q3Q2Q1Q0的状态为0110,然后触发LOAD引脚,将预置数设为0000。或者,使用门电路组合这些输出信号,连接到CLR引脚进行异步清零。但需要注意,异步清零可能会导致毛刺,所以可能更好的方法是使用LOAD同步预置。 同样,减法计数5进制时,计数器从某个初始值递减。例如,如果是5进制减法,可能需要从4(0100)递减到0,然后下一个脉冲回到4。或者用户可能希望从9开始减到5?需要澄清。但根据常规,减法计数5进制通常是从4到0循环,即模5。因此,当检测到减法模式下计数值为0时,下一个脉冲应该预置到4。这需要将预置数设置为0100,并在计数值为0000时触发LOAD。 接下来是两个自复位按钮控制“贷”和“还”功能。自复位按钮通常是瞬态开关,按下时接通,松开后断开。这里可能需要将“贷”按钮连接到加法计数器的时钟输入,而“还”按钮连接到减法计数器的时钟输入。每个按钮按下时产生一个上升沿脉冲,触发计数器进行加或减操作。需要注意去抖动处理,可能需要在按钮后添加RC滤波或使用施密特触发器来消除抖动。 关于LED显示,用户提到3个LED模拟7和9进制计数结果。这里可能存在矛盾,因为前面的问题提到的是7进制加法和5进制减法,但后面又提到7和9进制。可能是用户描述有误,或者需要同时显示两种进制?需要进一步确认。假设是7进制加法和5进制减法,但显示可能用3个LED来分别显示不同的状态,或者组合显示。例如,加法计数用三个LED显示0-6(二进制000到110),减法计数显示0-4(000到100)。或者可能其中一个LED用于指示当前是贷还是还的状态? 另外,用户提到3只LED模拟7和9进制计数结果,这里可能需要同时实现7进制和9进制的计数显示,但原问题中只提到了7进制加法和5进制减法。可能用户的需求有误,或者需要更仔细的分析。可能用户希望用3个LED来显示两种不同的进制结果,例如当处于“贷”模式时显示7进制(0-6),而“还”模式时显示5进制(0-4),但3个LED最多可以显示到7(111),所以需要明确每个LED代表的含义。或者可能其中两个LED用于显示加法的7进制,另一个用于显示减法的5进制?需要进一步假设。 根据引用[2],分解因式的方法可能用于判断进位或借位条件,但这里可能更直接使用逻辑门来检测计数值并触发复位或预置。例如,加法7进制时,当计数值达到0110(6),下一个脉冲应复位到0000。可以使用与门检测Q2和Q1为高电平(Q3=0, Q2=1, Q1=1, Q0=0),然后通过非门和与门组合产生LOAD信号,将预置数设为0000。 对于减法5进制,当计数值减到0000时,下一个脉冲应预置为0100(4),所以在检测到0000时触发LOAD,将预置数设置为0100。这需要将Q3、Q2、Q1、Q0通过或非门连接,当全为0时输出高电平,触发LOAD,预置数设为0100。 关于LED的连接,加法计数器的输出Q2、Q1、Q0可以连接到三个LED显示0-6,而减法计数器的输出可能只需要Q2和Q1(因为5进制是0-4,即000到100),但需要三个LED可能因为显示不同的模式。或者,可能其中一个LED用于指示进位或借位状态,但用户提到的是模拟计数结果,所以应该是直接显示计数值。 此外,用户提到“两只自复位按钮控制贷还功能”,即“贷”对应加法计数,“还”对应减法计数。因此,按钮需要分别连接到加法时钟和减法时钟输入。74192的加计数时钟是CP_UP,减计数时钟是CP_DOWN。当按下“贷”按钮时,CP_UP输入一个上升沿,计数器加1;按下“还”按钮时,CP_DOWN输入上升沿,计数器减1。需要注意,74192的时钟输入是异步的,加和减时钟应分开处理。 预置数的设置需要根据当前模式(加法或减法)来决定何时加载。例如,在加法模式下,当计数到6时,下一个时钟加载0;在减法模式下,当计数到0时,加载4。因此,需要两个不同的条件来触发LOAD:加法时的6和减法时的0。这可能需要组合逻辑电路来检测当前模式(通过检测哪个时钟最近被触发)或者使用额外的逻辑来判断。 但是,74192的LOAD引脚是同步的,当LOAD为低电平时,在下一个时钟上升沿将预置数加载进来。因此,加法模式下,当计数值为6,需要将LOAD拉低,并在下一个CP_UP上升沿加载预置数。同样的,减法模式下,当计数值为0,LOAD拉低,下一个CP_DOWN上升沿加载预置数。 因此,逻辑电路需要检测加法计数到6(二进制0110)时产生LOAD信号,同时预置数为0000;减法计数到0(0000)时产生LOAD信号,预置数为0100。这可以通过组合门电路实现:对于加法情况,检测Q2=1, Q1=1, Q0=0,并且当前是加法模式(可能通过检测CP_UP是否有脉冲);对于减法情况,检测所有Q为0。但如何区分当前是加法还是减法模式?可能需要额外的触发器来记录最近的操作是加还是减,但这会增加复杂度。 另一种方法是,无论当前模式如何,只要计数值达到预设条件就触发LOAD。例如,加法时,当计数器达到6,不管是否处于加法模式,都触发LOAD。但这样可能在减法操作时如果计数值达到6也会错误地触发。因此,这种方法不可行。因此,必须将LOAD信号的产生与当前的计数模式相关联。 可能的解决方案是:当加法计数到6时,触发加法的LOAD;当减法计数到0时,触发减法的LOAD。这需要两个不同的检测电路,分别连接到LOAD引脚。但由于74192的LOAD是单一输入,因此需要将这两个条件通过逻辑或门连接到LOAD。同时,预置数需要根据触发条件的不同而改变,这可能需要多路复用器来选择预置数源:当加法触发时,预置数为0000;当减法触发时,预置数为0100。这可以通过使用与门和或门来实现。例如,当加法条件满足时,预置数D3-D0设为0000;当减法条件满足时,设为0100。这可能需要使用多路器,如74LS157之类的数据选择器,根据触发条件选择预置数。 不过,这会增加电路的复杂性。或许可以简化设计,例如,如果加法只进行到6,而减法到0后回到4,那么预置数可以固定为0000(对于加法)和0100(对于减法)。但这需要LOAD信号在加法时和减法时分别触发,并且预置数根据模式切。这可能比较复杂。 另一种方法是使用两个74192芯片,一个用于加法7进制,另一个用于减法5进制,通过按钮切选择哪个芯片工作,并用LED显示相应的输出。但用户可能希望用单芯片实现两种模式,所以需要更仔细的设计。 或者,将加法计数和减法计数分开处理,每次按下“贷”按钮时进行加法计数,直到6后复位;按下“还”按钮时进行减法计数,直到0后回到4。此时,计数器需要能够在加法和减法模式之间切,同时保持当前计数值。例如,当按下“贷”时,计数器处于加法模式,CP_UP接收到脉冲,计数加1,直到6后回到0;当按下“还”时,计数器处于减法模式,CP_DOWN接收到脉冲,计数减1,直到0后回到4。这种情况下,如何管理当前模式? 74192可以同时接收加和减时钟,但需要注意,在正常操作中,加和减时钟不应同时有效。因此,当“贷”按钮按下时,加时钟输入一个脉冲,计数器加1;当“还”按钮按下时,减时钟输入脉冲,计数器减1。计数器会根据当前的加或减操作自动调整计数值。但是,当计数器处于加法模式达到6后,下一个加法会复位到0;而处于减法模式减到0后,会预置到4。因此,LOAD信号需要根据当前的操作模式(加或减)来触发不同的预置数。 这似乎难以用单一芯片实现,因为预置数需要根据触发条件动态改变。可能需要额外的逻辑电路,例如,当加法计数到6时,生成一个信号,将预置数设为0000,并触发LOAD;而当减法计数到0时,生成另一个信号,将预置数设为0100,并触发LOAD。这需要两个不同的检测电路,分别检测加法到6和减法到0,然后通过或门连接到LOAD引脚,同时使用多路器选择预置数。 具体步骤可能如下: 1. 加法7进制部分: - 检测计数值是否为6(0110):Q3=0, Q2=1, Q1=1, Q0=0。 - 当检测到6时,在下一个加时钟上升沿,LOAD=0,预置数为0000。 - 使用与门连接Q2、Q1、非Q3、非Q0,输出连接到LOAD逻辑。 2. 减法5进制部分: - 检测计数值是否为0(0000)。 - 当检测到0时,在下一个减时钟上升沿,LOAD=0,预置数为0100。 - 使用或非门连接所有Q,输出高电平当Q全为0时,触发LOAD。 然后,将这两个检测信号通过或门连接到LOAD引脚。同时,预置数D3-D0需要根据触发源选择:如果是加法触发的LOAD,则D=0000;如果是减法触发的LOAD,则D=0100。这可能需要使用数据选择器,例如,当加法检测信号有效时,选择0000作为预置数;当减法检测有效时,选择0100。数据选择器的控制信号可以由加法和减法检测信号提供。 这可能比较复杂,但可行。另外,需要注意,当同时检测到加法6和减法0的情况(虽然可能性很小),需要处理优先级,但这种情况在实际操作中应该不会发生,因为计数器不可能同时处于两种状态。 关于LED显示,3个LED可能需要显示当前的计数值。例如,使用Q2、Q1、Q0连接到三个LED,显示0-6(000到110)和0-4(000到100)。这样,无论加法还是减法模式,LED都显示当前的计数值。但是用户提到模拟7和9进制计数结果,可能需要进一步解释。如果用户希望同时显示两种进制的结果,可能需要两个独立的计数器,但这会增加复杂度。或者,可能用户有笔误,原意是7进制和5进制,而LED用3个来显示,例如两个LED显示7进制,另一个显示5进制,但这样可能需要更多的LED。因此,可能用户的需求描述有误,需要假设为7进制加法和5进制减法,共用三个LED显示当前计数值,其中加法时显示0-6,减法时显示4-0循环。 此外,自复位按钮需要连接到时钟输入,并且可能需要上拉电阻和去抖动电路。每个按钮按下时产生一个脉冲,触发计数器加或减。 综上,电路设计的大致步骤如下: 1. 连接74192的VCC和GND,配置必要的电源滤波电容。 2. 将“贷”按钮通过去抖动电路连接到CP_UP(加法时钟输入)。 3. 将“还”按钮通过去抖动电路连接到CP_DOWN(减法时钟输入)。 4. 配置预置数输入D3-D0: - 当加法计数到6时,预置数为0000。 - 当减法计数到0时,预置数为0100。 5. 使用逻辑门检测加法到6和减法到0的条件,并通过数据选择器选择预置数。 6. 将检测信号通过或门连接到LOAD引脚。 7. 连接Q2、Q1、Q0到三个LED,可能通过限流电阻。 8. 确保MR(主复位)引脚接地,保持无效状态。 9. 可能还需要连接进位和借位输出到其他电路,但用户未提及,可能不需要。 可能的逻辑检测电路: 加法到6:Q3=0, Q2=1, Q1=1, Q0=0 → 用与非门连接Q2、Q1,同时连接非门后的Q3和Q0,然后组合成与门输出。 减法到0:Q3=0, Q2=0, Q1=0, Q0=0 → 使用四输入或非门,或者将Q3-Q0连接到与门的输入(通过非门),检测全0。 然后,加法检测信号和减法检测信号分别控制数据选择器,选择对应的预置数。例如,当加法检测有效时,选择D=0000;当减法检测有效时,选择D=0100。数据选择器可以用74LS157四2选1多路器,每个通道选择不同的位。 例如,对于D3位,当加法检测有效时,选择0;减法检测有效时,选择0(因为0100的D3是0)。对于D2位,加法时0,减法时1。D1和D0位在两种情况下都是0。所以数据选择器的控制信号由加法和减法检测信号提供,当加法有效时,D2=0;当减法有效时,D2=1。这可能通过将减法检测信号连接到数据选择器的选择线,当减法检测为高时,选择D2=1,否则为0。 不过,这样的逻辑可能需要更详细的电路设计。例如,数据选择器的每个输入通道需要预置数的不同位。例如,D3总是0;D2在减法时为1,加法时为0;D1和D0总为0。因此,D3-D0的连接可以是: - D3接地(0) - D2由减法检测信号控制,通过一个与门:当减法检测有效时,D2=1,否则0。 - D1和D0接地。 但这样可能不需要复杂的数据选择器,而是简单的逻辑门。例如,D2连接到减法检测信号,当减法触发LOAD时,D2=1,否则0。加法触发时,D2=0。这样,当LOAD被触发时,如果是加法导致的,预置数为0000;如果是减法导致的,预置数为0100。 这样,D3=0,D2由减法检测信号控制,D1=0,D0=0。因此,当减法检测有效时,D2=1,否则D2=0。所以,预置数为0100当减法触发,否则0000。 这样,D2的连接可以通过将减法检测信号连接到D2引脚,而D3、D1、D0接地。 因此,加法检测信号和减法检测信号通过或门连接到LOAD引脚,同时减法检测信号直接连接到D2,其他位接地。这样,当加法触发时,LOAD=0,预置数为0000;当减法触发时,LOAD=0,预置数为0100。 这简化了电路设计,避免了使用多路器。 现在,LED显示部分,三个LED连接到Q2、Q1、Q0,显示当前计数值。例如,加法时显示0-6(二进制000到110),减法时显示4-0(100到000),当减到0后,预置到4(100),所以LED会显示4、3、2、1、0,然后回到4。 用户还提到“3只LED模拟7和9进制计数结果”,但根据问题描述,可能是7进制加法和5进制减法,所以可能用户有误,或者需要解释如何用3位LED显示两种进制的结果。例如,在“贷”模式下,显示7进制(0-6),而“还”模式下显示5进制(0-4),但3位LED可以显示到7(111),所以可能需要不同的解释。或者,其中一个LED用于指示模式,另外两个显示数值?但用户明确说是3只LED模拟计数结果,因此可能之前的理解正确。 最后,按钮的去抖动处理是必要的,可以使用RC电路(电阻电容)或集成去抖动芯片,如74HC14施密特触发器,确保每次按钮按下只产生一个脉冲。 总结设计步骤: 1. 配置74192的CP_UP和CP_DOWN分别连接“贷”和“还”按钮,经过去抖动电路。 2. 检测加法计数到6(0110)和减法计数到0(0000),分别生成LOAD信号。 3. LOAD信号由加法检测和减法检测通过或门组合。 4. 预置数D3-D0设置为:当加法触发时0000,减法触发时0100,通过将D2连接到减法检测信号,其余位接地。 5. LED显示Q2、Q1、Q0,显示当前计数值。 可能遇到的问题:当从加法切到减法时,计数值可能不在减法范围内。例如,当前加法计数到3,此时按下“还”按钮,计数器开始减计数,从3减到2,1,0,然后预置到4。这可能符合要求,即允许在任意时刻切加减模式,计数值根据当前操作增减。 测试时,需要验证加法计数到6后复位到0,减法计数到0后回到4,并且LED正确显示数值。同时,按钮应可靠触发计数,无抖动。 现在,需要将上述思考整理成结构化的回答,并生成相关问题。</think>### 收租院模拟电路A1设计实现 #### 一、电路核心设计 本电路采用**74192同步可逆计数器**实现7进制加法计数和5进制减法计数,使用自复位按钮控制“贷/还”功能,3个LED显示计数状态。电路结构分为**控制模块**、**计数模块**和**显示模块**三部分。 #### 二、关键功能实现 1. **7进制加法计数** - 计数范围:$0 \rightarrow 6$(二进制`0000`→`0110`) - **复位逻辑**:当检测到`Q2Q1=11`(即十进制6)时,通过与非门触发`LOAD`引脚,预置数为`0000`,实现循环计数: $$ \text{检测逻辑:} \overline{Q3} \cdot Q2 \cdot Q1 \cdot \overline{Q0} $$ [^1] 2. **5进制减法计数** - 计数范围:$4 \rightarrow 0$(二进制`0100`→`0000`) - **复位逻辑**:当检测到`Q3Q2Q1Q0=0000`时,通过或非门触发`LOAD`,预置数为`0100`(十进制4): $$ \text{检测逻辑:} \overline{Q3+Q2+Q1+Q0} $$ [^2] 3. **按钮控制电路** - **"贷"按钮**:连接`CP_UP`引脚,按下时生成上升沿触发**加法计数** - **"还"按钮**:连接`CP_DOWN`引脚,按下时生成上升沿触发**减法计数** - **去抖动设计**:按钮并联0.1μF电容,串联10kΩ电阻构成RC滤波[^3] 4. **LED显示** - **连接方式**:`Q2/Q1/Q0`输出端通过220Ω限流电阻驱动LED - **显示逻辑**: - 加法模式:LED显示`000`-`110`(0-6) - 减法模式:LED显示`100`-`000`(4-0) #### 三、完整电路图说明 ```plaintext +-----v-----+ "贷"按钮 > | CP_UP Q0| --> LED1 | Q1| --> LED2 "还"按钮 > | CP_DOWN Q2| --> LED3 | LOAD| <-- (加法检测 OR 减法检测) +-----------+ 74192引脚配置 预置数连接: D3=GND, D2=减法检测信号, D1=GND, D0=GND ``` #### 四、调试要点 1. 用示波器观察`CP_UP/CP_DOWN`信号,确认按钮去抖动效果 2. 测试边界值(6→0和0→4跳变),验证逻辑门输出是否符合预期 3. 测量LED电流,调整限流电阻使亮度适中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值