完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include
#include #defineuintunsignedint #defineucharunsignedchar ***itRCLK=P3^5; ***itSRCLK=P3^6; ***itSER=P3^4; ucharledduan[]={0x00,0x00,0x7E,0x81,0x81,0x81,0x7E,0x00}; ucharledwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; voiddelay(uintz); voidHC595(uchardate) //date必须是char型 { uinta; SRCLK=0; RCLK=0; for(a=0;a<8;a++) { SER=date>>7; date<<=1; SRCLK=1; SRCLK=0; } RCLK=1; RCLK=0; } voidmain() { P0=0x7f; while(1) { uchari=0; for(i=0;i<8;i++) { P0=ledwei; HC595(ledduan); delay(1); HC595(0x00); } } } voiddelay(uintz) { uintx,y; for(x=z;x>0;x--) for(y=100;y>0;y--); } 问题在于为什么date必须是char型?是int型的话点阵就无法成功显示0 |
|
相关推荐
11个回答
|
|
应该是一这个变量的移位操作有关,
|
|
|
|
595只有8位,如果用INT,移位后或者只输出高8位,或者只输出低8位。除非使用2个595级联,这样两个8位就可以使用INT
|
|
|
|
例如0x41 从char变成int型 从8位变成16位 是高位补0吗?不太明白8位变成16位数会有什么变化。求教了 |
|
|
|
不是char变成int的问题,而是把一个16位的数转给一个8位的数会出什么问题的情况
|
|
|
|
就是我不太理解那个移位,date是int型 是char型有什么区别 比如0x41 0100 0001(8位) 000....000 0100 0001(32位) 右移8位 0000 0001 000....000 0000 0001 然后按照程序左移一位 照这样理解8位或32位应该都不影响最后结果 但是事实是8位移 32位移是有影响的 是我想错了吗? for(a=0;a<8;a++) { SER=date>>7;//此处date必须是char型 date<<=1; SRCLK=1; SRCLK=0; }问题就在这个移位上了 |
|
|
|
没注意这个,的确跟移位没有关系,而是调用这个函数时所给的参数类型是什么,你的程序里的调用是 HC595(ledduan);,这里的参数是uchar ledduan,那么如果函数的定义里参数类型为int的话,就会不匹配了
|
|
|
|
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
|
|
|
|
人中狼 发表于 2018-7-19 13:55 还是移位没明白的问题 刚刚找到了答案 SER=date>>7;//取高位 若0x41 1000 0001 移7位得 0000 0001=1 date<<=1; //左移一位 0000 0010 这样下一次取高位就是原来的次高位 SER=date>>7;//取高位(取的上一次的第二位) 0000 0000=0 如果是int型后面取高位取的就不再是0或1了 会变成0000....00010=2 |
|
|
|
移位方面8位和16位或者再多位也是一样的,只要这些数据的低8位是一样的就没有区别,SER是引脚,是一个位,C里面会把数据里的最低位赋值给SER,所以只要是移位位数范围内的数据是一样的,就没有问题。
调用函数时的参数数据类型如果与函数定义时的参数类型不一致的话,编译时应该会报错或报警告的 |
|
|
|
人中狼 发表于 2018-7-19 14:23 调试是没有出现警告的 刚开始移7位 8位 32位是没区别的 但是带上for循环和后面的左移 8位和32 位是有区别的 可以找个数在for循环里试一下 |
|
|
|
char 为8位 int 为16位
|
|
|
|
只有小组成员才能发言,加入小组>>
2628个成员聚集在这个小组
加入小组MSP430FR5994 使用库函数 定时器触发AD问题请教
893 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2162 浏览 1 评论
4541 浏览 1 评论
2358 浏览 1 评论
1698 浏览 1 评论
689浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
909浏览 2评论
921浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-3-29 17:09 , Processed in 1.162276 second(s), Total 84, Slave 68 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 深圳华秋电子有限公司
电子发烧友 (电路图) 粤公网安备 44030402000349 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号