单片机课程设计以89C51为基础设计SPWM波发生器
FileName : main.c
Author :9long
Date :2010.5.11
Target : STC89C51
Crystal :12M
模块功能:用定时中断调试PWM可调模块,可以接在直流电机上调速
/
include
/-----宏定义----/
define NOKEY 0
define KEY1128
define KEY2129
define KEY3131
define KEY4135
define KEY564
define KEY665
define KEY767
define KEY871
define KEY932
define KEY1033
define KEY1135
define KEY1239
define KEY1316
define KEY1417
define KEY1519
define KEY1623
define DIG00xfe
define DIG10xfd
define DIG20xfb
define DIG30xf7
define DIG40xef
define DIG50xdf
define DIG60xbf
define DIG70x7f
define CODE00xc0
define CODE10xf9
define CODE20xa4
define CODE30xb0
define CODE40x99
define CODE50x92
define CODE60x82
define CODE70xf8
define CODE80x80
define CODE90x90
define CODEA 0x88
define CODEB 0x83
define CODEC 0xc6
define CODED 0xa1
define CODEE 0x86
define CODEF 0x8e
define CODEH 0x89
define CODEP 0x8c
define POINT 0x7f
define CODE_0xf7
define CODENO 0xff
sbit LED = P1^2;
/---变量定义----/
code const unsigned char NUMBER_CODE10=
{CODE0,CODE1,CODE2,CODE3,CODE4,CODE5,CODE6,CODE7,CODE8,CODE9};
code const unsigned char LED_DIG8=
{DIG0,DIG1,DIG2,DIG3,DIG4,DIG5,DIG6,DIG7};
unsigned char last_key =0;
unsigned char key =0;
/
函数名称:Delay1ms()
函数功能:延时count1ms
输入参数:count,无符号整型,最多计65535ms count
输出参数:无
全局变量:无
/
void Delay1ms(unsigned int count)
{
unsigned int i=0;
unsigned int j=0;
for(i=0;i for(j=0;j<120;j++); } / 函数名称:DisplayCode() 函数功能:数码管显示缓冲,送段驱动 输入参数:x,无符号整型,最多显示65535 输出参数:无 全局变量:LED_SEGi,NUMBER_CODEi / void DisplayCode(unsigned int x) { unsigned char m=0; LED_SEG7=CODEF; LED_SEG6=CODE_; LED_SEG5=CODE_; while(x>=10000){x=x-10000;m++;}LED_SEG4=NUMBER_CODEm;m=0; while(x>=1000){x=x-1000;m++;} LED_SEG3=NUMBER_CODEm;m=0; while(x>=100){x=x-100;m++;} LED_SEG2=NUMBER_CODEm;m=0; while(x>=10){x=x-10;m++;} LED_SEG1=NUMBER_CODEm;m=0; while(x>=1){x=x-1;m++;} LED_SEG0=NUMBER_CODEm;m=0; } / 函数名称:ReadKey() 函数功能:读取44矩阵按键的键值 输入参数:无 输出参数:按键的键值 全局变量:无 / unsigned char ReadKey(void) { unsigned char cord_y=0; if(cord_x 0x0f) { } } / 函数名称:Play() 函数功能:每10ms刷新显示和扫描按键 输入参数:无 输出参数:无 全局变量:flag_10ms,last_key,key,LED_DIGi,LED_SEGi / void Play(void) { unsigned char i=0; { } P0=0xff; } / 函数名称:Timer1() 函数功能:定时器0定时0.1ms 输入参数:无 输出参数:无 全局变量:PWM_ON为占空比,PWM_CYCLE为周期 / void timer1(void) interrupt 3 { static unsigned char pwm=0; pwm++; if(pwmPWM_ON) if(pwmPWM_CYCLE) { pwm=0; if(PWM_ON!=0) } } / 函数名称:Timer0() 函数功能:定时器0定时10ms 输入参数:无 输出参数:无 全局变量:flag_10ms / void Timer0(void) interrupt 1 { TL0=0xf0; } / 函数名称:main() 函数功能:主函数 输入参数:无 输出参数:无 全局变量:last_key,key,PWM_ON为占空比,PWM_CYCLE为周期 / void main (void) { TL1=0x9c; P2=0x00;/ULN2003有反向作用,ULN2003输出为高电平/ for(;;) { Play(); DisplayCode(PWM_ON); if((last_key NOKEY)(key KEY1)) { PWM_ON++; if(PWM_ON>=10) } } }