標(biāo)題: CT107D單片機(jī)數(shù)碼管動(dòng)態(tài)顯示 [打印本頁]

作者: 冷暖或自知    時(shí)間: 2017-11-22 17:13
標(biāo)題: CT107D單片機(jī)數(shù)碼管動(dòng)態(tài)顯示

  1. #include "reg52.h"  //定義51單片機(jī)特殊功能寄存器
  2. #include "intrins.h"
  3.               //  0    1    2    3    4    5    6    7    8    9
  4. code unsigned char duantab[] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

  5. code unsigned char weitab[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

  6. unsigned char i= 0;

  7. void display(void);

  8. sbit a = P2^5;
  9. sbit b = P2^6;
  10. sbit c = P2^7;

  11. void wei_clock();
  12. void duan_clock();



  13. //主函數(shù)
  14. void main(void)
  15. {
  16.     TMOD = 0x01;  //配置定時(shí)器工作模式
  17.     TH0 = (65536-2000)/256;
  18.     TL0 = (65536-2000)%256;  
  19.     EA = 1;
  20.     ET0 = 1;  //打開定時(shí)器中斷
  21.     TR0 = 1;  //啟動(dòng)定時(shí)器
  22.     while(1)
  23.     {

  24.     }
  25. }


  26. void display()
  27. {

  28.         //先送位選
  29.         P0 = weitab[ i];
  30.         wei_clock();
  31.         //再送段選
  32.         P0 = duantab[ i];
  33.         duan_clock();
  34.         i++;
  35.         if(i>=8)
  36.                 i=0;
  37. }
  38. //定時(shí)器中斷服務(wù)函數(shù)
  39. void isr_timer_0(void)  interrupt 1  //默認(rèn)中斷優(yōu)先級 1
  40. {
  41.     TH0 = (65536-2000)/256;
  42.     TL0 = (65536-2000)%256; //定時(shí)器重載
  43.         display(); //2ms執(zhí)行一次
  44. }
  45. //段碼鎖存 Y7C 1變?yōu)?
  46. //即74HC138的Y7輸出 0變?yōu)?
  47. void duan_clock()
  48. {
  49.         //74HC138 的Y7 為0
  50. //        a = 1;
  51. //        b = 1;
  52. //        c = 1;
  53.         P2 = 0xff; //1111 1111
  54.         _nop_();
  55.         _nop_();
  56.         //74HC138 的Y7 為1
  57. //        a = 0;
  58. //        b = 1;
  59. //        c = 0;
  60.         P2 = 0x5f; //0101 1111
  61. }
  62. //位碼鎖存 Y6C 1變?yōu)?
  63. //即74HC138的Y6輸出 0變?yōu)?
  64. void wei_clock()
  65. {
  66.         //74HC138 的Y6 為0
  67.         //a = 0;
  68.         //b = 1;
  69.         //c = 1;
  70.         P2 = 0xdf; //1101 1111
  71.         _nop_();
  72.         _nop_();
  73. //74HC138 的Y6 為1
  74. //        a = 0;
  75. //        b = 1;
  76. //        c = 0;
  77.         P2 = 0x5f; //0101 1111
  78. }
復(fù)制代碼







歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1