标题:
pwm(15单片机)+1602液晶显示
[打印本页]
作者:
承蒙关照
时间:
2019-7-24 15:53
标题:
pwm(15单片机)+1602液晶显示
pwm(15单片机)+液晶显示 驱动程序 加注释
单片机源程序如下:
#include <STC15F2K60S2.h>
#define u8 unsigned char
#define u16 unsigned int
sbit PWM = P1^0;
extern void InitLcd1602();
extern void LcdShowStr(unsigned char x, unsigned char y,unsigned char *str, unsigned char len);
u8 Trg,Cont; //独立按键
#define KEYPROUT P3
void key_read(void)
{
u8 ReadData = KEYPROUT^0xff;
Trg = ReadData&(ReadData^Cont);
Cont = ReadData;
}
void Timer0_Init(void) //1ms 定时器0初始化
{
AUXR |= 0x80; //1T timer
TMOD &= 0xF0; // 16bit
TL0 = 0xCD;
TH0 = 0xD4;
TF0 = 0;
TR0 = 1;
ET0 = 1;
EA=1;
}
void Timer1Init(void) //100微秒@11.0592MHz
{
AUXR |= 0x40; //定时器时钟1T模式
TMOD &= 0x0F; //设置定时器模式
TL1 = 0xAE; //设置定时初值
TH1 = 0xFB; //设置定时初值
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
ET1 = 1;
}
bit key_flag,timer_500ms_flag;
u8 pwm_set=5;
u8 str[15];
void main(void)
{
P2=0xa0;P0=0x00;P2=0x00; // 关闭蜂鸣器
Timer0_Init(); //1ms 定时器0初始化
Timer1Init();
InitLcd1602();
while(1)
{
if(timer_500ms_flag)
{
timer_500ms_flag=0;
LcdShowStr(0,0,str,1);
}
str[0] = pwm_set + '0';
if(key_flag) // 按键扫描
{
key_flag=0;
key_read();
if(Trg&0x08)//s4
{
pwm_set++;
}
if(Trg&0x04)//s5
{
pwm_set--;
}
if(Trg&0x02)//s6
{
}
if(Trg&0x01)//s7
{
}
if(Cont) //按键按下
{
}
if(Trg==0&Cont==0) //按键放开
{
}
}
}
}
void timer0() interrupt 1 using 1
{
static int key_count=0,timer_500ms=0;
key_count++;timer_500ms++;
if(key_count==10) //10ms 按键扫描
{
key_count=0;
key_flag=1;
}
if(timer_500ms==500)
{
timer_500ms=0;
timer_500ms_flag=1;
}
}
void timer1() interrupt 3
{
static u8 pwm_count=0;
pwm_count++;
if(pwm_count==pwm_set)
{
PWM=0;
}
if(pwm_count==10)
{
pwm_count=0;
PWM=1;
}
}
复制代码
所有资料51hei提供下载:
PWM(15).zip
(32.09 KB, 下载次数: 13)
2019-7-24 15:53 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
admin
时间:
2019-7-24 16:49
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1