📄 595_pwm_080313.txt
字号:
//定时器晶体振荡器11.0592M.
//74hc595控制LED渐变程序,测试正确
//测试芯片STC89C54,
/*
原理:用CPU的3个脚控制595的SER,SRCLK,RCLK,实行数据
的串进并出,在用CPU的一个脚控制LED的共极(共阳或者共阴),
利用这个脚来控制PWM,实行LED的渐变
*/
#include<reg52.h>
#include <stdio.h>
#include <INTRINS.H>
#define uint unsigned int
#define uchar unsigned char
#define nop() _nop_();_nop_();
sfr AUXR=0X8E;
sbit CLK=P0^5; //移位时钟
sbit DAT=P0^3; //数据
sbit SRCLK=P0^4; //寄存器时钟
sbit kong=P0^6; //控制脚位
uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};//0-9,-,全灭
//0 1 2 3 4 5 6 7 8 9 -
/*
void delay1()
{
uchar a,b,c;
for(a=0;a<200;a++)
for(b=0;b<200;b++)
for(c=0;c<20;c++)
;
}
void delay(unsigned char a)
{ unsigned char j;
//for(i=0;i<60;i++)
for(j=0;j<100;j++)
{
while(a--);
}
}
*/
void out595(void)
{
SRCLK=0;
nop();
SRCLK=1;
}
void jianbian()
{
uchar ww,xx,HUIDU,BAOCI,COLORMOD;
for(COLORMOD=0;COLORMOD<2;COLORMOD++)
{
//渐渐亮
for(HUIDU=0;HUIDU<255;HUIDU++)//为占空比,
{
for(BAOCI=0;BAOCI<30;BAOCI++) //细化
{
for(ww=0;ww<HUIDU;ww++) //渐亮
{
kong=1;
//out595();
//P0=~color[COLORMOD];
// P0=~0x01; //亮的 //渐亮
}
for(xx=0;xx<255-HUIDU;xx++)
{
//P0=color[COLORMOD];
//P0=0xff; //不亮的
kong=0;
//out595();
}
}
}
//渐渐灭
for(HUIDU=0;HUIDU<255;HUIDU++)//为占空比,
{
for(BAOCI=0;BAOCI<30;BAOCI++) //细化
{
for(ww=0;ww<HUIDU;ww++)
{
// P0=~color[COLORMOD];
// P0=0xff; //亮的 //渐灭
kong=0;
//out595();
}
for(xx=0;xx<255-HUIDU;xx++)
{
//P0=~color[COLORMOD];
//P0=~0x01; //不亮的
kong=1;
//out595();
}
}
}
}
}
void sendbyte(uchar byte)
{
uchar num,c;
num=tab[byte];
for(c=0;c<8;c++)
{
CLK=0;
DAT=num&0x80;
num=num<<1;
CLK=1;
}
// RCLK=0;
// nop();
// nop();
// RCLK=1;
}
void display(uchar word)
{
uchar i,j;
i=word/10;
j=word-10*i;
sendbyte(j);
sendbyte(i);
// kong=1;
out595();
jianbian();
}
main()
{
while(1)
{
// jianbian();
//P0=(P0|0x40);
display(19);
//delay1();
display(86);
//delay1();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -