標題: MAX7221 LED顯示驅動器單片機原理圖和程序 [打印本頁]

作者: maomao12    時間: 2017-5-14 21:38
標題: MAX7221 LED顯示驅動器單片機原理圖和程序


  1. //利用數(shù)碼管驅動芯片max7221實現(xiàn)8位數(shù)碼管顯示
  2. #include <reg51.h>
  3. #include <intrins.h>

  4. sbit DIN = P2^0;     //數(shù)據(jù)串出引腳
  5. sbit CS = P2^1;     //片選端
  6. sbit CLK = P2^2;    //移位時鐘端

  7. unsigned char disp_buff[8] = {2,0,1,0,10,2,10,9}; //顯示的數(shù)字,數(shù)值為10的時候,顯示“-”

  8. // 延時函數(shù)
  9. void delayms(unsigned int x)
  10. {
  11.   unsigned char i;
  12. while(x--)
  13. {
  14.    for(i = 0;i < 120;i++);
  15. }
  16. }

  17. //寫數(shù)據(jù)函數(shù)
  18. void write_data(unsigned char addr,unsigned char dat)
  19. {
  20.   unsigned char i;
  21. CS = 0;        // 先寫地址,片選置低,串行數(shù)據(jù)加載到移位寄存器
  22. for(i = 0;i < 8;i++)   //
  23. {
  24.    CLK = 0;     //時鐘上升沿數(shù)據(jù)移入內部移位寄存器
  25.   addr <<= 1;    //待發(fā)送的地址,每次左移一次,高位在前發(fā)送,
  26.   DIN = CY;    //數(shù)據(jù)移位后,如果有溢出,則可以從進位位CY中獲得溢出的數(shù)據(jù)位
  27.   CLK = 1;
  28.   _nop_();
  29.   _nop_();
  30.   CLK = 0;    //下降沿時數(shù)據(jù)從DOUT移出
  31. }
  32. for(i = 0;i < 8;i++)
  33. {
  34.    CLK = 0;   //
  35.   dat <<= 1;   //發(fā)送數(shù)據(jù)
  36.   DIN = CY;
  37.   CLK = 1;
  38.   _nop_();
  39.   _nop_();
  40.   CLK = 0;
  41. }
  42. CS = 1;      //CS上升沿,數(shù)據(jù)鎖存
  43. }

  44. //初始化函數(shù)
  45. void init_max7221(void)
  46. {
  47. write_data(0x09,0xff);    //編碼模式
  48. write_data(0x0a,0x07);    //亮度控制
  49. write_data(0x0b,0x07);    //掃描數(shù)碼管的位數(shù)
  50. write_data(0x0c,0x01);    //工作模式
  51. }

  52. void main(void)
  53. {
  54.   unsigned char i;
  55. init_max7221();    // 初始化
  56. delayms(2);
  57. for(i = 0;i < 8;i++)
  58. {
  59.    write_data(i+1,disp_buff[i]);   // 顯示8位
  60. }
  61. while(1);
  62. }

復制代碼








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