久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9504|回復: 2
收起左側

5x7小點陣時鐘,使用了反并聯技術

[復制鏈接]
ID:78714 發表于 2015-5-3 00:26 | 顯示全部樓層 |閱讀模式
我的起亞智跑車上的時鐘被閹割了,車友一般都是買個成品小時鐘加裝。咱正在學習單片機就打算自己做一個。
由于安裝空間有限,選擇了橫放的4個5x7點陣,SOP28的STC-15F2K60S2MCU直接焊接在5x7LED的12個引腳上并直接驅動(跟杜洋老師學的)。
上圖:
3.png

1.jpg

4個5x7點陣之間使用漆包線連接。
2.jpg

程序剛有點眉目,目前顯示正常:
視頻地址:
http://pan.baidu.com/s/1o6OJmjS

VID_20150422_230911.3gp_1429717298.gif

視頻轉成GIF的效果較差,實際顯示很穩定的。
因為車里有GPS,所以沒有做設置按鍵,打算直接使用GPS授時(未完成)。
由于MCU的IO口數量有限,所以使用了LED反并聯驅動技術,4位5x7點陣僅使用了17個IO口。見下圖:

4.png

借用網上找的mini3216電路圖說一下原理:

5.jpg

該電路使用48腳MCU STC12C5A60S2 直接驅動3216點陣,如果用傳統方法直接驅動至少要用48個IO口。
圖中可看出左邊4塊與右邊4塊LED模塊是完全的反并聯,這樣只需使用16+16=32個IO口。
再看一下STC 手冊中IO口模式設置:

6.JPG

程序借鑒了杜洋兄特色的LED逐點驅動理念。
1/   上電初始化時將相應IO口的PxM0置1,
2/   關閉顯示段落中將相應IO口的PxM1置1,也就是將相應IO口全部設置為開漏輸出。再將相應IO口置1(高電平)。
此時IO口等效電路如下圖:
7.JPG

相當于是高阻狀態。
當我們要點亮某一個點時,以上圖D1模塊的1行1列點及列共陰為例,發命令:H1端口PxM1=0,L1=0,此時H1端口模式被設置為推挽并高電平輸出,L1端口為開漏的低電平。D1模塊的1行1列點得到正向電壓并發光,D3模塊的1行1列點得到反向電壓,不發光。
延時一段時間后,關閉顯示。
再以上圖D3模塊的1行1列點為例,它是與D1模塊的1行1列反并聯的,發命令:L1端口PxM1=0,H1=0,此時L1端口模式被設置為推挽并高電平輸出,H1端口為開漏的低電平。D3模塊的1行1列點得到正向電壓并發光,D1模塊的1行1列點得到反向電壓,不發光。
延時一段時間后,關閉顯示。
由此可以看出,LED的反并聯驅動充分利用了LED的單向導通發光的特性。假設每一個發光點是一個白熾燈泡的話,這個方法就不行了。
目前俺還在研究GPS授時,程序里沒有設置時間的功能,僅供參考。下載:http://pan.baidu.com/s/1hq6E97I
8.jpg

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的積分獎勵!

查看全部評分

回復

使用道具 舉報

