首页 > 芯片 > 国产芯片 > 单片机4kbc语言能有多少行,关于51单片机的问题C语言

单片机4kbc语言能有多少行,关于51单片机的问题C语言

来源:整理 时间:2023-01-14 18:59:27 编辑:亚灵电子网 手机版

1,关于51单片机的问题C语言

“|”不是或的意思。Y可以大于1,DisplayOneChar这个函数里面,Y取最低位,最低位为1(或者可以说Y为奇数)X的b6位置1.为什么不能 >0x19,这个应该是跟硬件有关系的,是由于硬件的限制。
简单的说就是 volatile 告诉 编译器 不要对 该unsigned char data *rcv 变量进行优化,也就是让编译器不把该rcv变量不存入寄存器(寄存器,这东东您应该懂吧!),无论如何都不加载rcv到任何寄存器,即便是使用时也是直接从内存地址读取,不用寄存器做缓(冲)存(储)
依程序来看,你的LCD应该是1602,所以Y不可大于1,除了0就是1,代表只有2行,15则代表16列(0-15)。while (DData[ListLength]>0x19) //若到达字串尾则退出 还有这里为什么不能 〉0x19这一句的意思是,你传入的字符串结尾以大于0x19来表示字符串的结束,是自定义的. 还有什么问题

关于51单片机的问题C语言

2,单片机脉冲计数问题C语言

设计数值为num num=0;P0^0=jishu;jishu=1;检测低电平IO要设置高main() if(jishu==0) num++; whlie(jishu==0);为了防止P0^0一直为低电平num一直在加 }if(num==9990) P0^1=0;num=0;继续下一轮计数}}
单片机的系统时间为晶振频率的12分之一,如果晶振是12兆赫兹,那么单片机最小系统时间就是1us,所以可以用_nop_();指令达到精确延时,这条语句执行1次系统时间,具体的百度下就行了。至于你说的1s,时间比较长,不适合用定时器,那么可以用嵌套循环语句,for、while、do while,要注意循环时使用不同的变量类型,所消耗的时间也不同。百度下proteus,这个是能将keil生成的c工程文件进行软件仿真的一个软件,和multisim一样很简单,里面有示波器,用示波器看仿真时间,自己用循环和_nop_()指令凑1秒出来就行了

单片机脉冲计数问题C语言

3,单片机c语言编程中 怎么几行语句整体移动

选中要移动的语句 tab:向后移动一定距离 shift+tab:向前移动一定距离 距离的大小可以设置 具体在哪里设置就要看编译环境了
keil里面这点做的确实不好,不能自己缩行,只能自己tab了
选中几行语句,按下tab键向右移动若干空字符,按下shift+tab键向左移动若干空字符。
tab键使其整体移动
和你用的编辑器,有的编辑器不带这个功能,一般是选定后按tab键或shift+tab
对于编程来说,很多情况下需要将一块文本块整体左移或右移。 根据编译环境的不同,可能有不同的方法。 1. Keil中,在菜单“编辑”->“高级”中,有“Indent Selection”是将选中的行整体右移一个缩进距离,而“Unindent Selection”是将选中的行整体左移一个缩进距离。 2. 通常情况下,可以尝试快捷键:在选择了期望移动的行之后,按下键盘上的Tab键,会将选中的行整体右移一个缩进距离,而按下“Shift+Tab”后,会左移一个缩进距离。 3. 其它编辑环境下可以在编辑菜单中搜索一下,看是否有类似的菜单项可用。

单片机c语言编程中 怎么几行语句整体移动

4,用Keil C51编写单片机程序怎么看程序多少行

1.怎么看程序写了多少行:点击Edit-configuration...,选择Editor标签,在该标签的左下角,选中Show Line Number,这样在编辑界面就会有行数了.若果你想看汇编有多少行,只需要反汇编一下.2.怎么看程序占了多大的内存:程序编译成功后,在编译器界面下方的build窗口中,会给出程序占用的存储大小,比如:Program Size: data=13.0 xdata=0 code=298 ,说明ROM被占用了298字节.也可以查看你工程文件夹下的.map文件,在该文件的最后给出了ROM和RAM的详细使用情况,比如:===================================================================== Total RO Size (Code + RO Data) 6320 ( 6.17kB) Total RW Size (RW Data + ZI Data) 1328 ( 1.30kB) Total ROM Size (Code + RO Data + RW Data) 6388 ( 6.24kB)=====================================================================补充:⊙﹏⊙,你用的那个版本的keil c51,我的keil 3,keil 4在菜单Edit都有configuration...选项.你现在用的至少也得是keil 3吧!

5,关于单片机c语言的一个问题

