找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

帖子
查看: 7815|回復(fù): 3
收起左側(cè)

一個(gè)32位搖搖棒程序+原理圖

[復(fù)制鏈接]
ID:188897 發(fā)表于 2017-4-12 16:59 | 顯示全部樓層 |閱讀模式
32位搖搖棒程序原理圖:

搖搖棒原理圖

搖搖棒原理圖


32位搖搖棒程序:
  1. #include <STC11F60XE.h>
  2. /*********外部接口定義**********/
  3. #define uchar unsigned char
  4. #define uint unsigned int    //宏定義
  5. #define out P1        //數(shù)據(jù)輸出端口
  6. sbit led1=P3^0;        //第1組LED
  7. sbit led2=P3^1;        //第2組LED
  8. sbit led3=P3^3;        //第3組LED
  9. sbit led4=P3^4;        //第4組LED
  10. sbit key1=P3^5;         //按鍵輸入
  11. sbit p3_2=P3^2;
  12. uchar KY,num;      //KY作用在后面說(shuō)明
  13. uchar BUFF;                                   //緩存
  14. /*********全局變量定義**********/
  15. unsigned long int TimeCount=0;
  16. unsigned int         DelayN=80,                //延時(shí)臨時(shí)計(jì)數(shù)
  17.                                 DelayTime=80;        //每次延時(shí)的周期個(gè)數(shù)
  18. unsigned char key,keyy;               
  19. /**********************************************/
  20. void delay(unsigned char n);
  21. void DelayMs(void);
  22. /*******************************************/

  23. unsigned char code text0[]={


  24. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*" ",0*/

  25. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0xB7,0xBB,0xB7,0xBB,0xB3,0xBB,0xB4,0xBB,0xB5,0xBB,0xB7,0xBB,0xB7,0xBB,0xB7,0xBB,0x07,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*"自",1*/

  26. 0xBF,0xBF,0xBE,0xDF,0x39,0xE0,0xFF,0xDF,0xEF,0xBF,0xEF,0xBF,0x6D,0xB0,0x6D,0xB7,0x6D,0xB7,0x01,0xB7,0x6E,0xB7,0x6E,0xB7,0x6E,0xB0,0xEF,0xBF,0xEF,0xBF,0xFF,0xFF,/*"適",2*/

  27. 0xFF,0xBF,0xFF,0xC7,0x03,0xF8,0xBB,0xDF,0x7B,0xDF,0xFB,0xD0,0xEB,0xDB,0xDA,0xDF,0x39,0xDC,0x7B,0xCF,0xFB,0xD3,0xFB,0xDC,0x1B,0xDF,0xBB,0xDF,0xFF,0xDF,0xFF,0xFF,/*"應(yīng)",3*/

  28. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*" ",4*/

  29. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*" ",5*/

  30. 0xEF,0xFB,0xEF,0xBB,0xEF,0x7D,0x00,0x80,0x6F,0xFF,0xAF,0xFD,0x75,0x05,0x8D,0xBD,0xB9,0xBD,0xA5,0xBD,0x3D,0x80,0x9E,0xBD,0xAE,0xBD,0xB6,0xBD,0xFF,0x05,0xFF,0xFF,/*"搖",6*/

  31. 0xEF,0xFB,0xEF,0xBB,0xEF,0x7D,0x00,0x80,0x6F,0xFF,0xAF,0xFD,0x75,0x05,0x8D,0xBD,0xB9,0xBD,0xA5,0xBD,0x3D,0x80,0x9E,0xBD,0xAE,0xBD,0xB6,0xBD,0xFF,0x05,0xFF,0xFF,/*"搖",7*/

  32. 0xEF,0xFC,0x2F,0xFF,0x00,0x00,0xAF,0xFF,0x6F,0xFD,0xBB,0xF5,0xAB,0xF6,0x2B,0xF5,0x8B,0xF5,0xA0,0x00,0x2B,0xF5,0xAB,0xF4,0xAB,0xF6,0xBB,0xF5,0xBF,0xFD,0xFF,0xFF,/*"棒",8*/

  33. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*" ",9*/



  34. };

  35. unsigned char code text1[]={
  36. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*" ",0*/

  37. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*" ",1*/

  38. 0xF7,0xFD,0xF7,0xFE,0x76,0xFF,0x31,0x00,0x57,0xFF,0xE7,0x7C,0xFF,0xBF,0x01,0xCF,0x7D,0xF0,0x7D,0xFF,0x7D,0xFF,0x7D,0x80,0x01,0x7F,0xFF,0x7F,0xFF,0x0F,0xFF,0xFF,/*"祝",2*/

  39. 0x7F,0xFF,0xBF,0xFF,0x0F,0x80,0xD3,0xFF,0xBC,0xEF,0xDF,0xF3,0x67,0xFC,0xF0,0xDE,0xF5,0xBF,0x17,0xC0,0xF7,0xFF,0x77,0xFF,0xD7,0xFC,0xE3,0xE3,0xF7,0xF7,0xFF,0xFF,/*"你",3*/

  40. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*" ",4*/

  41. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*" ",5*/

  42. 0xFF,0xFF,0xBF,0x7F,0xBD,0xBF,0xBD,0xDF,0xBD,0xEF,0xBD,0xF7,0xBD,0xF9,0x01,0xFE,0xBD,0xFD,0xBD,0xFB,0xBD,0xF7,0xBD,0xEF,0xBD,0xCF,0xBD,0x9F,0xBF,0xDF,0xFF,0xFF,/*"天",6*/

  43. 0xFF,0xFF,0xBF,0x7F,0xBD,0xBF,0xBD,0xDF,0xBD,0xEF,0xBD,0xF7,0xBD,0xF9,0x01,0xFE,0xBD,0xFD,0xBD,0xFB,0xBD,0xF7,0xBD,0xEF,0xBD,0xCF,0xBD,0x9F,0xBF,0xDF,0xFF,0xFF,/*"天",7*/

  44. 0xBF,0xFF,0xBD,0xBF,0xBD,0xDF,0xBD,0xEF,0xBD,0xF3,0x01,0xFC,0xBD,0xFF,0xBD,0xFF,0xBD,0xFF,0xBD,0xFF,0x01,0x80,0xBD,0xFF,0xBD,0xFF,0xBD,0xFF,0xBD,0xFF,0xFF,0xFF,/*"開",8*/

  45. 0xFF,0xFB,0x7F,0xFC,0xFF,0xFF,0xFF,0xFF,0x0F,0xC0,0xFF,0xBF,0xFE,0xBF,0xFD,0xBF,0xE3,0xBF,0xF7,0xBF,0xFF,0xBF,0xBF,0x87,0x7F,0xFF,0xFF,0xF8,0xFF,0xFD,0xFF,0xFF,/*"心",9*/

  46. };
  47. unsigned char code text2[]={

  48. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF9,0xFF,0xFF,0x9F,0xF9,0xFF,0xFF,0x9F,0xF9,0xFF,0xFF,0x9F,0x01,0x00,0x00,0x80,0x01,0x00,0x00,0x80,0xF9,0xFF,0xFF,0x9F,
  49. 0xF9,0xFF,0xFF,0x9F,0xF9,0xFF,0xFF,0x9F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0x01,0xFE,0xFF,
  50. 0x7F,0x00,0xF8,0xFF,0x3F,0x00,0xF0,0xFF,0x1F,0x00,0xE0,0xFF,0x0F,0x00,0xC0,0xFF,0x07,0x00,0x80,0xFF,0x03,0x00,0x00,0xFF,0x03,0x00,0x00,0xFF,0x03,0x00,0x00,0xFE,
  51. 0x03,0x00,0x00,0xFC,0x03,0x00,0x00,0xF8,0x07,0x00,0x00,0xF0,0x0F,0x00,0x00,0xE0,0x1F,0x00,0x00,0xE0,0x3F,0x00,0x00,0xC0,0x3F,0x00,0x00,0x80,0x1F,0x00,0x00,0xC0,
  52. 0x0F,0x00,0x00,0xE0,0x07,0x00,0x00,0xF0,0x03,0x00,0x00,0xF8,0x03,0x00,0x00,0xFC,0x03,0x00,0x00,0xFE,0x03,0x00,0x00,0xFF,0x07,0x00,0x80,0xFF,0x0F,0x00,0xC0,0xFF,
  53. 0x1F,0x00,0xE0,0xFF,0x3F,0x00,0xE0,0xFF,0xFF,0x00,0xF8,0xFF,0xFF,0x01,0xFC,0xFF,0xFF,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  54. 0x07,0x00,0x00,0xE0,0x07,0x00,0x00,0xC0,0x07,0x00,0x00,0xC0,0xFF,0xFF,0xFF,0xC7,0xFF,0xFF,0xFF,0xCF,0xFF,0xFF,0xFF,0xCF,0xFF,0xFF,0xFF,0xCF,0xFF,0xFF,0xFF,0xCF,
  55. 0xFF,0xFF,0xFF,0xCF,0xFF,0xFF,0xFF,0xCF,0xFF,0xFF,0xFF,0xCF,0xFF,0xFF,0xFF,0xC7,0x07,0x00,0x00,0xC0,0x07,0x00,0x00,0xC0,0x07,0x00,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,/*"未命名文件",0*/


  56. };
  57. /***********n(us)延時(shí)子程序***************/
  58. void DelayUs(uint N)
  59. {
  60. uint x;
  61. for(x=0; x<=N;x++);
  62. }
  63. /******************************************/
  64. void main()
  65. {        
  66.         AUXR=0x80;        
  67.         CLK_DIV=1;        
  68.         EX0=1;        //開放外部中斷0
  69.         IT0=1;        //中斷0為邊沿觸發(fā)方式
  70.         IP=0x02;        //設(shè)置中斷優(yōu)先級(jí)
  71.         TMOD=0x02;        //定時(shí)器0方式2,8位重裝載
  72.         TH0=0x80;        //設(shè)定定時(shí)器初值
  73.         TL0=0x80;                  
  74.         KY=0;
  75.         EA=1;        //開放中斷
  76.         ET0=1;        //開放定時(shí)器0中斷
  77.         TR0=1;        //啟動(dòng)定時(shí)器0,開始計(jì)時(shí)*/
  78.         key=0;        //初始化顯示第一組文字
  79.         keyy=0;
  80.         P1M0=0x55;        //0101 0101        /P1.0  P1 .2 P1.4 P1.6推挽輸出
  81.     P1M1=0xAA;

  82.         while(1){//等待中斷
  83.            
  84.         if(key1==0){        //有鍵按下
  85.          DelayUs(50);
  86.          if(key1==0){                        
  87.                 key++;                                //更換下一幅圖片               
  88.                 if(key>2) key=0;        //圖片循環(huán)顯示 根據(jù)顯示的組數(shù)來(lái)定義 這里有9組 所以就要keyy>9
  89.                 while(key1==0);                //等待按鍵釋放                        
  90.                 }
  91.                 }
  92.         if(num>10) //每中斷10次切換
  93.                 {
  94.                 keyy++;
  95.                 num=0;
  96.                 }     
  97.         if(keyy>2)keyy=0;        //圖片循環(huán)顯示 根據(jù)顯示的組數(shù)來(lái)定義 這里有9組 所以就要keyy>9
  98.         }        
  99. }
  100.    
  101. /*********文字顯示子程序**********/

  102. void display_word(unsigned char code *text)
  103. {
  104.    unsigned        char i,j=2;                        //j為圖片起始位置 3 為第3個(gè)開始是圖片 如果要顯示高時(shí)32的大字 也屬于圖片格式
  105.     DelayUs(6400);        
  106.         
  107.         for(i=0;i<64;i++)
  108.         {
  109.                  
  110.         P3M0=0x00;                        //0000 0000        //P3.0推挽輸出 P3 .1 P3.3 P3.4輸入高阻
  111.             P3M1=0x1B;
  112.                 if((key>=j)||(keyy>=j))
  113.                 BUFF=(*(text+i*4+3));
  114.                 else                        
  115.                 BUFF=(*(text+128+i*2+1));
  116.                 led4=0;
  117.                 P1=~BUFF>>1;
  118.                 P3M0=0x10;                        //0001 0000        //P3.4推挽輸出 P3 .0 P3.3 P3.1輸入高阻
  119.             P3M1=0x0B;          //0000 1011
  120.                  delay(1);
  121.                 P3M0=0x00;                        //0000 0000        //P3.0推挽輸出 P3 .1 P3.3 P3.4輸入高阻
  122.             P3M1=0x1B;                         //0001 1011
  123.                 led4=1;
  124.              P1=BUFF;             //01010101  1357
  125.                 P3M0=0x10;                        //0001 0000        //P3.4推挽輸出 P3 .0 P3.3 P3.1輸入高阻
  126.             P3M1=0x0B;          //0000 1011
  127.                  delay(1);
  128.                 P3M0=0x00;                        //0000 0000        //P3.0推挽輸出 P3 .1 P3.3 P3.4輸入高阻
  129.             P3M1=0x1B;                         //0001 1011
  130.                 if((key>=j)||(keyy>=j))
  131.                 BUFF=(*(text+i*4+2));
  132.                 else
  133.                 BUFF=(*(text+128+i*2));
  134.                 led3=0;
  135.                 P1=~BUFF>>1;
  136.                 P3M0=0x08;                        //0000 1000        //P3.3推挽輸出 P3 .0 P3.1 P3.4輸入高阻
  137.             P3M1=0x13;          //0001 0011
  138.                 delay(1);
  139.                 P3M0=0x00;                        //0000 0000        //P3.0推挽輸出 P3 .1 P3.3 P3.4輸入高阻
  140.             P3M1=0x1B;                         //0001 1011
  141.                 led3=1;
  142.              P1=BUFF;             //01010101  1357
  143.                 P3M0=0x08;                        //0000 1000        //P3.3推挽輸出 P3 .0 P3.1 P3.4輸入高阻
  144.             P3M1=0x13;          //0001 0011
  145.                  delay(1);
  146.                 P3M0=0x00;                        //0000 0000        //P3.0推挽輸出 P3 .1 P3.3 P3.4輸入高阻
  147.             P3M1=0x1B;
  148.                 if((key>=j)||(keyy>=j))
  149.                 BUFF=(*(text+i*4+1));
  150.                 else
  151.                 BUFF=(*(text+i*2+1));
  152.                 led2=0;
  153.             P1=~BUFF>>1;
  154.                 P3M0=0x02;                        //0000 0010        //P3.1推挽輸出 P3 .0 P3.3 P3.4輸入高阻
  155.             P3M1=0x19;                        //0001 1001
  156.                 delay(1);
  157.                 P3M0=0x00;                        //0000 0000        //P3.0推挽輸出 P3 .1 P3.3 P3.4輸入高阻
  158.             P3M1=0x1B;                         //0001 1011
  159.                 led2=1;      
  160.              P1=BUFF;            //01010101  1357
  161.                 P3M0=0x02;                        //0000 0010        //P3.1推挽輸出 P3 .0 P3.3 P3.4輸入高阻
  162.             P3M1=0x19;                        //0001 1001
  163.                  delay(1);
  164.                 P3M0=0x00;                        //0000 0000        //P3.0推挽輸出 P3 .1 P3.3 P3.4輸入高阻
  165.             P3M1=0x1B;                         //0001
  166.                 if((key>=j)||(keyy>=j))
  167.                 BUFF=(*(text+i*4));
  168.                 else
  169.                 BUFF=(*(text+i*2));
  170.                 led1=0;
  171.                 P1=~BUFF>>1;
  172.                 P3M0=0x01;                        //0000 0001        //P3.0推挽輸出 P3 .1 P3.3 P3.4輸入高阻
  173.             P3M1=0x1A;                         //0001 1010
  174.                 delay(1);
  175.             P3M0=0x00;                        //0000 0000        //P3.0推挽輸出 P3 .1 P3.3 P3.4輸入高阻
  176.             P3M1=0x1B;                         //0001 1011
  177.                 led1=1;                       
  178.              P1=BUFF;            //01010101  1357
  179.                 P3M0=0x01;                        //0000 0001        //P3.0推挽輸出 P3 .1 P3.3 P3.4輸入高阻
  180.             P3M1=0x1A;                         //0001 1010
  181.                  delay(1);

  182. } }
  183. /*********顯示內(nèi)容選擇子程序**********/
  184. void display(unsigned char t)
  185. {        keyy=0;
  186.         switch (t){                //通過(guò)按鍵選擇顯示內(nèi)容
  187.                 case 0:        {display_word(text0);}break;
  188.                 case 1:        {display_word(text1);}break;
  189.                 case 2:        {display_word(text2);}break;
  190. //                case 3:        {display_word(text3);}break;
  191. //                case 4:        {display_word(text4);}break;
  192. //                case 5:        {display_word(text5);}break;
  193. //                case 6:        {display_word(text6);}break;
  194. //                case 7:        {display_word(text7);}break;
  195.         //        case 8:        {display_word(text8);}break;               
  196.         //        case 9:        {display_word(text9);}break;
  197.         //        case 10:{display_word(text10);}break;
  198.                 //default:{display_word(text1);}
  199.                
  200.                
  201.                 }}
  202. /*****************************************/
  203. void display1(unsigned char y)
  204. {
  205.         switch (y){                //通過(guò)按鍵選擇顯示內(nèi)容
  206.                 case 0:        {display_word(text0);}break;
  207.                 case 1:        {display_word(text1);}break;
  208.                 case 2:        {display_word(text2);}break;
  209. //                case 3:        {display_word(text3);}break;
  210. //                case 4:        {display_word(text4);}break;
  211. //                case 5:        {display_word(text5);}break;
  212. //                case 6:        {display_word(text6);}break;
  213. //                case 7:        {display_word(text7);}break;
  214.         //        case 8:        {display_word(text8);}break;
  215.         //        case 9:        {display_word(text9);}break;
  216.         //        case 10:{display_word(text10);}break;
  217.                 }
  218.                 }
  219. /***************************************/
  220. /*********延時(shí)子程序**********/
  221. void delay(unsigned char n)
  222. {
  223.         for(;n>0;n--){
  224.                 DelayN=DelayTime;
  225.                 while (DelayN);
  226.         }
  227. }
  228. /*********中斷子程序**********/
  229. void int0() interrupt 0        //使用外部中斷0
  230. {
  231. KY=~KY;
  232. if(KY==0)
  233. {                        
  234.         DelayTime=TimeCount/1580;        
  235.         TimeCount=0;        //延時(shí)周期計(jì)數(shù)清零
  236.         if(key==0)
  237.         {
  238.          num++;
  239.          display1(keyy);        //根據(jù)按鍵選擇循環(huán)顯示文字
  240.         }
  241.         else
  242.         {
  243.         display(key);        //根據(jù)按鍵選擇循環(huán)顯示文字
  244.         }
  245. }
  246. }
  247. void timer0() interrupt 1                //定時(shí)器0中斷子程序
  248. {
  249.         TimeCount++;
  250.         if (DelayN!=0)
  251.         DelayN--;
  252. }
復(fù)制代碼


回復(fù)

使用道具 舉報(bào)

ID:188983 發(fā)表于 2017-4-12 21:26 | 顯示全部樓層
您好,您有時(shí)間做單片機(jī)兼職嗎?如果有興趣加我QQ,我這里長(zhǎng)期需要編程兼職
回復(fù)

使用道具 舉報(bào)

ID:55655 發(fā)表于 2018-6-9 17:23 | 顯示全部樓層
燒進(jìn)去手都搖酸了就顯示幾下,圖都看不清是什么,就別提撩女神了
回復(fù)

使用道具 舉報(bào)

ID:978459 發(fā)表于 2022-4-12 10:24 來(lái)自觸屏版 | 顯示全部樓層
請(qǐng)問(wèn)led顯示模塊的原理是啥,如何通過(guò)八個(gè)io口驅(qū)動(dòng)32個(gè)led燈的
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表