完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
海边的风 0:18:37
*预处理命令*/ #include #define uchar unsigned char #define uint unsigned int /* 函数申明 -----------------------------------------------*/ void delay(uint z); void send595(uchar dat); void out595(void); void disp(uchar w,uchar d); void dispoff(); /* 变量定义 -----------------------------------------------*/ ***it MOSIO=P2^2; ***it R_CLKa=P2^3; ***it S_CLKa=P2^4; uchar code duan[]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F};//此表为LED共阳级数码管段选字模 uchar code wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //此表为LED数码管位选字模 /* ******************************************************************************** ** 函数名称 : main(void) ** 函数功能 : 主函数 ******************************************************************************** */ void main() { uchar i; dispoff(); //先关闭数码管 while(1) { for(i=0;i<8;i++) //移动显示数码管0-7 { disp(i,i); delay(700); } } } void delay(uint z) { uint i,j; for(i=z;i>0;i--) for(j=110;j>0;j--); } /* ******************************************************************************** ** 函数名称 : send595(uchar dat) ** 函数功能 : 数据输入 ******************************************************************************** */ void send595(uchar dat) //数据输入 { uchar i; for(i=0;i<8;i++) { if((dat< MOSIO=1; else MOSIO=0; S_CLKa=0; S_CLKa=1; } } /* ******************************************************************************** ** 函数名称 : out595(void) ** 函数功能 : 数据输出 ******************************************************************************** */ void out595(void) // 数据输出 { R_CLKa=0; R_CLKa=1; //上升沿 } /* ******************************************************************************** ** 函数名称 : disp(uchar w,uchar d) ** 函数功能 : 数码管显示函数 ******************************************************************************** */ void disp(uchar w,uchar d) //数码管显示函数:w-位码,d-段码 { send595(wei[w]); //发送位选 send595(wei[w]); out595(); send595(duan[d]); //发送段选 out595(); } /* ******************************************************************************** ** 函数名称 : dispoff() ** 函数功能 : 关闭共阳数码管 ******************************************************************************** */ void dispoff() //关闭共阳数码管 { send595(0); //位选全为0,对共阳极而言即端开 send595(0); out595(); send595(0xff); //段选全为1,对共阳极段为0时才有可能点亮,这样就被关闭 out595(); } 海边的风 0:18:37 *预处理命令*/ #include #define uchar unsigned char #define uint unsigned int /* 函数申明 -----------------------------------------------*/ void delay(uint z); void send595(uchar dat); void out595(void); void disp(uchar w,uchar d); void dispoff(); /* 变量定义 -----------------------------------------------*/ ***it MOSIO=P2^2; ***it R_CLKa=P2^3; ***it S_CLKa=P2^4; uchar code duan[]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F};//此表为LED共阳级数码管段选字模 uchar code wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //此表为LED数码管位选字模 /* ******************************************************************************** ** 函数名称 : main(void) ** 函数功能 : 主函数 ******************************************************************************** */ void main() { uchar i; dispoff(); //先关闭数码管 while(1) { for(i=0;i<8;i++) //移动显示数码管0-7 { disp(i,i); delay(700); } } } void delay(uint z) { uint i,j; for(i=z;i>0;i--) for(j=110;j>0;j--); } /* ******************************************************************************** ** 函数名称 : send595(uchar dat) ** 函数功能 : 数据输入 ******************************************************************************** */ void send595(uchar dat) //数据输入 { uchar i; for(i=0;i<8;i++) { if((dat< MOSIO=1; else MOSIO=0; S_CLKa=0; S_CLKa=1; } } /* ******************************************************************************** ** 函数名称 : out595(void) ** 函数功能 : 数据输出 ******************************************************************************** */ void out595(void) // 数据输出 { R_CLKa=0; R_CLKa=1; //上升沿 } /* ******************************************************************************** ** 函数名称 : disp(uchar w,uchar d) ** 函数功能 : 数码管显示函数 ******************************************************************************** */ void disp(uchar w,uchar d) //数码管显示函数:w-位码,d-段码 { send595(wei[w]); //发送位选 send595(wei[w]); out595(); send595(duan[d]); //发送段选 out595(); } /* ******************************************************************************** ** 函数名称 : dispoff() ** 函数功能 : 关闭共阳数码管 ******************************************************************************** */ void dispoff() //关闭共阳数码管 { send595(0); //位选全为0,对共阳极而言即端开 send595(0); out595(); send595(0xff); //段选全为1,对共阳极段为0时才有可能点亮,这样就被关闭 out595(); }
|
|
相关推荐
7 个讨论
|
|
求老师指点 我调了好长时间 学生初学51单片机
|
|
|
|
|
|
谢谢,我刚学,不知道什么仿真。那就是我的一个工程,如果把时间延迟缩短,就是看不清楚了,也就是没法消影。
********************************************************************************************* 今天又编了一个,搞了一天,还是没搞好,是用两个独立按键实现两位数的加一 减一,范围0到59,在数码管上显示,(我从网上买的51单片机学习板,) 同样出现了乱码,八个管子亮了6个,而且都是乱的,感觉是595级联没掌握好 。。我把我编的程序给老师看下,现在还在大学学习,想学点东西,可是我老是出错,真的都没有信心学下去了。我知道51是入门,必须的学好,才可以学习其他更难得,请老师帮我指点一下,万分感激。 ************************************************************************************************** #include #include #define NOP() _nop_() #define uint unsigned int #define uchar unsigned char uchar code duan[]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F};//此表为LED共阳级数码管段选字模 uchar code wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //此表为LED数码管位选字模 void input(uchar dat); void output(); void off(); void delay(uint); void keyscan(); void display(uchar w,uchar d); uchar num; ***it M=P2^2; ***it R=P2^3; ***it S=P2^4; ***it key1=P3^2; ***it key2=P3^3; //***it key2=P3^4; //***it key2=P3^5; void input(uchar dat) {uchar i; {for(i=0;i<8;i++) if((dat< M=1; else M=0; S=0; NOP(); NOP(); S=1;} } void output() {R=0; NOP(); NOP(); R=1;} void off() { input(0); input(0); output(); input(0xff); output();} void keyscan() { if(key1==0); {delay(10); if(key1==0) num++; if(num==60) num=0; //display(wei[],duan[]); while(~key1); } if(key2==0); {delay(10); if(key2==0) if(num==0) num=60; num--; //display(wei[],duan[]); while(~key2);} } void delay(uint z) {uint i,j; for(i=z;i>0;i--) for(j=110;j>0;j--); } void display(uchar w,uchar d) {input(wei[w]); //input(wei[w]); //output(); //delay(10); input(duan[d]); output();} void main() {uchar si,ge; off(); while(1) {keyscan(); si=num/10; ge=num%10; display(6,si); delay(10); off(); display(7,ge); delay(10); off(); } } |
|
|
|
|
|
谢谢,我刚学,不知道什么仿真。那就是我的一个工程,如果把时间延迟缩短,就是看不清楚了,也就是没法消影。 ********************************************************************************************* 今天又编了一个,搞了一天,还是没搞好,是用两个独立按键实现两位数的加一 减一,范围0到59,在数码管上显示,(我从网上买的51单片机学习板,) 同样出现了乱码,八个管子亮了6个,而且都是乱的,感觉是595级联没掌握好 。。我把我编的程序给老师看下,现在还在大学学习,想学点东西,可是我老是出错,真的都没有信心学下去了。我知道51是入门,必须的学好,才可以学习其他更难得,请老师帮我指点一下,万分感激。 ************************************************************************************************** #include #include #define NOP() _nop_() #define uint unsigned int #define uchar unsigned char uchar code duan[]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F};//此表为LED共阳级数码管段选字模 uchar code wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //此表为LED数码管位选字模 void input(uchar dat); void output(); void off(); void delay(uint); void keyscan(); void display(uchar w,uchar d); uchar num; ***it M=P2^2; ***it R=P2^3; ***it S=P2^4; ***it key1=P3^2; ***it key2=P3^3; //***it key2=P3^4; //***it key2=P3^5; void input(uchar dat) {uchar i; {for(i=0;i<8;i++) if((dat< M=1; else M=0; S=0; NOP(); NOP(); S=1;} } void output() {R=0; NOP(); NOP(); R=1;} void off() { input(0); input(0); output(); input(0xff); output();} void keyscan() { if(key1==0); {delay(10); if(key1==0) num++; if(num==60) num=0; //display(wei[],duan[]); while(~key1); } if(key2==0); {delay(10); if(key2==0) if(num==0) num=60; num--; //display(wei[],duan[]); while(~key2);} } void delay(uint z) {uint i,j; for(i=z;i>0;i--) for(j=110;j>0;j--); } void display(uchar w,uchar d) {input(wei[w]); //input(wei[w]); //output(); //delay(10); input(duan[d]); output();} void main() {uchar si,ge; off(); while(1) {keyscan(); si=num/10; ge=num%10; display(6,si); delay(10); off(); display(7,ge); delay(10); off(); } } |
|
|
|
|
|
这是哪个板子的原理图
|
|
|
|
|
|
谢谢,我现在开始学了。 |
|
|
|
|
|
只有小组成员才能发言,加入小组>>
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 04:47 , Processed in 0.633835 second(s), Total 54, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号