功能描述:
1.兩位數(shù)碼管顯示,數(shù)碼管可以顯示0-99兩位數(shù)字。需要用數(shù)碼管驅(qū)動(dòng)芯片
2.按一下加按鍵,數(shù)字加1,按到99之后數(shù)字變0。按一下減按鍵,數(shù)字減1,按到0之后變數(shù)字99。初始化顯示為學(xué)號(hào)后兩位。
資料下載鏈接
作品1
1.數(shù)碼管驅(qū)動(dòng)使用74LS245,74LS245是常用的數(shù)字芯片。
1.void display()
2.{
3. P0=0;//清空顯示
4. P0=dat[num/10];//段選,刷新第一位數(shù)碼管的顯示
5. a2=1;//位選2選中,接下來(lái)要做第二段的顯示
6. a1=0;//取消位選1。
7. delay();//簡(jiǎn)單延時(shí)
8. P0=0;//清空顯示
9. P0=dat[num%10];//段選,刷新第二位數(shù)碼管的顯示
10. a1=1;
11. a2=0;
12. delay();
13.}
2.按鍵做在兩個(gè)外部中斷上,使能中斷即可使用,不需要編寫(xiě)按鍵掃描函數(shù)
1.void jia() interrupt 0//按鍵中斷處理函數(shù)
2.{
3. if(num<99)
4. num=num+1;
5. else
6. num=0;
7.}
8.void jian() interrupt 2//按鍵中斷處理函數(shù)
9.{
10. if(num>0)
11. num=num-1;
12. else
13. num=99;
14.}
作品2
1.數(shù)碼管驅(qū)動(dòng)使用4511
驅(qū)動(dòng)代碼:
1.void Display(unsigned char i) //數(shù)碼管數(shù)值顯示
2.{
3. static unsigned char ge, shi, mode;
4. if(mode!=i) //當(dāng)值未改變時(shí),去除計(jì)算,減少一次while循環(huán)時(shí)間
5. {
6. ge = i % 10;
7. shi = i / 10;
8. }
9. mode = i; //記錄上一次值
10.
11. P2 = table[ge] + 0xf0; //數(shù)據(jù)+關(guān)閉位選
12. delay(1); //穩(wěn)定數(shù)據(jù)
13. P2 &= 0xdf; //打開(kāi)位選 共陰極低電平亮
14. delay(1);
15.
16. P2 = table[shi] + 0xf0;
17. delay(1);
18. P2 &= 0xef; //P2位選 個(gè)位P2^5 十位P2^4
19. delay(1);
20.}
2.按鍵掃描函數(shù)
1.unsigned char KeyScan(void) //按鍵檢測(cè),返回顯示值
2.{
3. static bit flag1 = 0, flag2 = 0; //松手檢測(cè)標(biāo)志位
4. static unsigned char count = 35; //初始值
5.
6. if( (Key1 == 0) || (Key2 == 0) )
7. {
8. delay(10); //延時(shí)10ms
9. if(Key1 == 0)
10. {
11. if(flag1==0) //一直按下時(shí)只執(zhí)行一次,flag1=1
12. {
13. if(count != 99) //判斷是否在數(shù)碼管顯示范圍內(nèi)
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) //松手標(biāo)志位復(fù)位
33. flag1 = 0;
34. if(Key2==1)
35. flag2 = 0;
36.
37. return count;
38.}