因为你的led一端是高电平,一端是接单片机p1口,所以p1口高电平时不会亮,低电平才会亮,也就是1的时候不亮,0的时候亮,所以就会出现"比如说 p1=0xff; ff对应的二进制是 11111111 那么编译出的结果应该是 8个led全亮!但不,它全灭了!""然后我又测试了一段代码 10001000; 写代码我就写成 p1=0x88;但结果出乎意料 亮的led 却是 1.2.3.5.6.7 |||||||||||||灭的led是4.8" 至于"最后我又写了段代码 p1=aa; aa=10101010下载到单片机里!结果一样, 1.3.5.7led亮,2.4.6.8led 灭!既然这样,那么1应该是亮 0就是灭!"在这里你可能数错了, 把顺序弄倒了.
在void display(uchar *temp)里 send2byte1(1<跟后面的send2byte1(0)是相呼应的。前一句是把“1”右移i位后写到595去,后一句则是把前面写的"1"清除掉。 照猜测,应该是前一句把某位数码管选中点亮,后一句则把它熄灭。在void send2byte1(uint byte2)里的byte2=byte2>>1,应该是为了把byte2里的最低位移到CY里,后面一句再把CY里的数据放出去。MCS51忘差不多了,这里的操作究竟能不能把最低位移到CY里我不确定。换我的话,我会用更明白的写法: uchar c; uchar temp; for(c=0;c<16;c++) { sclk1_595=0; temp = (byte2 & 0x01);//取最低位 sdat1_595=temp; //放最低位出去 sclk1_595=1; sclk1_595=0; }
for(c=0;c<16;c++) sclk1_595=0; byte2=byte2>>1; sdat1_595=CY; sclk1_595=1; sclk1_595=0; }这是串行输出16位数的程序。byte2=byte2>>1;是右移,最低位,移动到了 Cy。CY读出来的是什么,就是16位数的最低位。for(i=0;i<16;i++) sendbyte2(~(*temp++)); sendbyte2(~(*temp++)); send2byte1(1<delay(1); send2byte1(0); } 这部分,应该结合外部电路,才能正确的分析。 如果驱动的是 LED 点阵显示屏,那么,估计就是: 先串行输出了两次,每次是 sendbyte2(~(*temp++));,应该是某一行的32个点阵数据; 之后,send2byte1(1< 循环16次,将有16行,轮流显示; 延时; 最后输出一串0,是关闭显示,起消隐作用。 按照这个情况,本程序,是用来驱动 16*32 的点阵 LED 显示屏的。
8位数码管。传参数的时候,1<而函数里面的左移操作,是为了获得最后一位,左移以后,最后一位放到了CY里面,所以就把最后一位提取出来了。
在display中调用了send2byte1(),这个左移是将1左移i位,参数值在改变。在send2byte1()中右移一位相当于除以2了!

6,单片机c语言

DelayMS(100);是延迟程序
你好: 对于标准的51来说,io口在作为输入时需先对其写1,这在4*4键盘中应用比较灵活。下面把原来的哪些肤浅的注释都去掉了,把认为对理解比较重要的部分重新写了一遍,请从main开始看起。void Keys_Scan() //键盘扫描程序 uchar Tmp; P1 = 0x0f; //低四位赋值1作为输入(51准双向Io口的特点),高四位用于输出全0。用于列扫描。判断被按下按键属于哪一列 DelayMS(1); Tmp = P1 ^ 0x0f; //这里关键是异或的作用,任何位与0异或值不变,1异或取反。当有按键按下时,低四位中必有一列读都0,低四位原来为零的位与1异或后变为1,假设低四位读到1101,则与0x0f低四位1111异或后得到0010,表示第2列有按键按下。 switch(Tmp) //判断读到的列标,并将列标存入KeyNO case 1: KeyNO = 0; break; //00000001 第1列有按键按下 case 2: KeyNO = 1; break; //00000010 第2列有按键按下 case 4: KeyNO = 2; break; //00000100 第3列有按键按下 case 8: KeyNO = 3; break; //00001000 第4列有按键按下 default: KeyNO = 16; } P1 = 0xf0; //同理,将高四位作为输入,第四位输出全0,用于行扫描,判断被按下的键属于哪一行 DelayMS(1); Tmp = P1 >> 4 ^ 0x0f; //高四位读到的值移到第四位再异或,数值便于case处理。原理同上面列扫描 switch(Tmp) case 1: KeyNO += 0; break; //若为第1行,则列标即为键值 case 2: KeyNO += 4; break; //若为第2行,则列标+4为键值 case 4: KeyNO += 8; break; //若为第3行,则列标+8为键值 case 8: KeyNO += 12; //若为第4行,则列标+12为键值 }}void Beep() uchar i; for(i=0;i<100;i++) DelayMS(1); BEEP = ~BEEP; } BEEP = 1;}void main() P0 = 0x00; while(1) P1 = 0xf0; //p1高四位作为输入,低四位输出,实际硬件接线应该是高四位与第四位相连 if(P1 != 0xf0) //读到P1 != 0xf0,即有按键按下,高四位中读到0 Keys_Scan(); //若有键按下,则扫描 if(Pre_KeyNO != KeyNO) //这里的作用是判断是否有新的按键按下 Pre_KeyNO != KeyNO,来排除一直按下某个键的情况Pre_KeyNO = KeyNO P0 = ~DSY_CODE[KeyNO]; //若有新键按下,显示键值, Beep(); //若有新键按下,吱一声 Pre_KeyNO = KeyNO; //这一句比较重要,把新得到的键值赋给先前键值变量,用以下次循环时前面if语句判断是否有新键按下 } DelayMS(100); }}
其实,你应该慢慢的研究这个程序,程序不太难,慢慢深入的了解你将受益匪浅。

7,单片机汇编语言中比较指令

刚好也有这么个困惑,已经解决了,拿出来分享下比较转移指令 CJNZCJNE A,#data,rel CJNE A,direct,rel CJNE Rn,#data,rel CJNE @Ri,#data,rel 第一条指令的功能是将A中的值和立即数data比较,如果两者相等,就次序执行(执行本 指令的下一条指令),如果不相等,就转移,同样地,我们能将rel理解成标号,即:CJNEA, #data,标号。这样利用这条指令,我们就能判断两数是否相等,这在很多场合是非常有用的。 但有时还想得知两数比较之后哪个大,哪个小,本条指令也具有这样的功能,如果两数不相等,则CPU还会反映出哪个数大,哪个数小,这是用CY(进位位)来实现的。如果前面的 数(A中的)大,则CY=0,不然CY=1,因此在程序转移后再次利用CY就可判断出A中的数 比data大还是小了。 例: MOV A,R0 CJNE A,#10H,L1 MOV R1,#0FFH AJMP L3 L1: JC L2 MOV R1,#0AAH AJMP L3 L2: MOV R1,#0FFH L3: SJMP L3 JC是判CY是0,还是1进行转移,如果CY=1,则转移到JC后面的标号处 执行,如果CY=0则次序执行(执行它的下面一条指令)。 分析一下上面的程序,如果(A)=10H,则次序执行,即R1=0。如果(A)不等于10H,则转 到L1处继续执行,在L1处,再次进行判断,如果(A)>10H,则CY=1,将次序执行,即执 行MOV R1,#0AAH指令,而如果(A)<10H,则将转移到L2处指行,即执行MOV R1,#0FFH 指令。因此最终结果是:本程序执行前,如果(R0)=10H,则(R1)=00H,如果(R0)>10H, 则(R1)=0AAH,如果(R0)<10H,则(R1)=0FFH。 弄懂了这条指令,其它的几条就类似了,第二条是把A当中的值和直接地址中的值比较,第 三条则是将直接地址中的值和立即数比较,第四条是将间址寻址得到的数和立即数比较,这 里就不详谈了,下面给出几个对应的例程。 CJNE A,10H ;把A中的值和10H中的值比较(注意和上题的区别) CJNE 10H,#35H ;把10H中的值和35H中的值比较 CJNE @R0,#35H ;把R0中的值作为地址,从此地址中取数并和35H比较
刚好也有这么个困惑,已经解决了,拿出来分享下比较转移指令CJNZCJNEA,#data,relCJNEA,direct,relCJNERn,#data,relCJNE@Ri,#data,rel第一条指令的功能是将A中的值和立即数data比较,如果两者相等,就次序执行(执行本指令的下一条指令),如果不相等,就转移,同样地,我们能将rel理解成标号,即:CJNEA,#data,标号。这样利用这条指令,我们就能判断两数是否相等,这在很多场合是非常有用的。但有时还想得知两数比较之后哪个大,哪个小,本条指令也具有这样的功能,如果两数不相等,则CPU还会反映出哪个数大,哪个数小,这是用CY(进位位)来实现的。如果前面的数(A中的)大,则CY=0,不然CY=1,因此在程序转移后再次利用CY就可判断出A中的数比data大还是小了。例:MOVA,R0CJNEA,#10H,L1MOVR1,#0FFHAJMPL3L1:JCL2MOVR1,#0AAHAJMPL3L2:MOVR1,#0FFHL3:SJMPL3JC是判CY是0,还是1进行转移,如果CY=1,则转移到JC后面的标号处执行,如果CY=0则次序执行(执行它的下面一条指令)。分析一下上面的程序,如果(A)=10H,则次序执行,即R1=0。如果(A)不等于10H,则转到L1处继续执行,在L1处,再次进行判断,如果(A)>10H,则CY=1,将次序执行,即执行MOVR1,#0AAH指令,而如果(A)<10H,则将转移到L2处指行,即执行MOVR1,#0FFH指令。因此最终结果是:本程序执行前,如果(R0)=10H,则(R1)=00H,如果(R0)>10H,则(R1)=0AAH,如果(R0)<10H,则(R1)=0FFH。弄懂了这条指令,其它的几条就类似了,第二条是把A当中的值和直接地址中的值比较,第三条则是将直接地址中的值和立即数比较,第四条是将间址寻址得到的数和立即数比较,这里就不详谈了,下面给出几个对应的例程。CJNEA,10H;把A中的值和10H中的值比较(注意和上题的区别)CJNE10H,#35H;把10H中的值和35H中的值比较CJNE@R0,#35H;把R0中的值作为地址,从此地址中取数并和35H比较
文章TAG:单片机4kbc语言能有多少行单片机语言多少

最近更新

  • 电压的有效值原理,电路中电压的有效值电压的有效值原理,电路中电压的有效值

    电压有效值与电压峰值的关系是电压峰值等于电压有效值乘以根号,电压有效值与电压峰值之间存在特定的关系。根据正弦交流电的热等效原理,电流和电压的有效值定义为它们在一个周期内瞬时值.....

    国产芯片 日期:2024-04-11

  • k60 获取管脚电压,kt0936m引脚电压k60 获取管脚电压,kt0936m引脚电压

    这个电压就是失调电压。看看电解电容是不是坏了,首先,加速电极电压应正常,该电压从高压包输出,您可以首先测量高压组件的加速电极电压。如果不是,请再次检查亮度通道电路,设PNP晶体管和NPN晶.....

    国产芯片 日期:2024-04-11

  • 南昌中微科技有限公司电话是多少,南昌怡佳科技有限公司在那南昌中微科技有限公司电话是多少,南昌怡佳科技有限公司在那

    南昌怡佳科技有限公司在那2,南昌中微半导体设备有限公司上班时间3,中微股票代码是多少4,深圳中微电科技有限公司电话是多少5,求高人帮我查出079188196259的地址到底是南昌哪个地方的求6,南.....

    国产芯片 日期:2024-04-10

  • t7h4004乘2多少钱,Intel Core 2 Duo E7400多少钱t7h4004乘2多少钱,Intel Core 2 Duo E7400多少钱

    IntelCore2DuoE7400多少钱780元盒装2,大乐透中42是多少钱中四加二得3000元。3,atm机上显示246555是多少钱两千四百六十五块五毛五4,请问广州卷烟2厂生产的双喜香烟有哪几种最贵的多少钱每.....

    国产芯片 日期:2024-04-10

  • lt8315芯片连接图,tl8251芯片lt8315芯片连接图,tl8251芯片

    设计电路图时,连接芯片的要点如下:了解芯片的引脚功能非常重要,这有助于正确连接芯片。绘制CPU和存储芯片的连接图如下:B=,芯片的引脚需要与电路图上的符号相对应,以确保正确连接,根据图中.....

    国产芯片 日期:2024-04-10

  • 电子e的值是多少伏,一个电子e的电荷量电子e的值是多少伏,一个电子e的电荷量

    一个电子e的电荷量1.6×10∧-192,谁知道物理中一个电子所代电荷量e的值是多少1.6*10^-19(C)3,光电效应中的e的值是多少光电效应中的e的值e代表电子电量基本电荷e=1.6021892×10^-19库仑。.....

    国产芯片 日期:2024-04-10

  • 冰箱低压打压多少个为标准,冰箱维修问题冰箱打压高压低压应该打多少冰箱低压打压多少个为标准,冰箱维修问题冰箱打压高压低压应该打多少

    冰箱维修问题冰箱打压高压低压应该打多少冰箱以r12为例,正常工作时的压力,高压1,3mpa,低压0,5mpa,比较安全,大于0,5容易损坏压缩机排气阀,在气温20度时,最佳状态是回气管结露,不结霜。2,冰箱.....

    国产芯片 日期:2024-04-09

  • 无功补偿谐振过电压,谐波和无功功率补偿无功补偿谐振过电压,谐波和无功功率补偿

    高压输电线路,特别是高压电缆对电源端是容性的,因此线路补偿往往与电感串联(电学上称为电抗器)。它通常串联在0V及以上的超高压线路中,其主要作用是从补偿(降低)电抗的角度来提高系统电压,从而.....

    国产芯片 日期:2024-04-09