找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STC15F104W单片机TM1803彩灯程序

[复制链接]
跳转到指定楼层
楼主
ID:136485 发表于 2021-7-3 12:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/******************************************************************************/
STC15F104W芯片
内部晶振18.432M
/*******************************************************************************/

#include <STC15F100W.H>                            //MCU头文件
#include "intrins.h"                            //包含nop指令头文件

#define nop  _nop_();   
                   //宏定义
/********************************定义控制端口***********************************/
sbit DO=P3^4;                                    //定义信号输出DO
sbit led1=P3^1;
sbit led2=P3^2;
sbit led3=P3^3;
/**********************************定义变量*************************************/
unsigned int IC=6;                          //控制TM1804个数
unsigned int LED_PX;                        //像素点数
unsigned char PWM=255;                      //TM1804灰度数据
unsigned char Rda,Gda,Bda;                  //R、G、B灰度数据
unsigned char bdata LED_data;               //可位操作的数据发送暂存变量声明
sbit bit0=LED_data^0;                            //被发送的数据各位定义
sbit bit1=LED_data^1;
sbit bit2=LED_data^2;
sbit bit3=LED_data^3;
sbit bit4=LED_data^4;
sbit bit5=LED_data^5;
sbit bit6=LED_data^6;
sbit bit7=LED_data^7;
bit flag=0;                                 //定义一个标志位

/**********************************延时函数*************************************/
void delay(unsigned int n)                  //n=1,延时500us
{
unsigned int i;
while(n--)
for(i=0;i<860;i++);
}

/********************发送0码函数,高电平400ns,周期1.25us************************/
void send_data_0()   
{
DO=1;
nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;         
DO=0;
nop;nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;nop;
}

/*******************发送1码函数,高电平800ns,周期1.25us*************************/
void send_data_1()   
{
DO=1;
nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;nop;
nop;nop;nop;nop;nop;
DO=0;   
}

/***********************发送1个字节数据,高位先发*******************************/
void send_data(unsigned char DATA)               
{
LED_data=DATA;                          
if(bit7)        send_data_1();        else send_data_0();
if(bit6)        send_data_1();        else send_data_0();
if(bit5)        send_data_1();        else send_data_0();
if(bit4)        send_data_1();        else send_data_0();
if(bit3)        send_data_1();        else send_data_0();
if(bit2)        send_data_1();        else send_data_0();
if(bit1)        send_data_1();        else send_data_0();
if(bit0)        send_data_1();        else send_data_0();
}
/******************************发送1帧数据*************************************/
void send_px()
{
unsigned int i;
for(i=0;i<LED_PX;i++)
  {
   send_data(Rda);             //发送R灰度数据
   send_data(Gda);             //发送G灰度数据
   send_data(Bda);             //发送B灰度数据
  }
}
/*===============================主函数=======================================*/
void main()
{
unsigned char i;
P3M0=0xFF;
P3M1=0x00;
led1=led2=led3=0;
LED_PX=IC;                          //像素点数等于TM1804个数
Rda=Gda=Bda=0;                      //R、G、B灰度数据复位清零
while(1)
  {
   for(i=0;i<PWM;i++)          //红色渐亮  
    {
     Rda=i;              //灰度计算
     send_px();          //发送灰度数据
     delay(50);          //复位延时
    }
    flag=1;                     //标志位置位
    while(flag)                 //标志位置位后循环函数
    {
     for(i=0;i<PWM;i++)  //红色渐灭,绿色渐亮
      {
       Gda=i;
       Rda=PWM-i;  //灰度计算
       send_px();  //发送灰度数据
       delay(50);  //复位延时
      }
     for(i=0;i<PWM;i++)  //绿色渐灭,蓝色渐亮
      {
       Bda=i;           
       Gda=PWM-i;  //灰度计算
       send_px();  //发送灰度数据
       delay(50);  //复位延时
      }
     for(i=0;i<PWM;i++)  //蓝色渐灭,红色渐亮
      {
       Rda=i;
       Bda=PWM-i;  //灰度计算
       send_px();  //发送灰度数据
       delay(50);  //复位延时
      }
    }
  }
}
/*================================结束==========================================*/

评分

参与人数 1黑币 +20 收起 理由
admin + 20 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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