ID:1 發表于 2015-5-4 03:44 | 顯示全部樓層
  1. /*********************************************************************************************
  2. 出品: DoYoung Studio
  3. 程序名:    數碼管驅動程序
  4. 編寫時間:  2011年8月16日
  5. 硬件支持:  STC12C4052AD
  6. 接口說明:  點掃描  
  7. 修改日志:  
  8.   NO.1-                                                               
  9. /*********************************************************************************************
  10. 說明:

  11. /*********************************************************************************************/
  12. #include <STC15F2K60S2.H>

  13. /**********************************************************************************************/
  14. //“程序開發調試設置項”
  15. #define LI                        1         //設置LED顯示的亮度(值域:1~9)
  16. #define DELAY                10         //設置每一個點顯示的時間長度(1~20)
  17. /**********************************************************************************************/
  18. sbit        LED_1        =P2^3; //設置LED點陣屏連接的I/O口
  19. sbit        LED_2        =P2^5; //設置LED點陣屏連接的I/O口
  20. sbit        LED_3        =P3^7; //設置LED點陣屏連接的I/O口
  21. sbit        LED_4        =P1^4; //設置LED點陣屏連接的I/O口
  22. sbit        LED_5        =P5^4; //設置LED點陣屏連接的I/O口
  23. sbit        LED_6        =P2^7; //設置LED點陣屏連接的I/O口
  24. sbit        LED_7        =P2^4; //設置LED點陣屏連接的I/O口
  25. sbit        LED_8        =P2^2;
  26. sbit        LED_9        =P2^0;
  27. sbit        LED_10        =P1^1;
  28. sbit        LED_11        =P3^3;
  29. sbit        LED_12        =P3^5;
  30. sbit        LED_13        =P1^6;
  31. sbit        LED_14        =P2^1;
  32. sbit        LED_15        =P1^2;
  33. sbit        LED_16        =P1^0;
  34. sbit        LED_17        =P2^6;

  35. #define P1M0SET                0x57 //設置I/O口工作方式//01010111
  36. #define P2M0SET                0xff //設置I/O口工作方式//11111111
  37. #define P3M0SET                0xa8 //設置I/O口工作方式//10101000
  38. #define P5M0SET                0x10 //設置I/O口工作方式//00010000

  39. //sbit        KEY                =P3^2; //按鍵1

  40. bit PD;//秒點顯示標志
  41. unsigned char MENU;//菜單切換標志位
  42. data unsigned char TIME_HH,TIME_MM,TIME_SS;//設置時、分、秒存放區
  43. data unsigned char hs  = 0; // 軟計數器,對10ms時基信號累加到0.5s
  44. data unsigned char cou  = 0; // 軟計數器,對10ms時基信號累加到1s
  45. data unsigned char bn;//掃描映射全局變量
  46. data unsigned char PWM;//顯示亮度

  47. /**********************************************************************************************/
  48. unsigned char code NUM[]={//顯示數字字樣
  49. 0X1F,0X11,0X1F,//0
  50. 0x12,0x1F,0x10,//1
  51. 0x1D,0x15,0x17,//2
  52. 0x15,0x15,0x1F,//3
  53. 0x07,0x04,0x1F,//4
  54. 0x17,0x15,0x1D,//5
  55. 0x1F,0x15,0x1D,//6
  56. 0x01,0x01,0x1F,//7
  57. 0x1F,0x15,0x1F,//8
  58. 0x17,0x15,0x1F,//9
  59. 0x02,0x1C,0x14,//C
  60. 0x0E,0x10,0x0E,//V
  61. };
  62. /**********************************************************************************************/
  63. unsigned char code Week[]={//顯示星期字樣
  64. 0x00,0x04,0x04,0x04,0x04,0x04,0x00,//一
  65. 0x00,0x0A,0x0A,0x0A,0x0A,0x0A,0x00,//二
  66. 0x00,0x10,0x15,0x15,0x15,0x10,0x00,//三
  67. 0x1F,0x11,0x17,0x11,0x17,0x11,0x1F,//四
  68. 0x00,0x10,0x15,0x1F,0x15,0x1D,0x10,//五
  69. 0x00,0x12,0x0A,0x03,0x0A,0x12,0x00,//六
  70. 0x00,0x1F,0x15,0x15,0x15,0x15,0x1F,//日
  71. };
  72. /*********************************************************************************************/
  73. void delay (unsigned int a){ // 用于點掃描的延時
  74.         unsigned int i;
  75.         while( a-- != 0){
  76.                 for(i = 0; i < DELAY; i++);
  77.         }                                     
  78. }
  79. /*********************************************************************************************/
  80. void dis_off (void){//全關
  81.         P1M1 = 0x57;         //P1置為開漏 01010111
  82.         P2M1 = 0xff;        //P2置為開漏 11111111
  83.         P3M1 = 0xa8;        //P3置為開漏 10101000
  84.         P5M1 = 0x10;        //P5置為開漏 00010000
  85.         P1 = 0x57;                //P1置1
  86.         P2 = 0xff;                //P2置1
  87.         P3 = 0xa8;                //P3置1
  88.         P5 = 0x10;                //P5置1
  89.         delay(10-PWM);
  90. }
  91. /*********************************************************************************************/
  92. void displayHH1 (unsigned char d){ //第1列橫向顯示程序
  93.         unsigned char i;
  94.         i = d & 0x01;
  95.         if(i == 0x01){P2M1 = 0xef;LED_1 = 0;delay(PWM);dis_off();}//11101111
  96.         i = d & 0x02;
  97.         if(i == 0x02){P2M1 = 0xfb;LED_1 = 0;delay(PWM);dis_off();}//11111011
  98.         i = d & 0x04;
  99.         if(i == 0x04){P2M1 = 0xfe;LED_1 = 0;delay(PWM);dis_off();}//11111110
  100.         i = d & 0x08;
  101.         if(i == 0x08){P1M1 = 0x55;LED_1 = 0;delay(PWM);dis_off();}//01010101
  102.         i = d & 0x10;
  103.         if(i == 0x10){P3M1 = 0xa0;LED_1 = 0;delay(PWM);dis_off();}//10100000
  104. }
  105. /*********************************************************************************************/
  106. void displayHH2 (unsigned char d){ //第2列橫向顯示程序 10111100
  107.         unsigned char i;
  108.         i = d & 0x01;
  109.         if(i == 0x01){P2M1 = 0xef;LED_2 = 0;delay(PWM);dis_off();}//11101111
  110.         i = d & 0x02;
  111.         if(i == 0x02){P2M1 = 0xfb;LED_2 = 0;delay(PWM);dis_off();}//11111011
  112.         i = d & 0x04;
  113.         if(i == 0x04){P2M1 = 0xfe;LED_2 = 0;delay(PWM);dis_off();}//11111110
  114.         i = d & 0x08;
  115.         if(i == 0x08){P1M1 = 0x55;LED_2 = 0;delay(PWM);dis_off();}//01010101
  116.         i = d & 0x10;
  117.         if(i == 0x10){P3M1 = 0xa0;LED_2 = 0;delay(PWM);dis_off();}//10100000
  118. }
  119. /*********************************************************************************************/
  120. void displayHH3 (unsigned char d){ //第3列橫向顯示程序 11011100
  121.         unsigned char i;
  122.         i = d & 0x01;
  123.         if(i == 0x01){P2M1 = 0xef;LED_3 = 0;delay(PWM);dis_off();}//11101111
  124.         i = d & 0x02;
  125.         if(i == 0x02){P2M1 = 0xfb;LED_3 = 0;delay(PWM);dis_off();}//11111011
  126.         i = d & 0x04;
  127.         if(i == 0x04){P2M1 = 0xfe;LED_3 = 0;delay(PWM);dis_off();}//11111110
  128.         i = d & 0x08;
  129.         if(i == 0x08){P1M1 = 0x55;LED_3 = 0;delay(PWM);dis_off();}//01010101
  130.         i = d & 0x10;
  131.         if(i == 0x10){P3M1 = 0xa0;LED_3 = 0;delay(PWM);dis_off();}//10100000
  132. }
  133. /*********************************************************************************************/
  134. void displayHH4 (unsigned char d){ //第4列橫向顯示程序 11101100
  135.         unsigned char i;
  136.         i = d & 0x01;
  137.         if(i == 0x01){P2M1 = 0xef;LED_4 = 0;delay(PWM);dis_off();}//11101111
  138.         i = d & 0x02;
  139.         if(i == 0x02){P2M1 = 0xfb;LED_4 = 0;delay(PWM);dis_off();}//11111011
  140.         i = d & 0x04;
  141.         if(i == 0x04){P2M1 = 0xfe;LED_4 = 0;delay(PWM);dis_off();}//11111110
  142.         i = d & 0x08;
  143.         if(i == 0x08){P1M1 = 0x55;LED_4 = 0;delay(PWM);dis_off();}//01010101
  144.         i = d & 0x10;
  145.         if(i == 0x10){P3M1 = 0xa0;LED_4 = 0;delay(PWM);dis_off();}//10100000
  146. }
  147. /*********************************************************************************************/
  148. void displayHH5 (unsigned char d){ //第5列橫向顯示程序 11110100
  149.         unsigned char i;
  150.         i = d & 0x01;
  151.         if(i == 0x01){P2M1 = 0xef;LED_5 = 0;delay(PWM);dis_off();}//11101111
  152.         i = d & 0x02;
  153.         if(i == 0x02){P2M1 = 0xfb;LED_5 = 0;delay(PWM);dis_off();}//11111011
  154.         i = d & 0x04;
  155.         if(i == 0x04){P2M1 = 0xfe;LED_5 = 0;delay(PWM);dis_off();}//11111110
  156.         i = d & 0x08;
  157.         if(i == 0x08){P1M1 = 0x55;LED_5 = 0;delay(PWM);dis_off();}//01010101
  158.         i = d & 0x10;
  159.         if(i == 0x10){P3M1 = 0xa0;LED_5 = 0;delay(PWM);dis_off();}//10100000
  160. }
  161. /*********************************************************************************************/
  162. void displayHH6 (unsigned char d){ //第6列橫向顯示程序 11111000
  163.         unsigned char i;
  164.         i = d & 0x01;
  165.         if(i == 0x01){P2M1 = 0xef;LED_6 = 0;delay(PWM);dis_off();}//11101111
  166.         i = d & 0x02;
  167.         if(i == 0x02){P2M1 = 0xfb;LED_6 = 0;delay(PWM);dis_off();}//11111011
  168.         i = d & 0x04;
  169.         if(i == 0x04){P2M1 = 0xfe;LED_6 = 0;delay(PWM);dis_off();}//11111110
  170.         i = d & 0x08;
  171.         if(i == 0x08){P1M1 = 0x55;LED_6 = 0;delay(PWM);dis_off();}//01010101
  172.         i = d & 0x10;
  173.         if(i == 0x10){P3M1 = 0xa0;LED_6 = 0;delay(PWM);dis_off();}//10100000
  174. }
  175. /*********************************************************************************************/
  176. void displayHH7 (unsigned char d){ //第7列橫向顯示程序 11111000
  177.         unsigned char i;
  178.         i = d & 0x01;
  179.         if(i == 0x01){P1M1 = 0x17;LED_1 = 0;delay(PWM);dis_off();}//00010111
  180.         i = d & 0x02;
  181.         if(i == 0x02){P2M1 = 0xfd;LED_1 = 0;delay(PWM);dis_off();}//11111101
  182.         i = d & 0x04;
  183.         if(i == 0x04){P1M1 = 0x53;LED_1 = 0;delay(PWM);dis_off();}//01010011
  184.         i = d & 0x08;
  185.         if(i == 0x08){P1M1 = 0x56;LED_1 = 0;delay(PWM);dis_off();}//01010110
  186.         i = d & 0x10;
  187.         if(i == 0x10){P2M1 = 0xbf;LED_1 = 0;delay(PWM);dis_off();}//10111111
  188. }
  189. /*********************************************************************************************/
  190. void displayHH8 (unsigned char d){ //第8列橫向顯示程序 11111000
  191.         unsigned char i;
  192.         i = d & 0x01;
  193.         if(i == 0x01){P1M1 = 0x17;LED_2 = 0;delay(PWM);dis_off();}//00010111
  194.         i = d & 0x02;
  195.         if(i == 0x02){P2M1 = 0xfd;LED_2 = 0;delay(PWM);dis_off();}//11111101
  196.         i = d & 0x04;
  197.         if(i == 0x04){P1M1 = 0x53;LED_2 = 0;delay(PWM);dis_off();}//01010011
  198.         i = d & 0x08;
  199.         if(i == 0x08){P1M1 = 0x56;LED_2 = 0;delay(PWM);dis_off();}//01010110
  200.         i = d & 0x10;
  201.         if(i == 0x10){P2M1 = 0xbf;LED_2 = 0;delay(PWM);dis_off();}//10111111
  202. }
  203. /*********************************************************************************************/
  204. void displayHH9 (unsigned char d){ //第9列橫向顯示程序 11111000
  205.         unsigned char i;
  206.         i = d & 0x01;
  207.         if(i == 0x01){P1M1 = 0x17;LED_3 = 0;delay(PWM);dis_off();}//00010111
  208.         i = d & 0x02;
  209.         if(i == 0x02){P2M1 = 0xfd;LED_3 = 0;delay(PWM);dis_off();}//11111101
  210.         i = d & 0x04;
  211.         if(i == 0x04){P1M1 = 0x53;LED_3 = 0;delay(PWM);dis_off();}//01010011
  212.         i = d & 0x08;
  213.         if(i == 0x08){P1M1 = 0x56;LED_3 = 0;delay(PWM);dis_off();}//01010110
  214.         i = d & 0x10;
  215.         if(i == 0x10){P2M1 = 0xbf;LED_3 = 0;delay(PWM);dis_off();}//10111111
  216. }
  217. /*********************************************************************************************/
  218. void displayHH10 (unsigned char d){ //第10列橫向顯示程序 11111000
  219.         unsigned char i;
  220.         i = d & 0x01;
  221.         if(i == 0x01){P1M1 = 0x17;LED_4 = 0;delay(PWM);dis_off();}//00010111
  222.         i = d & 0x02;
  223.         if(i == 0x02){P2M1 = 0xfd;LED_4 = 0;delay(PWM);dis_off();}//11111101
  224.         i = d & 0x04;
  225.         if(i == 0x04){P1M1 = 0x53;LED_4 = 0;delay(PWM);dis_off();}//01010011
  226.         i = d & 0x08;
  227.         if(i == 0x08){P1M1 = 0x56;LED_4 = 0;delay(PWM);dis_off();}//01010110
  228.         i = d & 0x10;
  229.         if(i == 0x10){P2M1 = 0xbf;LED_4 = 0;delay(PWM);dis_off();}//10111111
  230. }
  231. /*********************************************************************************************/
  232. void displayHH11 (unsigned char d){ //第11列橫向顯示程序 11111000
  233.         unsigned char i;
  234.         i = d & 0x01;
  235.         if(i == 0x01){P1M1 = 0x17;LED_5 = 0;delay(PWM);dis_off();}//00010111
  236.         i = d & 0x02;
  237.         if(i == 0x02){P2M1 = 0xfd;LED_5 = 0;delay(PWM);dis_off();}//11111101
  238.         i = d & 0x04;
  239.         if(i == 0x04){P1M1 = 0x53;LED_5 = 0;delay(PWM);dis_off();}//01010011
  240.         i = d & 0x08;
  241.         if(i == 0x08){P1M1 = 0x56;LED_5 = 0;delay(PWM);dis_off();}//01010110
  242.         i = d & 0x10;
  243.         if(i == 0x10){P2M1 = 0xbf;LED_5 = 0;delay(PWM);dis_off();}//10111111
  244. }
  245. /*********************************************************************************************/
  246. void displayHH12 (unsigned char d){ //第12列橫向顯示程序 11111000
  247.         unsigned char i;
  248.         i = d & 0x01;
  249.         if(i == 0x01){P1M1 = 0x17;LED_6 = 0;delay(PWM);dis_off();}//00010111
  250.         i = d & 0x02;
  251.         if(i == 0x02){P2M1 = 0xfd;LED_6 = 0;delay(PWM);dis_off();}//11111101
  252.         i = d & 0x04;
  253.         if(i == 0x04){P1M1 = 0x53;LED_6 = 0;delay(PWM);dis_off();}//01010011
  254.         i = d & 0x08;
  255.         if(i == 0x08){P1M1 = 0x56;LED_6 = 0;delay(PWM);dis_off();}//01010110
  256.         i = d & 0x10;
  257.         if(i == 0x10){P2M1 = 0xbf;LED_6 = 0;delay(PWM);dis_off();}//10111111
  258. }
  259. /*********************************************************************************************/
  260. void displayHH13 (unsigned char d){ //第13列橫向顯示程序 11111000
  261.         unsigned char i;
  262.         i = d & 0x01;
  263.         if(i == 0x01){P2M1 = 0x7f;LED_11 = 0;delay(PWM);dis_off();}//01111111
  264.         i = d & 0x02;                                                                                                                                                                                  
  265.         if(i == 0x02){P2M1 = 0xef;LED_11 = 0;delay(PWM);dis_off();}//11101111
  266.         i = d & 0x04;
  267.         if(i == 0x04){P2M1 = 0xfb;LED_11 = 0;delay(PWM);dis_off();}//11111011
  268.         i = d & 0x08;
  269.         if(i == 0x08){P2M1 = 0xfe;LED_11 = 0;delay(PWM);dis_off();}//11111110
  270.         i = d & 0x10;
  271.         if(i == 0x10){P1M1 = 0x55;LED_11 = 0;delay(PWM);dis_off();}//01010101
  272. }
  273. /*********************************************************************************************/
  274. void displayHH14 (unsigned char d){ //第14列橫向顯示程序 11111000
  275.         unsigned char i;
  276.         i = d & 0x01;
  277.         if(i == 0x01){P2M1 = 0x7f;LED_12 = 0;delay(PWM);dis_off();}//01111111
  278.         i = d & 0x02;                                                                                                                                                                                  
  279.         if(i == 0x02){P2M1 = 0xef;LED_12 = 0;delay(PWM);dis_off();}//11101111
  280.         i = d & 0x04;
  281.         if(i == 0x04){P2M1 = 0xfb;LED_12 = 0;delay(PWM);dis_off();}//11111011
  282.         i = d & 0x08;
  283.         if(i == 0x08){P2M1 = 0xfe;LED_12 = 0;delay(PWM);dis_off();}//11111110
  284.         i = d & 0x10;
  285.         if(i == 0x10){P1M1 = 0x55;LED_12 = 0;delay(PWM);dis_off();}//01010101
  286. }
  287. /*********************************************************************************************/
  288. void displayHH15 (unsigned char d){ //第15列橫向顯示程序 11111000
  289.         unsigned char i;
  290.         i = d & 0x01;
  291.         if(i == 0x01){P2M1 = 0x7f;LED_13 = 0;delay(PWM);dis_off();}//01111111
  292.         i = d & 0x02;                                                                                                                                                                                  
  293.         if(i == 0x02){P2M1 = 0xef;LED_13 = 0;delay(PWM);dis_off();}//11101111
  294.         i = d & 0x04;
  295.         if(i == 0x04){P2M1 = 0xfb;LED_13 = 0;delay(PWM);dis_off();}//11111011
  296.         i = d & 0x08;
  297.         if(i == 0x08){P2M1 = 0xfe;LED_13 = 0;delay(PWM);dis_off();}//11111110
  298.         i = d & 0x10;
  299.         if(i == 0x10){P1M1 = 0x55;LED_13 = 0;delay(PWM);dis_off();}//01010101
  300. }
  301. /*********************************************************************************************/
  302. void displayHH16 (unsigned char d){ //第16列橫向顯示程序 11111000
  303.         unsigned char i;
  304.         i = d & 0x01;
  305.         if(i == 0x01){P2M1 = 0x7f;LED_14 = 0;delay(PWM);dis_off();}//01111111
  306.         i = d & 0x02;                                                                                                                                                                                  
  307.         if(i == 0x02){P2M1 = 0xef;LED_14 = 0;delay(PWM);dis_off();}//11101111
  308.         i = d & 0x04;
  309.         if(i == 0x04){P2M1 = 0xfb;LED_14 = 0;delay(PWM);dis_off();}//11111011
  310.         i = d & 0x08;
  311.         if(i == 0x08){P2M1 = 0xfe;LED_14 = 0;delay(PWM);dis_off();}//11111110
  312.         i = d & 0x10;
  313.         if(i == 0x10){P1M1 = 0x55;LED_14 = 0;delay(PWM);dis_off();}//01010101
  314. }
  315. /*********************************************************************************************/
  316. void displayHH17 (unsigned char d){ //第17列橫向顯示程序 11111000
  317.         unsigned char i;
  318.         i = d & 0x01;
  319.         if(i == 0x01){P2M1 = 0x7f;LED_15 = 0;delay(PWM);dis_off();}//01111111
  320.         i = d & 0x02;                                                                                                                                                                                  
  321.         if(i == 0x02){P2M1 = 0xef;LED_15 = 0;delay(PWM);dis_off();}//11101111
  322.         i = d & 0x04;
  323.         if(i == 0x04){P2M1 = 0xfb;LED_15 = 0;delay(PWM);dis_off();}//11111011
  324.         i = d & 0x08;
  325.         if(i == 0x08){P2M1 = 0xfe;LED_15 = 0;delay(PWM);dis_off();}//11111110
  326.         i = d & 0x10;
  327.         if(i == 0x10){P1M1 = 0x55;LED_15 = 0;delay(PWM);dis_off();}//01010101
  328. }
  329. /*********************************************************************************************/
  330. void displayHH18 (unsigned char d){ //第18列橫向顯示程序 11111000
  331.         unsigned char i;
  332.         i = d & 0x01;
  333.         if(i == 0x01){P2M1 = 0x7f;LED_16 = 0;delay(PWM);dis_off();}//01111111
  334.         i = d & 0x02;                                                                                                                                                                                  
  335.         if(i == 0x02){P2M1 = 0xef;LED_16 = 0;delay(PWM);dis_off();}//11101111
  336.         i = d & 0x04;
  337.         if(i == 0x04){P2M1 = 0xfb;LED_16 = 0;delay(PWM);dis_off();}//11111011
  338.         i = d & 0x08;
  339.         if(i == 0x08){P2M1 = 0xfe;LED_16 = 0;delay(PWM);dis_off();}//11111110
  340.         i = d & 0x10;
  341.         if(i == 0x10){P1M1 = 0x55;LED_16 = 0;delay(PWM);dis_off();}//01010101
  342. }
  343. /*********************************************************************************************/
  344. void displayHH19 (unsigned char d){ //第19列橫向顯示程序 11111000 (符號)
  345.         unsigned char i;
  346.         i = d & 0x01;
  347.         if(i == 0x01){P2M1 = 0x7f;LED_17 = 0;delay(PWM);dis_off();}//11101111
  348.         i = d & 0x02;
  349.         if(i == 0x02){P2M1 = 0xef;LED_17 = 0;delay(PWM);dis_off();}//11111011
  350. }
  351. /*********************************************************************************************/
  352. void displayHH20 (unsigned char d){ //第20列橫向顯示程序 11111000
  353.         unsigned char i;
  354.         i = d & 0x01;
  355.         if(i == 0x01){P2M1 = 0xf7;LED_11 = 0;delay(PWM);dis_off();}//11110111
  356.         i = d & 0x02;
  357.         if(i == 0x02){P2M1 = 0xdf;LED_11 = 0;delay(PWM);dis_off();}//11011111
  358.         i = d & 0x04;
  359.         if(i == 0x04){P3M1 = 0x28;LED_11 = 0;delay(PWM);dis_off();}//00101000
  360.         i = d & 0x08;
  361.         if(i == 0x08){P1M1 = 0x47;LED_11 = 0;delay(PWM);dis_off();}//01000111
  362.         i = d & 0x10;
  363.         if(i == 0x10){P5M1 = 0x00;LED_11 = 0;delay(PWM);dis_off();}//00000000
  364. }
  365. /*********************************************************************************************/
  366. void displayHH21 (unsigned char d){ //第21列橫向顯示程序 11111000
  367.         unsigned char i;
  368.         i = d & 0x01;
  369.         if(i == 0x01){P2M1 = 0xf7;LED_12 = 0;delay(PWM);dis_off();}//11110111
  370.         i = d & 0x02;
  371.         if(i == 0x02){P2M1 = 0xdf;LED_12 = 0;delay(PWM);dis_off();}//11011111
  372.         i = d & 0x04;
  373.         if(i == 0x04){P3M1 = 0x28;LED_12 = 0;delay(PWM);dis_off();}//00101000
  374.         i = d & 0x08;
  375.         if(i == 0x08){P1M1 = 0x47;LED_12 = 0;delay(PWM);dis_off();}//01000111
  376.         i = d & 0x10;
  377.         if(i == 0x10){P5M1 = 0x00;LED_12 = 0;delay(PWM);dis_off();}//00000000
  378. }
  379. /*********************************************************************************************/
  380. void displayHH22 (unsigned char d){ //第22列橫向顯示程序 11111000
  381.         unsigned char i;
  382.         i = d & 0x01;
  383.         if(i == 0x01){P2M1 = 0xf7;LED_13 = 0;delay(PWM);dis_off();}//11110111
  384.         i = d & 0x02;
  385.         if(i == 0x02){P2M1 = 0xdf;LED_13 = 0;delay(PWM);dis_off();}//11011111
  386.         i = d & 0x04;
  387.         if(i == 0x04){P3M1 = 0x28;LED_13 = 0;delay(PWM);dis_off();}//00101000
  388.         i = d & 0x08;
  389.         if(i == 0x08){P1M1 = 0x47;LED_13 = 0;delay(PWM);dis_off();}//01000111
  390.         i = d & 0x10;
  391.         if(i == 0x10){P5M1 = 0x00;LED_13 = 0;delay(PWM);dis_off();}//00000000
  392. }
  393. /*********************************************************************************************/
  394. void displayHH23 (unsigned char d){ //第23列橫向顯示程序 11111000
  395.         unsigned char i;
  396.         i = d & 0x01;
  397.         if(i == 0x01){P2M1 = 0xf7;LED_14 = 0;delay(PWM);dis_off();}//11110111
  398.         i = d & 0x02;
  399.         if(i == 0x02){P2M1 = 0xdf;LED_14 = 0;delay(PWM);dis_off();}//11011111
  400.         i = d & 0x04;
  401.         if(i == 0x04){P3M1 = 0x28;LED_14 = 0;delay(PWM);dis_off();}//00101000
  402.         i = d & 0x08;
  403.         if(i == 0x08){P1M1 = 0x47;LED_14 = 0;delay(PWM);dis_off();}//01000111
  404.         i = d & 0x10;
  405.         if(i == 0x10){P5M1 = 0x00;LED_14 = 0;delay(PWM);dis_off();}//00000000
  406. }
  407. /*********************************************************************************************/
  408. void displayHH24 (unsigned char d){ //第24列橫向顯示程序 11111000
  409.         unsigned char i;
  410.         i = d & 0x01;
  411.         if(i == 0x01){P2M1 = 0xf7;LED_15 = 0;delay(PWM);dis_off();}//11110111
  412.         i = d & 0x02;
  413.         if(i == 0x02){P2M1 = 0xdf;LED_15 = 0;delay(PWM);dis_off();}//11011111
  414.         i = d & 0x04;
  415.         if(i == 0x04){P3M1 = 0x28;LED_15 = 0;delay(PWM);dis_off();}//00101000
  416.         i = d & 0x08;
  417.         if(i == 0x08){P1M1 = 0x47;LED_15 = 0;delay(PWM);dis_off();}//01000111
  418.         i = d & 0x10;
  419.         if(i == 0x10){P5M1 = 0x00;LED_15 = 0;delay(PWM);dis_off();}//00000000
  420. }
  421. /*********************************************************************************************/
  422. void displayHH25 (unsigned char d){ //第25列橫向顯示程序 11111000
  423.         unsigned char i;
  424.         i = d & 0x01;
  425.         if(i == 0x01){P2M1 = 0xf7;LED_16 = 0;delay(PWM);dis_off();}//11110111
  426.         i = d & 0x02;
  427.         if(i == 0x02){P2M1 = 0xdf;LED_16 = 0;delay(PWM);dis_off();}//11011111
  428.         i = d & 0x04;
  429.         if(i == 0x04){P3M1 = 0x28;LED_16 = 0;delay(PWM);dis_off();}//00101000
  430.         i = d & 0x08;
  431.         if(i == 0x08){P1M1 = 0x47;LED_16 = 0;delay(PWM);dis_off();}//01000111
  432.         i = d & 0x10;
  433.         if(i == 0x10){P5M1 = 0x00;LED_16 = 0;delay(PWM);dis_off();}//00000000
  434. }
  435. /*********************************************************************************************/
  436. void displayHH26 (unsigned char d){ //第26列橫向顯示程序 11111000
  437.         unsigned char i;
  438.         i = d & 0x01;
  439.         if(i == 0x01){P2M1 = 0xf7;LED_17 = 0;delay(PWM);dis_off();}//11110111
  440.         i = d & 0x02;
  441.         if(i == 0x02){P2M1 = 0xdf;LED_17 = 0;delay(PWM);dis_off();}//11011111
  442.         i = d & 0x04;
  443.         if(i == 0x04){P3M1 = 0x28;LED_17 = 0;delay(PWM);dis_off();}//00101000
  444.         i = d & 0x08;
  445.         if(i == 0x08){P1M1 = 0x47;LED_17 = 0;delay(PWM);dis_off();}//01000111
  446.         i = d & 0x10;
  447.         if(i == 0x10){P5M1 = 0x00;LED_17 = 0;delay(PWM);dis_off();}//00000000
  448. }
  449. /*********************************************************************************************/
  450. void displayHH27 (unsigned char d){ //第27列橫向顯示程序 11111000 (冒號)
  451.         unsigned char i;
  452.         i = d & 0x08;
  453.         if(i == 0x08){P2M1 = 0xfe;LED_17 = 0;delay(PWM);dis_off();}//11111110
  454.         i = d & 0x10;
  455.         if(i == 0x10){P1M1 = 0x55;LED_17 = 0;delay(PWM);dis_off();}//01010101
  456. }
  457. /*********************************************************************************************/
  458. void diplay_data (unsigned char l,unsigned char d){
  459.                 switch (l){//顯示的列位置               
  460.                                 case 1://                       
  461.                                         displayHH1(d); //將顯示數據送入               
  462.                                         break;//               
  463.                                 case 2://                       
  464.                                         displayHH2(d); //將顯示數據送入               
  465.                                         break;//               
  466.                                 case 3://                       
  467.                                         displayHH3(d); //將顯示數據送入               
  468.                                         break;//               
  469.                                 case 4://                       
  470.                                         displayHH4(d); //將顯示數據送入               
  471.                                         break;//               
  472.                                 case 5://                       
  473.                                         displayHH5(d); //將顯示數據送入               
  474.                                         break;//               
  475.                                 case 6://                       
  476.                                         displayHH6(d); //將顯示數據送入               
  477.                                         break;//               
  478.                                 case 7://                       
  479.                                         displayHH7(d); //將顯示數據送入               
  480.                                         break;//               
  481.                                 case 8://                       
  482.                                         displayHH8(d); //將顯示數據送入               
  483.                                         break;//               
  484.                                 case 9://                       
  485.                                         displayHH9(d); //將顯示數據送入               
  486.                                         break;//               
  487.                                 case 10://                       
  488.                                         displayHH10(d); //將顯示數據送入               
  489.                                         break;//               
  490.                                 case 11://                       
  491.                                         displayHH11(d); //將顯示數據送入               
  492.                                         break;//               
  493.                                 case 12://                       
  494.                                         displayHH12(d); //將顯示數據送入               
  495.                                         break;//               
  496.                                 case 13://                       
  497.                                         displayHH13(d); //將顯示數據送入               
  498.                                         break;//               
  499.                                 case 14://                       
  500.                                         displayHH14(d); //將顯示數據送入               
  501.                                         break;//               
  502.                                 case 15://                       
  503.                                         displayHH15(d); //將顯示數據送入               
  504.                                         break;//               
  505.                                 case 16://                       
  506.                                         displayHH16(d); //將顯示數據送入               
  507.                                         break;//               
  508.                                 case 17://                       
  509.                                         displayHH17(d); //將顯示數據送入               
  510.                                         break;//               
  511.                                 case 18://                       
  512.                                         displayHH18(d); //將顯示數據送入               
  513.                                         break;//               
  514.                                 case 19://                       
  515.                                         displayHH19(d); //將顯示數據送入               
  516.                                         break;//               
  517.                                 case 20://                       
  518.                                         displayHH20(d); //將顯示數據送入               
  519.                                         break;//               
  520.                                 case 21://                       
  521.                                         displayHH21(d); //將顯示數據送入               
  522.                                         break;//               
  523.                                 case 22://                       
  524.                                         displayHH22(d); //將顯示數據送入               
  525.                                         break;//               
  526.                                 case 23://                       
  527.                                         displayHH23(d); //將顯示數據送入               
  528.                                         break;//               
  529.                                 case 24://                       
  530.                                         displayHH24(d); //將顯示數據送入               
  531.                                         break;//               
  532.                                 case 25://                       
  533.                                         displayHH25(d); //將顯示數據送入               
  534.                                         break;//               
  535.                                 case 26://                       
  536.                                         displayHH26(d); //將顯示數據送入               
  537.                                         break;//               
  538.                                 case 27://                       
  539.                                         displayHH27(d); //將顯示數據送入               
  540.                                         break;//               
  541.                 }
  542. }
  543. /*********************************************************************************************/
  544. void init (void){ //上電初始化
  545.         P1M0 = P1M0SET;
  546.         P2M0 = P2M0SET;
  547.         P3M0 = P3M0SET;
  548.         P5M0 = P5M0SET;
  549.         dis_off();
  550.         PWM = LI;
  551.         TMOD = 0x01;         // 定時/計數器0,1工作于方式1   
  552.     TH0 = 0x4c;          // 預置產生50ms時基信號   
  553.     TL0 = 0x00;   
  554.     EA = 1;              // 開總中斷   
  555.     ET0 = 1;             // 定時/計數器0允許中斷   
  556.     TR0 = 1;             // 開閉定時/計數器0   
  557. }
  558. /*********************************************************************************************/
  559. void main (void){ //主程序
  560.         unsigned char l;
  561.         init();
  562.         while (1){
  563.                 if (TIME_HH/10==0){
  564.                 for(l=1;l<4;l++)
  565.                         diplay_data (l,0);
  566.                 }else{
  567.                 for(l=1;l<4;l++)
  568.                         diplay_data (l,NUM[TIME_HH/10*3+l-1]);}//*3是字形寬度+列數變量-列數
  569.                 for(l=4;l<7;l++)
  570.                         diplay_data (l,NUM[TIME_HH%10*3+l-4]);
  571.                         if(PD){
  572.                         }else{
  573.                                 diplay_data (27,0x18);}
  574.                 for(l=7;l<10;l++)
  575.                         diplay_data (l,NUM[TIME_MM/10*3+l-7]);
  576.                 for(l=10;l<13;l++)
  577.                         diplay_data (l,NUM[TIME_MM%10*3+l-10]);
  578.                 for(l=13;l<16;l++)
  579.                         diplay_data (l,NUM[TIME_SS/10*3+l-13]);
  580.                 for(l=16;l<19;l++)
  581.                         diplay_data (l,NUM[TIME_SS%10*3+l-16]);
  582.                 for(l=20;l<27;l++)
  583.                         diplay_data (l,Week[(6-1)*7+l-20]);
  584. }}       
  585. /**********************************************************************************************/       
  586. void tiem0(void) interrupt 1{   // T/C0中斷服務程序(產生50ms時基信號)   
  587.     cou++;                      // 軟計數器加1   
  588.     if(cou > 19){                 // 計數值到50(0.5s)   
  589.         cou = 0;               // 軟計數器清零   
  590.                 PD =~ PD;                                //秒點閃爍
  591.                 hs++;
  592.         if(hs > 1){                 // 計數值到2(1s)   
  593.                 hs = 0;                                                // 半秒計數器清零
  594.                 TIME_SS++;                 // 秒計數器加1(進位10ms*100=1s)   
  595.         if(TIME_SS > 59){          // 秒計數值到60   
  596.            
  597.             TIME_SS = 0;           // 秒計數器清零   
  598.             TIME_MM++;             // 分計數器加1(進位60s=1m)  
  599.             if(TIME_MM > 59){      // 分計數到60   
  600.                 TIME_MM = 0;       // 分計數器清零   
  601.                 TIME_HH++;         // 時計數器加1(進位60m=1h)   
  602.                 if(TIME_HH > 23){  // 時計數到23   
  603.                     TIME_HH = 0;   // 時計數器清零
  604.                                 }  
  605.                                 }  
  606.             }   
  607.         }   
  608.     }   
  609.     TH0 = 0x4c;                // 重置定時常數   
  610. //    TL0 = 0xb0;   
  611. }
