功能描述:
1.两位数码管显示,数码管可以显示0-99两位数字。需要用数码管驱动芯片
2.按一下加按键,数字加1,按到99之后数字变0。按一下减按键,数字减1,按到0之后变数字99。初始化显示为学号后两位。
资料下载链接
作品1
1.数码管驱动使用74LS245,74LS245是常用的数字芯片。
1.void display()
2.{
3. P0=0;//清空显示
4. P0=dat[num/10];//段选,刷新第一位数码管的显示
5. a2=1;//位选2选中,接下来要做第二段的显示
6. a1=0;//取消位选1。
7. delay();//简单延时
8. P0=0;//清空显示
9. P0=dat[num%10];//段选,刷新第二位数码管的显示
10. a1=1;
11. a2=0;
12. delay();
13.}
2.按键做在两个外部中断上,使能中断即可使用,不需要编写按键扫描函数
1.void jia() interrupt 0//按键中断处理函数
2.{
3. if(num<99)
4. num=num+1;
5. else
6. num=0;
7.}
8.void jian() interrupt 2//按键中断处理函数
9.{
10. if(num>0)
11. num=num-1;
12. else
13. num=99;
14.}
作品2
1.数码管驱动使用4511
驱动代码:
1.void Display(unsigned char i) //数码管数值显示
2.{
3. static unsigned char ge, shi, mode;
4. if(mode!=i) //当值未改变时,去除计算,减少一次while循环时间
5. {
6. ge = i % 10;
7. shi = i / 10;
8. }
9. mode = i; //记录上一次值
10.
11. P2 = table[ge] + 0xf0; //数据+关闭位选
12. delay(1); //稳定数据
13. P2 &= 0xdf; //打开位选 共阴极低电平亮
14. delay(1);
15.
16. P2 = table[shi] + 0xf0;
17. delay(1);
18. P2 &= 0xef; //P2位选 个位P2^5 十位P2^4
19. delay(1);
20.}
2.按键扫描函数
1.unsigned char KeyScan(void) //按键检测,返回显示值
2.{
3. static bit flag1 = 0, flag2 = 0; //松手检测标志位
4. static unsigned char count = 35; //初始值
5.
6. if( (Key1 == 0) || (Key2 == 0) )
7. {
8. delay(10); //延时10ms
9. if(Key1 == 0)
10. {
11. if(flag1==0) //一直按下时只执行一次,flag1=1
12. {
13. if(count != 99) //判断是否在数码管显示范围内
14. count++;
15. else
16. count = 40; //超出则赋初值
17. flag1 = 1;
18. }
19. }
20. if(Key2 == 0)
21. {
22. if(flag2==0)
23. {
24. if(count != 0)
25. count--;
26. else
27. count=40;
28. flag2 = 1;
29. }
30. }
31. }
32. if(Key1==1) //松手标志位复位
33. flag1 = 0;
34. if(Key2==1)
35. flag2 = 0;
36.
37. return count;
38.}
阅读全文