完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
|
相关推荐
4个回答
|
|
|
可以做个循环的嵌套 让其一级一级的向内嵌 就可以实现。或者用swtich语句,循环判断
|
|
|
|
|
|
#include #include #define uint unsigned int #define uchar unsigned char unsigned char code duan_ma[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f}; // 显示段码值0123456789 unsigned char code wei_ma[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //分别对应相应的数码管点亮,即位码 ***it wei_suo=P2^0; //位选通 ***it duan_suo=P2^1; //段选通 ***it key1=P3^0; //左移键(按下SP1开始修改) ***it key2=P3^1; //加键 ***it key3=P3^2; //减键 ***it d1=P3^3; ***it d2=P3^4; ***it d3=P3^5; void display_ge(uchar); void display_shi(uchar); void display_bai(uchar); void display_qian(uchar); /oid shan_shuo(); /*延时子程序*******************************************************/ void delay(uint xms) { uint j; for(;xms>0;xms--) for(j=110;j>0;j--); } //四位的闪烁子函数 uchar shan_shuo_ge(m) { uchar t=50,ge,shi,bai,qian; uint date=1234; //数码管显示变量声明 ge=date%10; //个位数换算 shi=date/10%10; //十位换算 bai=date/100%10; //百位换算 qian=date/1000; while(m) { while(t--) { display_ge(ge); display_shi(shi); display_bai(bai); display_qian(qian); } t=50; while(t--) { display_shi(shi); display_bai(bai); display_qian(qian); } t=50; if(key1==0) { delay(5) ; while(!key1) { display_ge(ge); display_shi(shi); display_bai(bai); display_qian(qian); } m=0; } } return 1; } void shan_shuo_shi(n) { uchar t=50,ge,shi,bai,qian; uint date=1234; //数码管显示变量声明 ge=date%10; //个位数换算 shi=date/10%10; //十位换算 bai=date/100%10; //百位换算 qian=date/1000; while(n) { while(t--) { display_ge(ge); display_shi(shi); display_bai(bai); display_qian(qian); } d2=0; t=50; while(t--) { display_ge(ge); display_bai(bai); display_qian(qian); } t=50; if(key1==0) { delay(5) ; while(!key1) { display_ge(ge); display_shi(shi); display_bai(bai); display_qian(qian); } //可加松手检测 n=0; } } } /*主程序***************************************************************/ void main() { uint date=1234; uchar ge,shi,bai,qian,n=0,m=0; //数码管显示变量声明 static i=0; ge=date%10; //个位数换算 shi=date/10%10; //十位换算 bai=date/100%10; //百位换算 qian=date/1000; //千位换算 while(1) { display_ge(ge); display_shi(shi); display_bai(bai); display_qian(qian); if(key1==0) { delay(5); while(!key1) { d1=0; display_ge(ge); display_shi(shi); display_bai(bai); display_qian(qian); } while(!key1); delay(5); while(!key1); i++; if(i==3) //到第四个管子闪烁后i清零 {i=0;d1=1;} switch(i) //key1松开后数码管开始闪烁 { case 1: m=1;shan_shuo_ge(m);break; //在此增加按键加减 case 2: n=shan_shuo_ge(m);d1=0;;shan_shuo_shi(n);break; default:break; } } } } /*闪烁子程序**********************************************************/ /oid shan_shuo() //尝试用display2传递两个形参,来改变闪烁管子的变动 //{ uint t=50; /*四个子程序分别显示个、十、百、千**********************************************************/ void display_ge(uchar ge) //后四个数码管的 显示子程序 { duan_suo=1; //打开个位显示 P0=duan_ma[ge]; duan_suo=0; P0=0xff; wei_suo=1; P0=wei_ma[7]; //数据输入数码管内 wei_suo=0; delay(2); //延时显示2ms } void display_shi(uchar shi) //后四个数码管的 显示子程序 { duan_suo=1; //打开个位显示 P0=duan_ma[shi]; duan_suo=0; P0=0xff; wei_suo=1; P0=wei_ma[6]; //数据输入数码管内 wei_suo=0; delay(2); //延时显示2ms } void display_bai(uchar bai) //后四个数码管的 显示子程序 { duan_suo=1; //打开个位显示 P0=duan_ma[bai]; duan_suo=0; P0=0xff; wei_suo=1; P0=wei_ma[5]; //数据输入数码管内 wei_suo=0; delay(2); //延时显示2ms } void display_qian(uchar qian) //后四个数码管的 显示子程序 { duan_suo=1; //打开个位显示 P0=duan_ma[qian]; duan_suo=0; P0=0xff; wei_suo=1; P0=wei_ma[4]; //数据输入数码管内 wei_suo=0; delay(2); //延时显示2ms } |
|
|
|
|
|
我按照你说的写的 但是怎么实现按下key1键个位闪烁 然后十位闪烁 我觉得我这个switch语句用的有问题 请大大帮我分析一下 |
|
|
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
528 浏览 0 评论
654 浏览 0 评论
858 浏览 0 评论
837 浏览 0 评论
RT-Thread与英飞凌(infineon)合作得板子PSOC 6 板子学习
770 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
17061 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-14 21:12 , Processed in 1.387735 second(s), Total 81, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
3487