找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STC8G1K08-16PIN单片机为主控转向中网灯主控程序 求指教

[复制链接]
跳转到指定楼层
楼主
ID:826754 发表于 2020-11-9 19:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. /********使用STC8G1K08-16PIN为主控转向流光灯,
  2. 1、上电扫描流光左右同时流光三次,日行灯亮。
  3. 2、接收到左或右转向信号时相应方向流光一次,日行灯LED11 50%亮度。
  4. 3、断开左或右转向信号时,日行灯LED11 100%亮度。
  5. 4、锁车左右同时接到信号时流光。*****/

  6. #include <STC8G.H>  
  7. typedef unsigned char u8;
  8. typedef unsigned int  u16;
  9. /********端口引脚定义*****/  
  10. sbit KEYL=P5^4;                                //设置左方向触发信号
  11. sbit KEYR=P5^5;                            //设置右方向触发信号

  12. sbit LED1=P3^2;                            //左方向流光灯设定
  13. sbit LED2=P3^3;
  14. sbit LED3=P3^4;
  15. sbit LED4=P3^5;
  16. sbit LED5=P3^6;

  17. sbit LED6=P3^7;                                //右方向流光灯设定
  18. sbit LED7=P1^0;
  19. sbit LED8=P1^1;
  20. sbit LED9=P1^6;
  21. sbit LED10=P1^7;

  22. sbit LED11=P3^1;                   //日行灯设定

  23. bit signl=0;             //触发状态标志
  24. bit signr=0;
  25. u8  count1=0;                        //开关消抖计数变量
  26. u16 count2=0,count3=0;        //LED延时计数变量

  27. /********定时器初始化*****/  
  28. void Timer0Init()        //10毫秒@11.0592MHz
  29. {
  30.         AUXR &= 0x7F;        //定时器时钟12T模式
  31.         TMOD &= 0xF0;        //设置定时器自动重装模式
  32.         TL0 = 0x00;                //设置定时初值
  33.         TH0 = 0xDC;                //设置定时初值
  34.         TF0 = 0;                //清除TF0标志
  35.         TR0 = 1;                //定时器0开始计时
  36. }
  37. /********上电扫描流光子函数*****/
  38. void Led()
  39. {
  40.                                                                 LED1=LED6=1;    //LED1,LED6亮
  41.                                 count2++;
  42.                                 if(count2>=10) //0.1秒延时
  43.                                      LED1=LED6=LED2=LED7=1;     //LED1、2,LED6、7亮
  44.                                 if(count2>=20)//0.2秒延时
  45.                                      LED1=LED6=0;   LED2=LED7=LED3=LED8=1;     //LED2、3,LED7、8亮
  46.                                 if(count2>=30)//0.3秒延时
  47.                                          LED1=LED6=LED2=LED7=0;   LED3=LED8=LED4=LED9=1;                         //LED3、4,LED8、9亮
  48.                                 if(count2>=40)//0.4秒延时
  49.                                          LED1=LED6=LED2=LED7=LED3=LED8=0;   LED4=LED9=LED5=LED10=1;         //LED4、5,LED9、10亮
  50.                                 if(count2>=50)//0.5秒延时
  51.                                          LED1=LED6=LED2=LED7=LED3=LED8=LED4=LED9=0;   LED5=LED10=1;         //LED5,LED10亮
  52.                                                                
  53.                                                                 {
  54.                                    count2=60; //保持
  55.                                      LED1=LED6=LED2=LED7=LED3=LED8=LED4=LED9=LED5=LED10=0;       //LED灭
  56.                                 }

  57. }




  58. /******主函数区******/  
  59. void main()
  60. {
  61.         P3M0=0xFE;//设P3口为推挽输出,P3.0为高阻输入.         
  62.         P3M1=0x01;
  63.                 P1M0=0xC3;//设P1口为推挽输出,
  64.                 P1M1=0x00;         
  65.         P5M0=0x00;//设P5.4、P5.5为准双向口.        
  66.         P5M1=0x00;
  67.                 P3=0X01;
  68.                 P1=0X3C;

  69.         
  70.         KEYL =1; //不可以设低电平
  71.                 KEYR =1;        
  72.         Timer0Init();
  73.                 Led();
  74.                 Led();
  75.                 Led();
  76.                 LED11=1; //P5.5为高电平
  77.         while(1)         
  78.         {                 
  79.                 if(TF0==1)//定时器10毫秒溢出
  80.                 {
  81.                         TF0=0; //清0
  82. /********扫描开关(触发/复位)**************/
  83.                         if(KEYL==1)//如P5.4为高电平
  84.                         {
  85.                                 if(++count1>=2&&signl==0)//消抖计数和判断判断开关触发状态
  86.                                         signl=1;//触发状态标志置1
  87.                         }
  88.                         else                     //如P5.4为低电平
  89.                         {
  90.                                 signl=0;                //触发状态标志清0
  91.                                 count1=0;        //消抖计数清0
  92.                         }
  93.                         if(KEYR==1)//如P5.5为高电平
  94.                         {
  95.                                 if(++count1>=2&&signr==0)//消抖计数和判断判断开关触发状态
  96.                                         signr=1;//触发状态标志置1
  97.                         }
  98.                         else                     //如P5.5为低电平
  99.                         {
  100.                                 signr=0;                //触发状态标志清0
  101.                                 count1=0;        //消抖计数清0
  102.                         }
  103. /********执行触发/复位部分**************/
  104.                         if(signl==1)                                                                          //触发状态
  105.                         {
  106.                                 count3=0;                                                                 //计数3清0
  107.                                 LED11=0;                                                             //P3.1需PWM50%亮度         //P3.1输出低电平 熄
  108.                                                                 LED1=1;                                                                             //LED1亮
  109.                                 count2++;
  110.                                 if(count2>=10) //0.1秒延时
  111.                                      LED1=LED2=1;                                             //LED1、2,亮
  112.                                 if(count2>=20)//0.2秒延时
  113.                                      LED1=0;   LED2=LED3=1;                  //LED2、3,亮
  114.                                 if(count2>=30)//0.3秒延时
  115.                                          LED1=LED2=0;   LED3=LED4=1;                         //LED3、4,亮
  116.                                 if(count2>=40)//0.4秒延时
  117.                                          LED1=LED2=LED3=0;   LED4=LED5=1;             //LED4、5,亮
  118.                                 if(count2>=50)//0.5秒延时
  119.                                          LED1=LED2=LED3=LED4=0;   LED5=1;             //LED5,亮
  120.                                                                
  121.                                                                 {
  122.                                    count2=60; //保持
  123.                                      LED1=LED2=LED3=LED4=LED5=0;                        //LED灭
  124.                                 }

  125.                         }
  126.                         else                                        //复位状态
  127.                         {
  128.                                 count2=0;                                                        //计数2清0
  129.                                 LED1=LED2=LED3=LED4=LED5=0;                                        //LED1~5熄
  130.                                 if(++count3>=100)//1秒延时
  131.                                 {
  132.                                         count3=100; //保持
  133.                                         LED11=1;                                        //LED5亮
  134.                                 }
  135.                         }
  136.                         if(signr==1)                                                                          //触发状态
  137.                         {
  138.                                 count3=0;                                                                 //计数3清0
  139.                                 LED11=0;                                                                     //P3.1需PWM50%亮度         //P3.1输出低电平 熄
  140.                                                                 LED6=1;                                                                             //LED6亮
  141.                                 count2++;
  142.                                 if(count2>=10) //0.1秒延时
  143.                                      LED6=LED7=1;                                             //LED6、7,亮
  144.                                 if(count2>=20)//0.2秒延时
  145.                                      LED6=0;   LED7=LED8=1;                  //LED7、8,亮
  146.                                 if(count2>=30)//0.3秒延时
  147.                                          LED6=LED7=0;   LED8=LED9=1;                         //LED8、9,亮
  148.                                 if(count2>=40)//0.4秒延时
  149.                                          LED6=LED7=LED8=0;   LED9=LED10=1;             //LED9、10,亮
  150.                                 if(count2>=50)//0.5秒延时
  151.                                          LED6=LED7=LED8=LED9=0;   LED10=1;             //LED10,亮
  152.                                                                
  153.                                                                 {
  154.                                    count2=60; //保持
  155.                                      LED6=LED7=LED8=LED9=LED10=0;                        //LED灭
  156.                                 }

  157.                         }
  158.                         else                                        //复位状态
  159.                         {
  160.                                 count2=0;                                                        //计数2清0
  161.                                 LED6=LED7=LED8=LED9=LED10=0;                                        //LED6~10熄
  162.                                 if(++count3>=100)//1秒延时
  163.                                 {
  164.                                         count3=100; //保持
  165.                                         LED11=1;                                        //LED5亮
  166.                                 }
  167.                         }


  168.                 }
  169.         }
  170. }
