欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 基于單片機(jī)+MAX7221芯片驅(qū)動(dòng)數(shù)碼管程序與Proteus仿真圖 [打印本頁]

作者: 1271930828    時(shí)間: 2021-6-3 11:53
標(biāo)題: 基于單片機(jī)+MAX7221芯片驅(qū)動(dòng)數(shù)碼管程序與Proteus仿真圖

我是用的是at89c51芯片,可以通過MAX7221芯片進(jìn)行數(shù)碼管驅(qū)動(dòng),實(shí)現(xiàn)三個(gè)引腳控制8位數(shù)碼管,驅(qū)動(dòng)函數(shù)已經(jīng)寫好,包括數(shù)碼管顯示函數(shù),可以隨心控制你想要輸出的數(shù)字




目前我設(shè)置為8位數(shù),自動(dòng)減1,具體功能可以自行加入




單片機(jī)源程序如下:
  1. #include <reg51.h>
  2. #include <intrins.h>
  3. sbit DIN = P2^0; //數(shù)據(jù)串出引腳
  4. sbit CS = P2^1; //片選端
  5. sbit CLK = P2^2; //移位時(shí)鐘端
  6. unsigned char disp_buff[10] = {0,1,2,3,4,5,6,7,8,9};//顯示的數(shù)字,數(shù)值為10的時(shí)候,顯示“-”
  7. // 延時(shí)函數(shù)
  8. void delayms(unsigned int x)
  9. {
  10. unsigned char i;
  11. while(x--)
  12. {
  13.   for(i = 0;i < 120;i++);
  14. }
  15. }

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

  31. for(i = 0;i < 8;i++)
  32. {
  33.    CLK = 0;   //
  34.   dat <<= 1;   //發(fā)送數(shù)據(jù)
  35.   DIN = CY;
  36.   CLK = 1;
  37.   _nop_();
  38.   _nop_();
  39.   CLK = 0;
  40. }
  41. CS = 1;      //CS上升沿,數(shù)據(jù)鎖存
  42. }

  43. //初始化函數(shù)
  44. void init_max7221(void)
  45. {write_data(0x09,0xff);    //編碼模式
  46. write_data(0x0a,0x07);    //亮度控制
  47. write_data(0x0b,0x07);    //掃描數(shù)碼管的位數(shù)
  48. write_data(0x0c,0x01);    //工作模式
  49.          write_data(0x0f,0x00);    //工作模式
  50. }
  51. void main(void)
  52. {
  53.         unsigned char Sec_1=0,Sec_2=0,Sec_3=0,Sec_4=0,Sec_5=0,Sec_6=0,Sec_7=0,Sec_8=0;
  54.   unsigned char i;
  55.         unsigned long int Sum=87654321;
  56. init_max7221();    // 初始化
  57. delayms(2);
  58.         while(1)
  59.         {
  60.                 Sum-=10;
  61.                 Sec_8 = Sum/10000000;
  62.                 Sec_7 = Sum%10000000/1000000;
  63.                 Sec_6 = Sum%1000000/100000;
  64.           Sec_5 = Sum%100000/10000;
  65.           Sec_4 = Sum%10000/1000;
  66.                 Sec_3 = Sum%1000/100;
  67.                 Sec_2 = Sum%100/10;
  68.                 Sec_1 = Sum%10;
  69.                
  70.    for(i = 0;i < 8;i++)
  71.          {         
  72.                  switch(i)
  73.                  {
  74.                          case 0:write_data(i+1,disp_buff[Sec_8]);break;
  75.                          case 1:write_data(i+1,disp_buff[Sec_7]);break;
  76.                          case 2:write_data(i+1,disp_buff[Sec_6]);break;
  77.                          case 3:write_data(i+1,disp_buff[Sec_5]);break;
  78.                          case 4:write_data(i+1,disp_buff[Sec_4]);break;
  79.                          case 5:write_data(i+1,disp_buff[Sec_3]);break;
  80.                          case 6:write_data(i+1,disp_buff[Sec_2]);break;
  81.                          case 7:write_data(i+1,disp_buff[Sec_1]);break;
  82.                         default:break;
  83.                  }
  84.    }
  85.         i=0;
  86. }

  87. }
復(fù)制代碼
全部資料51hei下載地址:
基于MAX7221驅(qū)動(dòng)數(shù)碼管.rar (50.71 KB, 下載次數(shù): 15)






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