利用学院下发的单片机实验单板实现,8个段数码管显示要求如下:从最右侧一个7段数码管开始显示0,然后最右侧两个显示01,再然后最右侧三个显示012,依次类推最后所有数码管显示01234567。按下按键K17后8个段码管全灭,再次按下后从0开始重新按上面要求显示。要求:用外部中断实现。效果演示.mp4
#include#defineuintunsignedint#defineucharunsignedchar//共阴极段码ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}ucharcodesled_bit[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};sbitOE=P1^3;//74LS573的/OE控制位sbitLE1=P1^4;//控制段码的74LS573的LE控制位sbitLE2=P1^5;//控制位选的74LS573的LE控制位bitsym;//设置按键标志//延时函数voiddelay(uinti){while(i--);}//显示函数voidseg_disp(charx,chary){OE=1;//禁止74LS573的使能输入位LE2=1;//控制位码锁存器锁存输入P0=sled_bit[y];//位选码管位控码送P0口LE2=0;LE1=1;//控制段码锁存器锁存输入P0=table[x];LE1=0;OE=0;}//主函数voidmain(){chari,j;ucharnum;//外部中断0初始化IT0=1;//外部中断0为下降沿触发EA=1;//开启总中断EX0=1;//使能外部中断0sym=0;//初始化按键标志变量while(1){for(i=0;i<8;i++){for(num=0;num<100;num++)//每组数据显示的次数for(j=0;j<=i;j++)//判断定时器溢出标志{if(0==sym){//最初没有按键按下,或者是本次按键按下后重新从0开始显示seg_disp(j,7-i+j);//调用显示函数delay(200);}else{j=i=num=100;//使下一次按下按键后数码管从0开始显示}}}}}//外部中断0中断服务函数voidint0_seg()interrupt0{sym=!sym;//按键标志变量取反if(1==sym)OE=1;//关闭所有段码管显示}
举一反三
- 【资料题】单片机 P1 口连接 8 个独立按键, P2 口连接一个数码管,按下其中任意一个按键后,数码管显示该按键值,无按键按下时数码管显示 0
- 9S倒计时控制,要求按下开始按钮后,数码管上显示9,松开开始按钮后按每秒递减,减到0时停止,然后再次从9开始倒计时,不断循环。无论何时按下停止按钮,数码管显示当前值,再次按下开始按钮,数码管从当前值继续递减。
- 要求编写数码管显示程序,实现如下效果: 1)一个数码管0到9循环显示,从0开始依次增加到9的滚动循环显示
- 编写程序通过外部中断0,当按键按下时,数码管依次显示0-F.
- 按下按钮1一次,数码管显示1;按下按钮1两次,数码管显示2;按下按钮1三次,数码管显示3;按下按钮1四次,数码管显示4;按下按钮1五次,数码管显示5。按下按钮2复归,数码管显示0,重新开始计数。
内容
- 0
对于共阴极接法的七段数码显示管,如果显示码为0000110,那么在数码管上会显示数字1。
- 1
智慧职教: LED数码管用( )个显示段显示一个字符或数字
- 2
4位半数字万用表采用七段数码管显示,需要()个数码管。 A: 4 B: 5 C: 7 D: 8
- 3
LED数码管有()数码管和()数码管显示两种
- 4
用数码管显示矩阵式按键的键值:学会判断矩阵式按键是否按下,并将其键值送给数码管显示