复制代码


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

使用道具 举报

沙发
ID:826754 发表于 2020-11-10 10:06 | 只看该作者
那位大大帮忙看看这个程序需要怎样修改一下,及怎样加入PWM的调光功能。
回复

使用道具 举报

板凳
ID:826754 发表于 2020-11-12 08:21 | 只看该作者
看看那位大神能指点一下双输入信号的思路。
回复

使用道具 举报

地板
ID:687694 发表于 2020-11-12 16:37 | 只看该作者
吐槽一句,这程序写的真废片子。
输出选择pwm端I/O,配置pwm。 硬件需要做些改动,不改硬件控制亮度,你估计要配置8路pwm 。不过stc8G1k08芯片只有3路。。。。
关于信号采集。。。我想应该是控制信号输入,严谨写法用中断,不严谨嘛。轮询就能行。至于双路信号,最多不过4种状态,case0~3,不香么。
另外,流光写成子函数,传递调用参数不香么,多写几个花样闪烁做成子函数。。。。。
还有,你想要的功能表达并不详细,没法给你具体解答。
回复

使用道具 举报

5#
ID:826754 发表于 2020-11-28 11:41 | 只看该作者
没有人指点吗?贴子都沉了。
回复

使用道具 举报

6#
ID:923440 发表于 2021-6-10 10:05 | 只看该作者
请问stc8G1k08的芯片,在keil中cpu选89c52的行吗,还有这个头文件就是“stc8G.h”嘛
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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