找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7045|回复: 10
打印 上一主题 下一主题
收起左侧

STC8A8K64S4A12单片机旋转摇摇棒 附带PCB+原理图+程序

  [复制链接]
跳转到指定楼层
楼主
STC11F02E内容较小 如果需要显示的图片多一点  可以改内存大的4E或者5E;
程序,步骤简单。
话不多出,附上图片

Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)


单片机源程序如下:
  1. #include "yyb.h"

  2. #define out P1        //数据输出端口

  3. sbit led1=P3^0;        //第1组LED
  4. sbit led2=P3^1;        //第2组LED
  5. sbit led3=P3^3;        //第3组LED
  6. sbit led4=P3^4;        //第4组LED
  7. sbit key1=P3^5;         //按键输入
  8. sbit p3_2=P3^2;
  9. uchar KY,num;      //KY作用在后面说明
  10. uchar BUFF;                                   //缓存
  11. /*********全局变量定义**********/
  12. unsigned long int TimeCount=0;
  13. unsigned int         DelayN=1,                //延时临时计数
  14.                                                         DelayTime=1;        //每次延时的周期个数
  15. unsigned char key,keyy;        

  16. void DelayUs(uint N)
  17. {
  18. uint x;
  19. for(x=0; x<=N;x++);
  20. }

  21. void display_word(unsigned char code *text)
  22. {
  23.    unsigned        char i,j=2;                       
  24.         
  25.     DelayUs(50);                        //因为第一第二半圈不会是完整的180   所以用延时来补偿形成一个完整的圆  可适当修改
  26.         
  27.         for(i=0;i<64;i++)                                         //第一半圈显示程序
  28.         {
  29.      P3M0=0x00;                        //0000 0000        //P3.0推挽输出 P3 .1 P3.3 P3.4输入高阻
  30.           P3M1=0x1B;
  31.                 if((key>=j)||(keyy>=j))
  32.                 BUFF=(*(text+i*4+3));
  33.                 else                        
  34.                 BUFF=(*(text+128+i*2+1));
  35.                 led4=0;
  36.                 P1=~BUFF>>1;
  37.                 P3M0=0x10;                        //0001 0000        //P3.4推挽输出 P3 .0 P3.3 P3.1输入高阻
  38.             P3M1=0x0B;          //0000 1011
  39.         
  40.                 P3M0=0x00;                        //0000 0000        //P3.0推挽输出 P3 .1 P3.3 P3.4输入高阻
  41.             P3M1=0x1B;                         //0001 1011
  42.                 led4=1;
  43.              P1=BUFF;             //01010101  1357
  44.                 P3M0=0x10;                        //0001 0000        //P3.4推挽输出 P3 .0 P3.3 P3.1输入高阻
  45.             P3M1=0x0B;          //0000 1011
  46.         
  47.                 P3M0=0x00;                        //0000 0000        //P3.0推挽输出 P3 .1 P3.3 P3.4输入高阻
  48.             P3M1=0x1B;                         //0001 1011
  49.                
  50.                 if((key>=j)||(keyy>=j))
  51.                 BUFF=(*(text+i*4+2));
  52.                 else
  53.                 BUFF=(*(text+128+i*2+0));
  54.                 led3=0;
  55.                 P1=~BUFF>>1;
  56.                 P3M0=0x08;                        //0000 1000        //P3.3推挽输出 P3 .0 P3.1 P3.4输入高阻
  57.             P3M1=0x13;          //0001 0011
  58.                
  59.                 P3M0=0x00;                        //0000 0000        //P3.0推挽输出 P3 .1 P3.3 P3.4输入高阻
  60.             P3M1=0x1B;                         //0001 1011
  61.                 led3=1;
  62.              P1=BUFF;             //01010101  1357
  63.                 P3M0=0x08;                        //0000 1000        //P3.3推挽输出 P3 .0 P3.1 P3.4输入高阻
  64.             P3M1=0x13;          //0001 0011
  65.          
  66.                 P3M0=0x00;                        //0000 0000        //P3.0推挽输出 P3 .1 P3.3 P3.4输入高阻
  67.             P3M1=0x1B;
  68.                
  69.                 if((key>=j)||(keyy>=j))
  70.                 BUFF=(*(text+i*4+1));
  71.                 else
  72.                 BUFF=(*(text+i*2+1));
  73.                 led2=0;
  74.             P1=~BUFF>>1;
  75.                 P3M0=0x02;                        //0000 0010        //P3.1推挽输出 P3 .0 P3.3 P3.4输入高阻
  76.             P3M1=0x19;                        //0001 1001
  77.                
  78.                 P3M0=0x00;                        //0000 0000        //P3.0推挽输出 P3 .1 P3.3 P3.4输入高阻
  79.             P3M1=0x1B;                         //0001 1011
  80.                 led2=1;      
  81.              P1=BUFF;            //01010101  1357
  82.                 P3M0=0x02;                        //0000 0010        //P3.1推挽输出 P3 .0 P3.3 P3.4输入高阻
  83.             P3M1=0x19;                        //0001 1001
  84.         
  85.                 P3M0=0x00;                        //0000 0000        //P3.0推挽输出 P3 .1 P3.3 P3.4输入高阻
  86.             P3M1=0x1B;                         //0001
  87.                 if((key>=j)||(keyy>=j))
  88.                 BUFF=(*(text+i*4+0));
  89.                 else
  90.                 BUFF=(*(text+i*2));
  91.                 led1=0;
  92.                 P1=~BUFF>>1;
  93.                 P3M0=0x01;                        //0000 0001        //P3.0推挽输出 P3 .1 P3.3 P3.4输入高阻
  94.           P3M1=0x1A;                         //0001 1010        
  95.                
  96.           P3M0=0x00;                        //0000 0000        //P3.0推挽输出 P3 .1 P3.3 P3.4输入高阻
  97.           P3M1=0x1B;                         //0001 1011
  98.                 led1=1;                       
  99.     P1=BUFF;            //01010101  1357
  100.                 P3M0=0x01;                        //0000 0001        //P3.0推挽输出 P3 .1 P3.3 P3.4输入高阻
  101.           P3M1=0x1A;                         //0001 1010     
  102.                                        
  103.         }
  104.                 for(i=0;i<64;i++)                                         //第二半圈显示程序
  105.         {        
  106.                
  107.                 P3M0=0x00;                        //0000 0000        //P3.0推挽输出 P3 .1 P3.3 P3.4输入高阻
  108.           P3M1=0x1B;
  109.                 if((key>=j)||(keyy>=j))
  110.                 BUFF=(*(text+i*4+3+256));
  111.                 else                        
  112.                 BUFF=(*(text+128+i*2+1+256));
  113.                 led4=0;
  114.                 P1=~BUFF>>1;
  115.                 P3M0=0x10;                        //0001 0000        //P3.4推挽输出 P3 .0 P3.3 P3.1输入高阻
  116.             P3M1=0x0B;          //0000 1011
  117.         
  118.                 P3M0=0x00;                        //0000 0000        //P3.0推挽输出 P3 .1 P3.3 P3.4输入高阻
  119.             P3M1=0x1B;                         //0001 1011
  120.                 led4=1;
  121.              P1=BUFF;             //01010101  1357
  122.                 P3M0=0x10;                        //0001 0000        //P3.4推挽输出 P3 .0 P3.3 P3.1输入高阻
  123.             P3M1=0x0B;          //0000 1011
  124.         
  125.                 P3M0=0x00;                        //0000 0000        //P3.0推挽输出 P3 .1 P3.3 P3.4输入高阻
  126.             P3M1=0x1B;                         //0001 1011
  127.                
  128.                 if((key>=j)||(keyy>=j))
  129.                 BUFF=(*(text+i*4+2+256));
  130.                 else
  131.                 BUFF=(*(text+128+i*2+0+256));
  132.                 led3=0;
  133.                 P1=~BUFF>>1;
  134.                 P3M0=0x08;                        //0000 1000        //P3.3推挽输出 P3 .0 P3.1 P3.4输入高阻
  135.             P3M1=0x13;          //0001 0011
  136.                
  137.                 P3M0=0x00;                        //0000 0000        //P3.0推挽输出 P3 .1 P3.3 P3.4输入高阻
  138.             P3M1=0x1B;                         //0001 1011
  139.                 led3=1;
  140.              P1=BUFF;             //01010101  1357
  141.                 P3M0=0x08;                        //0000 1000        //P3.3推挽输出 P3 .0 P3.1 P3.4输入高阻
  142.             P3M1=0x13;          //0001 0011
  143.          
  144.                 P3M0=0x00;                        //0000 0000        //P3.0推挽输出 P3 .1 P3.3 P3.4输入高阻
  145.             P3M1=0x1B;
  146.                
  147.                 if((key>=j)||(keyy>=j))
  148.                 BUFF=(*(text+i*4+1+256));
  149.                 else
  150.                 BUFF=(*(text+i*2+1+256));
  151.                 led2=0;
  152.             P1=~BUFF>>1;
  153.                 P3M0=0x02;                        //0000 0010        //P3.1推挽输出 P3 .0 P3.3 P3.4输入高阻
  154.             P3M1=0x19;                        //0001 1001
  155.                
  156.                 P3M0=0x00;                        //0000 0000        //P3.0推挽输出 P3 .1 P3.3 P3.4输入高阻
  157.             P3M1=0x1B;                         //0001 1011
  158.                 led2=1;      
  159.              P1=BUFF;            //01010101  1357
  160.                 P3M0=0x02;                        //0000 0010        //P3.1推挽输出 P3 .0 P3.3 P3.4输入高阻
  161.             P3M1=0x19;                        //0001 1001
  162.         
  163.                 P3M0=0x00;                        //0000 0000        //P3.0推挽输出 P3 .1 P3.3 P3.4输入高阻
  164.             P3M1=0x1B;                         //0001
  165.                 if((key>=j)||(keyy>=j))
  166.                 BUFF=(*(text+i*4+0+256));
  167.                 else
  168.                 BUFF=(*(text+i*2+256));
  169.                 led1=0;
  170.                 P1=~BUFF>>1;
  171.                 P3M0=0x01;                        //0000 0001        //P3.0推挽输出 P3 .1 P3.3 P3.4输入高阻
  172.           P3M1=0x1A;                         //0001 1010        
  173.                
  174.           P3M0=0x00;                        //0000 0000        //P3.0推挽输出 P3 .1 P3.3 P3.4输入高阻
  175.           P3M1=0x1B;                         //0001 1011
  176.                 led1=1;                       
  177.     P1=BUFF;            //01010101  1357
  178.                 P3M0=0x01;                        //0000 0001        //P3.0推挽输出 P3 .1 P3.3 P3.4输入高阻
  179.           P3M1=0x1A;                         //0001 1010
  180.                
  181.         }
  182. }


  183. /*****************************************/
  184. void display(unsigned char y)
  185. {
  186.         switch (y){                                                                                                                        //显示内容的先后
  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.                 }
  192. }
  193. /***************************************/
  194. /*********延时子程序**********/

  195. void yyv_init(void)           //程序初始化
  196. {
  197.         AUXR=0x80;        
  198.         CLK_DIV=1;        
  199.         EX0=1;        //开放外部中断0
  200.         IT0=1;        //中断0为边沿触发方式
  201.         IP=0x02;        //设置中断优先级
  202.         TMOD=0x02;        //定时器0方式2,8位重装载
  203.         TH0=0x00;        //设定定时器初值        //8080
  204.         TL0=0x01;                  
  205.         KY=0;
  206.         EA=1;        //开放中断
  207.         ET0=1;        //开放定时器0中断
  208.         TR0=1;        //启动定时器0,开始计时*/
  209.         key=0;        //初始化显示第一组文字
  210.         keyy=0;
  211.         P1M0=0x55;        //0101 0101        /P1.0  P1 .2 P1.4 P1.6推挽输出
  212.   P1M1=0xAA;  //1010 1010
  213. }
  214. void timer0() interrupt 1                //定时器0中断子程序
  215. {
  216.         TimeCount++;
  217.         if (DelayN!=0)DelayN--;
  218. }

  219.                                                                                       //显示数据段
  220. unsigned char code text0[]={

  221. 0xFF,0x7F,0xEF,0xBF,0xEF,0xDF,0xEF,0xE7,0xEF,0xF8,0x00,0xFF,0xEF,0xFF,0xEF,0xFF,
  222. 0xEF,0xFF,0xEF,0xFF,0x0F,0xC0,0xFF,0xBF,0xFF,0xBF,0xFF,0xBF,0xFF,0x87,0xFF,0xFF,/*"九",0*/
  223. 0xEF,0xFB,0x9F,0xFB,0xFD,0x83,0xF3,0xFC,0x3F,0xDF,0xFB,0xDF,0xFB,0xDF,0xFB,0xDF,
  224. 0xFB,0xDF,0x03,0xC0,0xFB,0xDF,0xFB,0xDF,0xFB,0xDF,0xFB,0xDF,0xFF,0xDF,0xFF,0xFF,/*"江",1*/
  225. 0xBF,0xFB,0xCF,0xFB,0xEE,0xFB,0x69,0xFB,0x6F,0xFB,0x6F,0xBB,0x6E,0x7B,0x69,0x81,
  226. 0x6F,0xF9,0x6F,0xFA,0x67,0xFB,0xEB,0xFB,0xEC,0xFB,0xAF,0xFB,0xCF,0xFB,0xFF,0xFF,/*"学",2*/
  227. 0xFF,0xFF,0x01,0x00,0xDD,0xFB,0xA5,0xF7,0x79,0xF8,0xEF,0x7F,0xF3,0xBE,0xDB,0xCE,
  228. 0xDB,0xF0,0xDA,0xFE,0xD9,0xFE,0xDB,0xC0,0xDB,0xBE,0xEB,0xBE,0xF3,0x8E,0xFF,0xFF,/*"院",3*/      // 这是第一半圈

  229. 0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,//
  230. 0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0xFF,0xFF,//?0
  231. 0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,//
  232. 0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0xFF,0xFF,//?1
  233. 0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,//
  234. 0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0xFF,0xFF,//?2
  235. 0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,//
  236. 0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0xFF,0xFF,//?3         由于下半部分显示字体看不清楚 所以用来字符来修饰
  237.         


  238. 0xFF,0xFF,0xFF,0xFF,0x07,0xE0,0x77,0xF7,0x77,0xF7,0x77,0xF7,0x77,0xF7,0x00,0x80,
  239. 0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x07,0x60,0xFF,0x7F,0xFF,0x0F,0xFF,0xFF,/*"电",0*/
  240. 0x7F,0xFF,0x7D,0xFF,0x7D,0xFF,0x7D,0xFF,0x7D,0xFF,0x7D,0xBF,0x7D,0x7F,0x1D,0x80,
  241. 0x5D,0xFF,0x6D,0xFF,0x75,0xFF,0x79,0xFF,0x7D,0xFF,0x7F,0xFF,0x7F,0xFF,0xFF,0xFF,/*"子",1*/
  242. 0xEF,0xFF,0xEF,0xFF,0x00,0x00,0xEF,0xFF,0xEF,0xFB,0xFF,0x7D,0x6F,0xBE,0xEF,0xCF,
  243. 0x00,0xF0,0xEF,0xBF,0xEF,0x7F,0x0F,0x80,0x7F,0xFF,0xFF,0xFE,0xFF,0xF9,0xFF,0xFF,/*"协",2*/
  244. 0xBF,0xFF,0xBF,0xFD,0xDF,0xBD,0xDF,0x1D,0xAF,0xAD,0xB7,0xB5,0xBB,0xB9,0xBC,0xBD,
  245. 0xBB,0xBD,0xB7,0xBD,0xAF,0xAD,0xDF,0x9D,0xDF,0x3D,0xBF,0xFD,0xBF,0xFF,0xFF,0xFF,/*"会",3*/       //这是第2半圈   组成一个圆
  246.         
  247. 0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,//
  248. 0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0xFF,0xFF,//?0
  249. 0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,//
  250. 0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0xFF,0xFF,//?1
  251. 0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,//
  252. 0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0xFF,0xFF,//?2
  253. 0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,//
  254. 0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0xFF,0xFF,//?3             下同
  255. };

  256. unsigned char code text1[]={

  257. 0xFF,0x7F,0xFF,0x9F,0x01,0xE0,0xFD,0xFF,0xFD,0xEF,0x05,0xED,0x55,0xED,0x55,0xAD,//
  258. 0x55,0x6D,0x55,0x8D,0x55,0xE5,0x55,0xE9,0x05,0xED,0xFD,0xEF,0xFD,0xEF,0xFF,0xFF,//厚0*/
  259. 0xEF,0xFE,0x77,0xFF,0x3B,0x00,0xCC,0xFF,0xFB,0xBD,0x0B,0xCD,0x6B,0xFD,0x6B,0x8D,//
  260. 0x0B,0x7D,0x60,0x79,0x0B,0x65,0x6B,0x7D,0x6B,0x1D,0x0B,0xF5,0xFB,0xCD,0xFF,0xFF,//德1*/
  261. 0xDF,0xFF,0xEF,0xEF,0xD3,0xEF,0x58,0xEC,0xD3,0xED,0xCB,0xED,0xDB,0xED,0xCB,0xED,//
  262. 0xD7,0xED,0xD8,0xED,0xDB,0xAD,0x13,0x7C,0xEB,0xBD,0xFB,0xC1,0xFB,0xFF,0xFF,0xFF,//笃2*/
  263. 0xFF,0xFD,0xEF,0xFE,0x77,0xFF,0x3B,0x00,0xCC,0xFF,0xFF,0xFF,0xBF,0xFF,0xBD,0xFF,//
  264. 0xBD,0xBF,0xBD,0x7F,0x3D,0x80,0xBD,0xFF,0xBD,0xFF,0xBD,0xFF,0xBF,0xFF,0xFF,0xFF,//行3*/

  265. 0xBF,0xFD,0xBF,0xFD,0x7F,0xFE,0x0F,0xF0,0x7F,0xFE,0xBF,0xFD,0xBF,0xFD,0xFF,0xFF,//*0
  266. 0xBF,0xFD,0xBF,0xFD,0x7F,0xFE,0x0F,0xF0,0x7F,0xFE,0xBF,0xFD,0xBF,0xFD,0xFF,0xFF,//*1
  267. 0xBF,0xFD,0xBF,0xFD,0x7F,0xFE,0x0F,0xF0,0x7F,0xFE,0xBF,0xFD,0xBF,0xFD,0xFF,0xFF,//*2
  268. 0xBF,0xFD,0xBF,0xFD,0x7F,0xFE,0x0F,0xF0,0x7F,0xFE,0xBF,0xFD,0xBF,0xFD,0xFF,0xFF,//*3
  269. 0xBF,0xFD,0xBF,0xFD,0x7F,0xFE,0x0F,0xF0,0x7F,0xFE,0xBF,0xFD,0xBF,0xFD,0xFF,0xFF,//*4
  270. 0xBF,0xFD,0xBF,0xFD,0x7F,0xFE,0x0F,0xF0,0x7F,0xFE,0xBF,0xFD,0xBF,0xFD,0xFF,0xFF,//*5
  271. ……………………

  272. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
旋转摇摇棒.7z (671.22 KB, 下载次数: 113)




评分

参与人数 2黑币 +65 收起 理由
shineyunze978 + 15 赞一个!
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:404695 发表于 2018-12-12 10:41 | 只看该作者
非常奈斯
回复

使用道具 举报

板凳
ID:344384 发表于 2018-12-15 11:01 | 只看该作者
这个很不错。
回复

使用道具 举报

地板
ID:284252 发表于 2018-12-20 07:23 | 只看该作者
分不够,顶,,,,,,
回复

使用道具 举报

5#
ID:196954 发表于 2019-1-5 22:02 | 只看该作者
老哥,你这内容和标题不对啊
回复

使用道具 举报

6#
ID:60656 发表于 2019-1-6 22:46 | 只看该作者
谢谢分享学习一下
回复

使用道具 举报

7#
ID:404207 发表于 2019-1-17 18:50 | 只看该作者
飞猪 发表于 2019-1-5 22:02
老哥,你这内容和标题不对啊

写错标题了
回复

使用道具 举报

8#
ID:273447 发表于 2019-4-26 16:57 | 只看该作者
太棒了!感谢分享!
回复

使用道具 举报

9#
ID:111376 发表于 2019-5-11 13:16 | 只看该作者
这个很不错,赞
回复

使用道具 举报

10#
ID:532266 发表于 2019-5-14 16:03 | 只看该作者
学习了
回复

使用道具 举报

11#
ID:484435 发表于 2019-5-15 19:10 | 只看该作者
谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表