⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 8952+1602测单片机内部时钟频率c程序.txt

📁 8952+1602测单片机内部时钟频率C程序
💻 TXT
字号:
//**********头文件区************
#include<reg52.h>
#include<math.h>
#include<absacc.h> 
#include<intrins.h>

//*********宏定义方便使用*******
#define uchar unsigned char
#define uint unsigned int

//*********定义变量区***********
sbit dula=P2^6;       //数码管段选
sbit wela=P2^7;       //数码管位选
sbit lcden=P3^4;      //LCD使能信号
sbit lcdrs=P3^5;      //LCD数据/命令选择信号
sbit K5=P3^7;         //按键
uchar count,k,key;
uchar tab_freq[]={0,0,0,10,0,0,11,12,13};
uchar tab_nofreq[]={14,14,0,10,0,0,11,12,13};
uchar code tab[]="0123456789.Khz";
uchar code tab_1[]="Freq:";
uchar code tab_time[]="2008-07-15-pm";

//===========================================================
//*********函数声明区*********** 
void int_time1();      //定时器0
void int_count0();     //计数器1
void trans_count();    //转换为10进制

void lcd_dis();          //lcd显示函数
void lcd_init();         //LCD初始化函数
void write_com(uchar);   //写命令函数
void write_data(uchar); //写数据函数
void delay(uint);        //延时函数
void freq_key();

//=================================================================

//*********主函数开始***********
void main()
{
TMOD=0x11;      //T0为计数模式:方式1 T1为定时模式:方式1 
TH0=0;          //T0计数初始值
TL0=0;
TH1=0x4c;       //T1定时初始值
TL1=0x00;       //50MS
EA=1;
ET1=1;            //允许T1定时中断
ET0=1;          //允许T0计数中断
lcd_init(); 
write_com(1);
while(1)   
{
freq_key();
trans_count();
lcd_dis();
}
}
//=================================================================
//*********T0计数函数开始**************
void int_count0() interrupt 1
{
k++;
}

//*********T1定时中断函数开始***********
void int_time1() interrupt 3
{
TH1=0x4c;
TL1=0x00;       //50MS
count++;
if(count>=20)
{
   count=0;
   TR0=0;              //到1秒T0停止计数
   TR1=0;              //T1停止定时
}
}


//*********数据转换函数开始**************
void trans_count()
{
unsigned long int z;
z=k*65536+TH0*256+TL0;
if(z>1000000)          //最大量程为999999
{z=999999;}
tab_freq[0]=z/100000;                        //十万位
tab_freq[1]=(z-tab_freq[0]*100000)/10000;      //万位
tab_freq[2]=(z-tab_freq[0]*100000-tab_freq[1]*10000)/1000;    //千位
tab_freq[4]=(z-tab_freq[0]*100000-tab_freq[1]*10000-tab_freq[2]*1000)/100; //十位
tab_freq[5]=(z-tab_freq[0]*10000-tab_freq[1]*1000-tab_freq[2]*100)%10; //个位;        //各位舍去为0
}

//====================================================================================
//*********lcd显示函数开始******
void lcd_dis()
{
uchar i,t;
for(i=0;i<5;i++)
{
write_data(tab_1[i]);     //显示"Freq:"
}

write_com(0x80+5);
for(i=0;i<9;i++)
{
t=tab_freq[i];
write_data(tab[t]);      //显示频率值
}

write_com(0x80+0x40);
for(i=0;i<13;i++)
{
   write_data(tab_time[i]);
}
write_com(0x80);
}
//====================================================================================
//*********LCD初始化函数开始****
void lcd_init()
{
dula=0;
wela=0;      // 关闭数码管显示
lcden=0;
write_com(0x38);      //设置显示模式:16X2,5X7,8位数据接口
write_com(0x0c);      //开显示,显示光标,光标闪烁
write_com(0x06);      //读写一个字符后,地址指针及光标加一,且光标加一整屏显示不移动
write_com(0x80);      //设置光标指针
}

//*********写命令函数开始*******
void write_com(uchar com)
{
lcdrs=0;      //低电平写命令
P0=com;       //写入命令
delay(3);     //延时约3ms
lcden=1;      //LCD使能端置高电平
delay(5);     //延时约5ms
lcden=0;      //LCD使能端拉低电平
}

//*********写数据函数开始*******
void write_data(uchar dat)
{
lcdrs=1;      //低电平写数据
P0=dat;       //写入命令
delay(3);     //延时约3ms
lcden=1;      //LCD使能端置高电平
delay(5);     //延时约5ms
lcden=0;      //LCD使能端拉低电平
}

//*********延时函数开始*********
void delay(uint k)
{
uint i,j;
for(i=k;i>0;i--)
   for(j=110;j>0;j--);
}

//=========================================================
//*********按键函数开始***************
void freq_key()
{
if(K5==0)
{
   delay(3);
   if(K5==0)
   {
     key++;
     while(K5==0);
     if(key==1)
     {
      TR0=1;
      TR1=1;
     }
     else        //确保启动一次只计数1次
     {
      TR0=0;
      TR1=0;
     }
   }
}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -