国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee
ELEOK
標(biāo)題:
基于51單片機(jī)定時(shí)器的秒表程序 只顯示 毫秒 秒 分鐘
[打印本頁(yè)]
作者:
coolfire
時(shí)間:
2021-4-14 16:04
標(biāo)題:
基于51單片機(jī)定時(shí)器的秒表程序 只顯示 毫秒 秒 分鐘
c代碼和仿真文件 毫秒級(jí)的秒表.zip
(131.34 KB, 售價(jià): 1 E幣)
2021-4-14 16:03 上傳
點(diǎn)擊文件名下載附件
售價(jià): 1 E幣
[記錄]
[
購(gòu)買
]
1.png
(54.53 KB)
下載附件
2021-4-14 16:01 上傳
單片機(jī)部分代碼:(完整代碼和仿真文件見本帖附件)
#include <AT89X52.H>
#define uint unsigned int //宏定義無符號(hào)整型數(shù)據(jù)
#define uchar unsigned char //宏定義無符號(hào)字符型數(shù)據(jù)
sbit key1=P3^6; //按鍵
sbit led=P1^0; //燈
sbit ledc=P1^1; //燈
uchar Cntus=0,Cnt10ms=0,Cnt1s=0,Cnt1min=0;//中斷計(jì)時(shí)變量
bit stop=0; //停止標(biāo)志
void display(); //顯示程序聲明
void keyscan(); //按鍵掃描程序聲明
/**************************************
1602液晶
**************************************/
sbit RS = P2^5;
sbit RW = P2^6;
sbit E = P2^7;
/**********************************************************
函數(shù)說明: 延時(shí)程序
**********************************************************/
void delay(uchar t)
{
uint j;
uchar i;
for(i=0;i<t;i++)
for(j=0;j<1000;j++);
}
/**************************************
短延時(shí)
**************************************/
void delay5ms()
{
uchar i,v,k;
for(i=1;i>0;i--)
for(v=168;v>0;v--)
for(k=22;k>0;k--);
}
/**************************************
寫指令
**************************************/
void lcd_Write_com(uchar com)
{
RS=0; //定義指令寄存器
RW=0; //寫允許
P0=com; //寫指令
delay5ms(); E=1; //片選端上拉
delay5ms(); E=0; //下降沿鎖存
}
/**************************************
寫數(shù)據(jù)
**************************************/
void lcd_write_date(uchar date)
{
RS=1; //定義數(shù)據(jù)寄存器
RW=0; //寫允許
P0=date; //寫數(shù)據(jù)
delay5ms(); E=1; //片選端上拉
delay5ms(); E=0; //下降沿鎖存
}
/**************************************
顯示程序
**************************************/
void dis_lcd1602(uchar x,uchar y,uchar dat)
{
uchar add;
if(y==1) add=(0x80+x);
if(y==2) add=(0xc0+x);
lcd_Write_com(add); //寫指令
lcd_write_date(dat); //寫數(shù)據(jù)
}
/**************************************
液晶初始化
**************************************/
void lcd1602_init()
{
lcd_Write_com(0x38); //設(shè)置8位格式,2行,5*7
lcd_Write_com(0x01); //清屏
lcd_Write_com(0x0c); //整體顯示,關(guān)光標(biāo),不閃爍
lcd_Write_com(0x06); //設(shè)定輸入方式,增量不移位
lcd_Write_com(0x80); //初始坐標(biāo)
}
/**************************************
液晶顯示漢字程序
**************************************/
void hz_lcdDis(uchar x,uchar y,uchar *p) //漢字顯示
{
uchar i=0,temp;
if(x)temp = 0x40; else temp = 0;
for(i=y;*p!='\0';i++,p++)
{
lcd_Write_com(i|0x80+temp);
lcd_write_date(*p);
delay5ms();
}
}
/**************************************
液晶顯示數(shù)字程序
**************************************/
void num_lcdDis(uchar X,uchar Y,uint num,uchar n)
{
uint i=0,temp,hang;
n +=1;
if(X)hang = 0x40;else hang = 0;
for(i=(n-1);i>0;i--)
{
lcd_Write_com((i+Y-1)|0x80+hang); //從個(gè)位開始顯示
temp = num%10+0x30;
lcd_write_date(temp);
delay5ms();
num/=10;
}
}
void num_lcdDis1_1(uint num)//input 電壓 整數(shù)部分
{
uint i,temp,x;
x=5;
for(i=0;i<2;i++)
{ x--;
lcd_Write_com(0x80+x); //寫指令
temp = num%10+0x30;
lcd_write_date(temp);// 寫數(shù)據(jù)
num/=10;
}
}
/**************************************
液晶顯示數(shù)字程序
**************************************/
void num_lcdDisx(uchar X,uchar Y,uint num,uchar n)
{
uint i=0,temp,hang;
n +=1;
if(X)hang = 0x40;
else hang = 0;
for(i=(n-1);i>0;i--)
{
lcd_Write_com((i+Y-1)|0x80+hang);//從個(gè)位開始顯示
temp = num%10+0x30;
lcd_write_date(temp);
delay5ms();
num/=10;
}
}
/***********按鍵掃描程序****************/
void keyscan()
{
static uint count2=0,count1=0; //計(jì)數(shù)變量
static bit key_sign=0; //按鍵自鎖標(biāo)志
if(key1==0) //檢測(cè)按鍵為0
{ delay(50);
if(key1==0){
count1++;
stop=!stop;
}
//計(jì)數(shù)延時(shí)消抖
}
else
{
count1=0; //計(jì)數(shù)變量清0
}
}
/***********定時(shí)器初始化程序****************/
void Timer0Init(void) //2.5毫秒@11.0592MHz
{
TMOD = 0x01; //設(shè)置定時(shí)器模式
TL0 = 0x00; //設(shè)置定時(shí)初值
TH0 = 0xF7; //設(shè)置定時(shí)初值
TR0 = 1; //定時(shí)器0開始計(jì)時(shí)
EA=1; //開總中斷
ET0=1; //開定時(shí)器0中斷
}
/***************主程序****************/
void main()
{
int cm=0;
Timer0Init(); //定時(shí)器初始化
lcd1602_init();//液晶初始化
hz_lcdDis(0,0,"Timer system"); //啟動(dòng)電源
hz_lcdDis(1,7,": :"); //歡迎你
led=1;
while(1)
{
// Cnt1min Cnt1s Cnt10ms
num_lcdDis(1,5,Cnt1min,2);
num_lcdDis(1,8,Cnt1s,2);
num_lcdDis(1,11,Cnt10ms,2);
if(Cnt1min>9){
led=0;
}
keyscan(); //按鍵掃描
}
}
/**************中斷服務(wù)程序*****************/
void timer0() interrupt 1 //2.5毫秒@11.0592MHz
{
TL0 = 0x00; //設(shè)置定時(shí)初值
TH0 = 0xF7; //設(shè)置定時(shí)初值
Cntus++; //中斷變量Cntus自+1
if(Cntus>=4) //10ms
{
Cntus=0; //清0
if(stop==1) //啟動(dòng)
Cnt10ms++; //10毫秒計(jì)數(shù)
if(Cnt10ms>=100)
{
Cnt10ms=0;
ledc=!ledc;
Cnt1s++;
//秒計(jì)數(shù)
if(Cnt1s>=60)
{
Cnt1s=0;
Cnt1min++; //分計(jì)數(shù)
if(Cnt1min>=100)
Cnt1min=0;
}
}
}
}
復(fù)制代碼
歡迎光臨 ELEOK (http://m.afoofa.cn/)
Powered by Discuz! X5.0