问答

汇集网友智慧,解决技术难题

21ic问答首页 - TAG - 数码管
  • 为什么protues上仿真没问题,但是现实中数码管一直在闪动?

    这是相关代码: /* 头文件声明区 */ #include //89c52专用头文件 #include //初始化底层驱动专用头文件 #include //按键底层驱动专用头文件 #include //数码管底层驱动专用头文件 #include //Led底层驱动专用头文件 #include //包含了各种内联函数和宏,用于访问处理器特定的指令和功能的头文件 /* 变量声明区 */ unsigned char Key_Val,Key_Down,Key_Old,Key_Up;//按键专用变量 unsigned char Key_Slow_Down;//按键减速专用变量 unsigned char Seg_Buf[8] = {10,10,10,10,10,10,10,10};//数码管显示数据存放数组 unsigned char Seg_Point[8] = {0,0,0,0,0,0,0,0};//数码管小数点数据存放数组 unsigned char Seg_Pos;//数码管扫描专用变量 unsigned int Seg_Slow_Down;//数码管减速专用变量 unsigned char ucLed[8] = {0,0,0,0,0,0,0,0};//Led显示数据存放数组 unsigned char Seg_Disp_Mode=1;//数码管模式显示变量 0为学号显示 1为按键显示 unsigned char Seg_Student[16]={8,2,0,6,2,2,0,7,2,7,0,0,0,0,0,0};//学号存储数组 /*自定义延迟函数(毫秒)*/ void Delay(unsigned int xms) //@12.000MHz { unsigned char i, j; while(xms--) { i = 2; j = 239; do { while (--j); } while (--i); } } /* 键盘处理函数 */ void Key_Proc() { if(Key_Slow_Down) return; Key_Slow_Down = 1;//键盘减速程序 Key_Val = Key_Read();//实时读取键码值 Key_Down = Key_Val & (Key_Old ^ Key_Val);//捕捉按键下降沿 Key_Up = ~Key_Val & (Key_Old ^ Key_Val);//捕捉按键上降沿 Key_Old = Key_Val;//辅助扫描变量 switch(Key_Down) { case 16: if(Seg_Disp_Mode==1) Seg_Buf[0] =0; LcdGotoXY(3,0); LcdPrintStr("键盘显示0 "); break; case 1: if(Seg_Disp_Mode==1) Seg_Buf[0] =1; LcdGotoXY(3,0); LcdPrintStr("键盘显示1 "); break; case 2: if(Seg_Disp_Mode==1) Seg_Buf[0] =2; LcdGotoXY(3,0); LcdPrintStr("键盘显示2 "); break; case 3: if(Seg_Disp_Mode==1) Seg_Buf[0] =3; LcdGotoXY(3,0); LcdPrintStr("键盘显示3 "); break; case 4: if(Seg_Disp_Mode==1) Seg_Buf[0] =4; LcdGotoXY(3,0); LcdPrintStr("键盘显示4 "); break; case 5: if(Seg_Disp_Mode==1) Seg_Buf[0] =5; LcdGotoXY(3,0); LcdPrintStr("键盘显示5 "); break; case 6: if(Seg_Disp_Mode==1) Seg_Buf[0] =6; LcdGotoXY(3,0); LcdPrintStr("键盘显示6 "); break; case 7: if(Seg_Disp_Mode==1) Seg_Buf[0] =7; LcdGotoXY(3,0); LcdPrintStr("键盘显示7 "); break; case 8: if(Seg_Disp_Mode==1) Seg_Buf[0] =8; LcdGotoXY(3,0); LcdPrintStr("键盘显示8 "); break; case 9: if(Seg_Disp_Mode==1) Seg_Buf[0] =9; LcdGotoXY(3,0); LcdPrintStr("键盘显示9 "); break; case 10: if(Seg_Disp_Mode==1) Seg_Buf[0] =11; LcdGotoXY(3,0); LcdPrintStr("键盘显示A "); break; case 11: if(Seg_Disp_Mode==1) Seg_Buf[0] =12; LcdGotoXY(3,0); LcdPrintStr("键盘显示b "); break; case 12: if(Seg_Disp_Mode==1) Seg_Buf[0] =13; LcdGotoXY(3,0); break; case 13: if(Seg_Disp_Mode==1) Seg_Buf[0] =14; LcdGotoXY(3,0); LcdPrintStr("键盘显示d "); break; case 14: if(Seg_Disp_Mode==1) Seg_Buf[0] =15; LcdGotoXY(3,0); LcdPrintStr("键盘显示E "); break; case 15: if(Seg_Disp_Mode==1) Seg_Buf[0] =16; LcdGotoXY(3,0); LcdPrintStr("键盘显示F "); break; case 17: Seg_Disp_Mode = 0; LcdWriteCmd(0xff); LcdGotoXY(3,0); LcdPrintStr("学号流水显示"); break; case 18: Seg_Disp_Mode = 1; break; } } /* 信息处理函数 */ void Seg_Proc() { unsigned char i,j;//循环变量 if(Seg_Slow_Down) return; Seg_Slow_Down = 1;//数码管减速程序 if(Seg_Disp_Mode==0)//学号显示界面 { Seg_Buf[7] =0; for(i=0,j=0;i<=5,j<=15;i++,j++) { if(i==6) { i=0; Seg_Buf[i] =Seg_Student[j]; Delay(500); } else { Seg_Buf[i] =Seg_Student[j]; Delay(500); } } } if(Seg_Disp_Mode==1)//按键响应界面 { Seg_Buf[1] =10; Seg_Buf[2] =10; Seg_Buf[3] =10; Seg_Buf[4] =10; Seg_Buf[5] =10; Seg_Buf[6] =10; Seg_Buf[7] =1; } } /* 其他显示函数 */ void Led_Proc() { } void Timer0Init(void) //1毫秒@12.000MHz { AUXR &= 0x7F; //定时器时钟12T模式 TMOD &= 0xF0; //设置定时器模式 TL0 = 0x18; //设置定时初始值 TH0 = 0xFC; //设置定时初始值 TF0 = 0; //清除TF0标志 TR0 = 1; //定时器0开始计时 ET0 = 1; //定时器中断0打开 EA = 1; //总中断打开 } void Timer0Server() interrupt 1 { if(++Key_Slow_Down == 10) Key_Slow_Down = 0;//键盘减速专用 if(++Seg_Slow_Down == 500) Seg_Slow_Down = 0;//数码管减速专用 if(++Seg_Pos == 8) Seg_Pos = 0;//数码管显示专用 Seg_Disp(Seg_Pos,Seg_Buf[Seg_Pos],Seg_Point[Seg_Pos]); Led_Disp(Seg_Pos,ucLed[Seg_Pos]); } /* Main函数 */ void main() { Timer0Init(); LcdInit(); // LCD12864液晶功能初始化 LcdShowInit(); while (1) { Key_Proc(); Seg_Proc(); Led_Proc(); } } 有些是关于lcd12864的代码我去掉了,与这个模块没关系 [url=" d:\桌面\7dedfb64eaa278e39a3a202a7d3c797.jpg][img][/img][/url] [url=" d:\桌面\3930d12871e68cda4111828a19f5159.jpg][img][/img][/url] [url=" d:\桌面\3930d12871e68cda4111828a19f5159.jpg][img][/img][/url] [url=" d:\桌面\7dedfb64eaa278e39a3a202a7d3c797.jpg][img][/img][/url] [url=" d:\桌面\3930d12871e68cda4111828a19f5159.jpg][img][/img][/url]

    LC CD se 数码管 PROTUES 仿真

    19216浏览量 10回复量 关注量
  • 小白请教简单的逻辑问题

    用两个移位寄存器级联分别控制位选和段选来让三个数码管显示需要显示的数字。在主函数while循环中按顺序位选三个数码管并分别显示数字。但是只有在给移位寄存器和数码管触电一瞬间三个数码管才能显示,然后数码管就熄灭。若是只让一个数码管显示就没有问题,数码管也不会熄灭。当用两个和三个数码管时均出现触电一瞬间显示对应数字,然后就熄灭的情况。求问各位大佬这是啥问题呢

    寄存器 数码 数码管 小白 单片机 pic

    1093浏览量 5回复量 关注量
  • 数码管显示的原理是什么?

    数码管显示的原理是什么?

    数码 数码管 数码管显示 数码管显

    1713浏览量 2回复量 关注量
  • 哪家数码管工厂生产常规红光的最好是有经常有备货的工厂

    哪家数码管工厂生产常规红光的,最好是有经常有备货的工厂。

    数码 数码管

    1310浏览量 2回复量 关注量
  • STM8L151K4T6 看门狗复位后复位标志不置位 sos

    做一个设计,需要使用IWDG监控系统异常后复位,复位后需要检测复位源进行相关操作。具体测试了一下系统复位后复位寄存器RST_SR的数值,实际使用数码管显示器显示,看门狗定时最大为1.7s,不清狗任由它复位,能够根据LED数码管复位暂停现象判断狗的复位动作。 给系统上电,显示器只显示上电复位标志PORF=1,电源跌落标志ORF=1,而IWDG复位标志IWDGF一直为0,不置位。 请教大神指点。

    看门狗 stm8l151k4 显示器 数码管 数码 RF

    2090浏览量 0回复量 关注量
  • STM32F071VBT6问题,

    请问该芯片是否支持热插拔?如果用该芯片通过IIC控制显示数码管显示数据,能不断电插拔显示模块的板吗?

    STM32F0 芯片 ic 控制 数码 数码管

    12900浏览量 4回复量 关注量
  • 乒乓球计分电路

    [align=left]乒乓球赛采用“11”分制,因规则限制,最高得分不会超出“19”分,所以数码管个位能显“0—9”十个数,而十位只要能显“0”与“1”即可,当计分至“20”,自动复位显“0”。(20瞬间为0)[/align][align=left]‚计分有加、减功能。计分信息用按键置入,每按一次键,加(或减)1分。[/align][align=left]ƒ数码管能同步复位。(记分:15分,按下复位键,00)[/align][align=left]„单独按“加”键或按“减”键都能使个位数显“0—9”十个数,在计分时,偶尔(不是常见)发现误显,可用加、减键予以调整、纠正。[/align][align=left] 不知道该如何下手啊[/align]

    电路 数码 数码管 同步复位

    895浏览量 2回复量 关注量