|
50黑幣
我的問(wèn)題是為啥我用定時(shí)器8位自動(dòng)重裝初值可以改變頻率,但我用16自動(dòng)重裝初值卻改變不了頻率;一下是程序;
#include"stc15f2k60s2.h"
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
sbit lcden=P2^7;
sbit lcdrw=P2^6;
sbit lcdrs=P2^5;
#define CCP_S0 0x10 //P_SW1.4
#define CCP_S1 0x20 //P_SW1.5
#define FOSC 11059200
sbit s1=P2^0;
sbit s2=P2^1;
sbit s3=P2^2;
sbit s4=P2^3;
float zhankongbi=0x80;
uchar code table1[]="zkb";
void display1();
void pwminit();
void keyscan();
ulong high=10;
void delay(uint z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void pwmshe(uchar t)//這是占空比調(diào)節(jié)函數(shù)
{
CCAP1H=t;
CCAP1L=t;
}
void write_com(uchar com)// 液晶寫(xiě)命令函數(shù)
{
lcdrs=0;
lcdrw=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_date(uchar date)//液晶寫(xiě)數(shù)據(jù)函數(shù)
{
lcdrs=1;
lcdrw=0;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init() //初始化函數(shù)
{
uchar num;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);//設(shè)置顯示初始坐標(biāo)
for(num=0;num<3;num++)
{
write_date(table1[num]);
delay(5);
}
}
void initc()
{
AUXR=0x80; //時(shí)鐘不分頻,是原來(lái)51單片機(jī)的12倍;
TMOD=0x00;; //定時(shí)器0,為16位自動(dòng)重裝載定時(shí)器;
TMOD &= ~0x04;
TL0=(65536-FOSC/high);
TH0=(65536-FOSC/high)>>8;
INT_CLKO=0x01; //時(shí)鐘輸出
TR0=1;
}
void pwminit() //pwm初始化
{
CMOD=0x04;
CCON=0x00;
CL=0x00;
CH=0x00;
PCA_PWM1=0x00;
CCAPM1=0x42;
CCAP1H=0xff;
CCAP1L=0xff;
CR=1;
}
void main()
{
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P4M0 = 0x00;
P4M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
P6M0 = 0x00;
P6M1 = 0x00;
P7M0 = 0x00;
P7M1 = 0x00;
ACC = P_SW1;
ACC &= ~(CCP_S0 | CCP_S1); //CCP_S0=0 CCP_S1=0
P_SW1 = ACC; //(P1.2/ECI, P1.1/CCP0, P1.0/CCP1, P3.7/CCP2)
// ACC = P_SW1;
// ACC &= ~(CCP_S0 | CCP_S1); //CCP_S0=1 CCP_S1=0
// ACC |= CCP_S0; //(P3.4/ECI_2, P3.5/CCP0_2, P3.6/CCP1_2, P3.7/CCP2_2)
// P_SW1 = ACC;
// ACC = P_SW1;
// ACC &= ~(CCP_S0 | CCP_S1); //CCP_S0=0 CCP_S1=1
// ACC |= CCP_S1; //(P2.4/ECI_3, P2.5/CCP0_3, P2.6/CCP1_3, P2.7/CCP2_3)
// P_SW1 = ACC;
init();
initc();
pwminit();
display1();
while(1) //進(jìn)入主程序大循環(huán)
{
keyscan();
display1();
pwmshe(zhankongbi);
}
}
void keyscan()
{
if(s1==0)
{
delay(5);
if(s1==0)
{
while(!s1);
zhankongbi=zhankongbi-100;
}
}
if(s2==0)
{
delay(5);
if(s2==0)
{
while(!s2);
zhankongbi=zhankongbi+10;
if(zhankongbi>256)
zhankongbi=0x80;
}
}
if(s3==0)
{
delay(5);
if(s3==0)
{
high++;
if(high>65535)
high=0;
while(!s3);
}
}
if(s4==0)
{
delay(5);
if(s4==0)
{
high--;
if(high<0)
high=65535;
while(!s4);
}
}
}
void display1(float m)
{
float a=0,c=0;
uchar b=0;
m=zhankongbi;
m=(float)m*100/256;
a=m/100;
b=(uchar)m%100/10;
c=(uchar)m%10;
write_com(0x84);
write_date(a+0x30);
write_com(0x85);
write_date(b+0x30);
write_com(0x86);
write_date(c+0x30);
write_com(0x87);
write_date('%');
write_com(0x83);
write_date(':');
}
|
|