如何用C语言编写一个LED灯渐变的程序

Python010

如何用C语言编写一个LED灯渐变的程序,第1张

#include<reg51.h>

//设CPU是时钟12MHz的8051系列

data unsigned char ms

sbit K1=P0^0

void SetupTimer0()

{

    TMOD &= 0XF0 //仅保留T1信息

    TMOD |= 0X02 //设置T0: 定时功能,方式2,自动重载8位定时器/计数器

    TH0 = 256-250//定时每0.25ms中断一次

    TL0 = 256-250

    TR0 = 1      //开启定时器

    ET0 = 1      //定时器0中断打开

}

void Timer0_ISR() interrupt 1 //中断服务程序

{

    static data unsigned char us250

    if (++us250>=4) {++ms us250=0}

}

void main()

{

    data unsigned char p1,p2

    ms=0

    SetupTimer0()

    EA = 1               //全局中断打开

    K1 = 1

    while(1)

    {

        if (K1) {P1=p1=0XFF P2=p2=0x00 ms=0 continue}

        if (ms<150) continue

        ms=0

        p1<<=1        P1=p1

        p2<<=1 p2|=1 P2=p2

    }

}

你是想在控制台输出么?如果是MFC很容易实现,直接设置text内容,如果是控制台,可以调用system("cls")进行清屏操作也能实现这个效果的,可以放到一个循环里面,你说的过一会显示,那只要调用sleep("1")就行了,中间数字自己写时间,最前面要加个#include <windows.h>头文件

可以试试使用gdi+库来实现颜色渐变,下边是一种方法,具体可见: http://download.csdn.net/download/weizengke/3101800有源码,。

BOOL CTipDlg::OnEraseBkgnd(CDC* pDC)

{

CRect rcClient

GetClientRect(&rcClient)

GradientFillRect( pDC, rcClient, RGB(0,191,255), RGB(238,238,238), TRUE )

// CPaintDC dc(this)

// Rect picRect

// CRect clRect

// GetClientRect(&clRect)

// //GetUpdateRect(clRect)

// picRect.X = clRect.left

// picRect.Y = clRect.top

// picRect.Width = clRect.Width()

// picRect.Height = clRect.Height()

//

// Graphics grpx(dc)

// //////////////////////////////////////////////////////////////////主界面背景

// WCHAR *strPath=L"res\\none.png"

// Image * Img = Image::FromFile(strPath,FALSE)

// grpx.DrawImage(Img,picRect)

return true

// return CDialog::OnEraseBkgnd(pDC)

}

//实现渐变

void CTipDlg::GradientFillRect( CDC *pDC, CRect &rect, COLORREF col_from, COLORREF col_to, bool vert_grad )

{

TRIVERTEXvert[2]

GRADIENT_RECTmesh

vert[0].x = rect.left

vert[0].y = rect.top

vert[0].Alpha = 0x0000

vert[0].Blue = GetBValue(col_from) <<8

vert[0].Green = GetGValue(col_from) <<8

vert[0].Red= GetRValue(col_from) <<8

vert[1].x = rect.right

vert[1].y = rect.bottom

vert[1].Alpha = 0x0000

vert[1].Blue = GetBValue(col_to) <<8

vert[1].Green = GetGValue(col_to) <<8

vert[1].Red= GetRValue(col_to) <<8

vert[2].x = rect.right

vert[2].y = rect.bottom

vert[2].Alpha = 0x0000

vert[2].Blue = GetBValue(col_to) <<16

vert[2].Green = GetGValue(col_to) <<16

vert[2].Red= GetRValue(col_to) <<16

mesh.UpperLeft = 0

mesh.LowerRight = 1

#if _MSC_VER >= 1300 // only VS7 and above has GradientFill as a pDC member

pDC->GradientFill( vert, 2, &mesh, 1, vert_grad ? GRADIENT_FILL_RECT_V :

GRADIENT_FILL_RECT_H )

#else

GradientFill( pDC->m_hDC, vert, 2, &mesh, 1, vert_grad ? GRADIENT_FILL_RECT_V :

GRADIENT_FILL_RECT_H )

#endif

}