復制代碼


回復

使用道具 舉報

ID:78714 發表于 2015-8-24 18:52 | 顯示全部樓層


試著貼一下視頻
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久精品国产久精国产 | 国产精品久久久久久久久久久免费看 | 国产成人精品综合 | 国产日韩欧美在线 | 国产一区二区三区久久久久久久久 | 美女国产一区 | 久久一 | 国产精品免费大片 | 欧美精品久久久 | 伊人狠狠操 | 91九色视频 | 久久久久久国产精品免费免费男同 | 中文日韩字幕 | 精品国产一区二区久久 | 成人在线视频网 | 久久黄色网 | 日本精品裸体写真集在线观看 | 午夜精品久久久久久久久久久久 | 欧美另类视频在线 | 精品国产一区二区三区久久 | 免费一级做a爰片久久毛片潮喷 | av在线免费观看网站 | 中文字幕在线观看www | 粉嫩一区二区三区性色av | 一区二区三区四区av | av中文字幕在线 | 日韩免费看视频 | 91亚洲精| 久久久久久久一区二区 | www.国产精 | 欧美亚洲一区二区三区 | 91视频91| 国产不卡一区 | 精品久久久久一区二区国产 | 中国一级特黄真人毛片 | 天天天堂| 国产色 | 国产精品一区二区三 | 激情综合五月天 | 99免费视频| 国产乱精品一区二区三区 |