|
500黑幣
樓主
我有三個程序
1.按鍵控制3個LED燈的亮滅
2.按鍵控制PWN占空比調(diào)光
3.液晶屏60S倒計時
三個分開寫的,用的都是不同的按鍵,現(xiàn)在想整合成一個程序卻無從下手了。
預(yù)期開關(guān)控制燈亮以后能用其他按鍵對亮的燈進(jìn)行調(diào)光。
另有獨立按鍵控制一個固定程序可以按下以后LCD顯示60S倒計時且倒計時期間燈D1用強(qiáng)光亮20S D2用弱光亮40S,倒計時結(jié)束燈全滅。
程序附下希望有大佬幫忙改一下,我學(xué)習(xí)一下
液晶顯示倒計時:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS=P2^3;
sbit RW=P2^4;
sbit EN=P2^5;
uchar code temp[]="00";
uint aa,ee,date1;
void delay(uint aa)
{
uint bb,cc;
for(bb=0;bb<aa;bb++)
for(cc=0;cc<100;cc++);
}
void write_zhiling(uint com)
{
RS=0;
P0=com;
delay(5);
EN=1;
delay(10);
EN=0;
}
void write_shuju(uint shuju)
{
RS=1;
P0=shuju;
delay(5);
EN=1;
delay(10);
EN=0;
}
void inite() //中斷、1602初始化
{
TMOD=0x01;
TH0=(65536-46080)/256;
TH0=(65536-46080)%256;
EA=1;
ET0=1;
TR0=1;
RW=0;
EN=0;
date1=60;
write_zhiling(0x38);
write_zhiling(0x0c);
write_zhiling(0x06);
write_zhiling(0x80);
write_zhiling(0x01);
write_zhiling(0x80+7);
for(aa=0;aa<2;aa++)
{
write_shuju(temp[aa]);
delay(5);
}
}
void display(uint date)
{
uint ge,shi;
ge=date%10;
shi=date/10;
write_shuju(0x30+shi);//0x30--0x39對應(yīng)的是1602顯示0--9的ASCLL碼值
write_shuju(0x30+ge);
}
void timer0() interrupt 1
{
TH0=(65536-46080)/256;//11.0592MHZ晶振50Ms
TH0=(65536-46080)%256;
ee++;
if(ee==14)//加上前面延時子函數(shù)的延時, 在我的板子上ee=14的時候大概就是一秒鐘
{
ee=0;
date1--;
if(date1==0)
{
date1=60;
}
write_zhiling(0x80+7);
display(date1);
}
}
void main()
{
inite();
while(1);
}
調(diào)光程序
#include <reg51.h>
#define uInt unsigned int
#define uchar unsigned char
uchar PWM_T = 0; //占空比控制變量
sbit k1=P1^0;//
sbit k2=P1^1;//
sbit k3=P1^2;
sbit k4=P1^3;
sbit k5=P1^4;
sbit k6=P1^5;
sbit k7=P1^6;
sbit k8=P1^7;
sbit D1=P2^0;//
sbit D2=P2^1;//
sbit D3=P2^2;//
bit flag=0;
/*********************************************************************************************/
void DELAY_MS (unsigned int a){
unsigned int i;
while( a-- != 0){
for(i = 0; i < 125; i++);
}
}
/*********************************************************************************************/
void main (void)
{
uInt n;
TMOD=0x02; //定時器0,工作模式2,8位定時模式
TH0=210; //寫入預(yù)置初值(取值1-255,數(shù)越大PWM頻率越高)
TL0=210; //寫入預(yù)置值 (取值1-255,數(shù)越大PWM頻率越高)
TR0=1; //啟動定時器
ET0=1; //允許定時器0中斷
EA=1; //允許總中斷
D1=1;
//初始化P1,輸出端口
//初始化P0
while(1) //PWM周期100,高電平100- PWM_T, 低電平PWM_T,低電平工作
{
for(n=0;n<100;n++); //延時,取值0-65535,數(shù)字越大變化越慢
if(k4==1||k5==1||k6==1) //通過按鍵改變占空比
{
if(k4==1) PWM_T=35; //這些值可以改變
else if(k5==1) PWM_T=65;
else if(k6==1) PWM_T=100;
}
}
}
/****************************************************
/定時器0中斷模擬PWM
****************************************************/
uchar t ; //PWM計數(shù)
timer0() interrupt 1 using 2
{
t++; //每次定時器溢出加1
if(t==80) //PWM周期 100個單位
{
t=0; //使t=0,開始新的PWM周期
}
if(PWM_T<=t) //按照當(dāng)前占空比切換輸出為高電平
{
D1=1;} //使LED燈滅
else
D1 = 0;
}
按鍵控制顏色
#include <REG51.h> //單片機(jī)頭文件
sbit k1=P1^0;//
sbit k2=P1^1;//
sbit k3=P1^2;
sbit k4=P1^3;
sbit k5=P1^4;
sbit k6=P1^5;
sbit k7=P1^6;
sbit k8=P1^7;
sbit D1=P2^0;//
sbit D2=P2^1;//
sbit D3=P2^2;//
bit flag=0;
/*********************************************************************************************/
void DELAY_MS (unsigned int a){
unsigned int i;
while( a-- != 0){
for(i = 0; i < 125; i++);
}
}
/*********************************************************************************************/
void main (void)
{
while(1){
if(k1==1&&flag==0){ //
DELAY_MS(10);
if(k1==1&&flag==0){
flag=1;
D1=0;
D2=1;
D3=1;//藍(lán)亮紅黃滅
}
}
if(k1==0){
flag=0;
D1=1;//藍(lán)滅
}
if(k2==1&&flag==0){//
DELAY_MS(10);
if(k2==1&&flag==0){
flag=1;
D2=0;
D1=1;
D3=1;//紅亮藍(lán)黃滅
}
}
if(k2==0){
flag=0;
D2=1;//上面三個燈滅
}
if(k3==1&&flag==0){//
DELAY_MS(10);
if(k3==1&&flag==0){
flag=1;
D3=0;
D1=1;
D2=1;//黃亮藍(lán)紅滅
}
}
if(k3==0){
flag=0;
D3=1;//上面三個燈滅
}
}
}
|
|
|
|
|
|