您好,欢迎来到抵帆知识网。
搜索
您的当前位置:首页单片机秒表程序

单片机秒表程序

来源:抵帆知识网


#include

#include

#define uchar unsigned char

sbit RS = P2^4; //定义端口

sbit RW = P2^5;

sbit EN = P2^6;

sbit s0=P2^0; // 暂停开始键

sbit s1=P2^1; //清零键

uchar ge,shi,bai;

uchar time=0;

uchar count;

uchar press0_num=0; //s0按键次数

uchar press1_num=0; //s1按键次数

uchar code table[]=\"liu hui sb\";

void delayus(uchar t) //延时um级

{while(--t);}

void delay(uchar z)

{ while(z--)

{

delayus(245);

delayus(245);

}

}

bit lcd_check_busy() {

//延时函数ms 级

//判忙函数

P0=0xff;

RS=0;

RW=1;

EN=0;

_nop_();

EN=1;

return (bit)(P0&0x80); //忙返回值是一,不忙是零

}

void lcd_write_com(uchar com) //写命令

{

while(lcd_check_busy());

RS=0;

RW=0;

EN=1;

P0=com;

_nop_();

EN=0;

}

void lcd_write_date(uchar date) {

while(lcd_check_busy());

RS=1;

RW=0;

EN=1;

P0=date;

_nop_();

//写数据

EN=0;

}

void lcd_clear()

{

lcd_write_com(0x01);

delay(5);

}

void LCD_Write_String(uchar x,uchar y,uchar *s) {

if (y==0)

{

lcd_write_com(0x80+x); //表示第一行

}

//液晶写入一个字符串

else

{

lcd_write_com(0xC0+x); //表示第二行

}

while (*s)

{

lcd_write_date( *s); s++;

}

}

void lcd_init() {

lcd_write_com(0x38); //初始化函数

/*显示模式设置*/

delay(5);

lcd_write_com(0x38);

delay(5);

lcd_write_com(0x0c); lcd_write_com(0x06); lcd_write_com(0x01); lcd_write_com(0x80); }

void keyscan()

{

if(!s0) { delay(20);

//设置开显示,不显示光标

//写第一个字符后指针加一

//显示清零,数据指针指零

//显示第一行

//按键按下

//延时

if(!s0) //确定按下

{

while(!s0); //松手有效

press0_num++;

if(press0_num==1) //按一下

{

TR0=0; //d定时器关闭

}

if(press0_num==2) //按两下

{

TR0=1; //定时器开始

press0_num=0; //按键次数清零

}

}

}

if(!s1)

{

delay(20);

if(!s1)

{

while(!s1);

press1_num++;

if(press1_num==1)

{

TR0=0;

time=0; //计时从零开始

}

if(press1_num==2)

{

TR0=1;

press1_num=0;

}

}

}

}

void main()

{

TMOD=0x11; TH0=(66536-47040)/256;

//选择中断方式3

//覆初值

TL0=(66536-47040)%256;

EA=1;

ET0=1;

TR0=1;

lcd_init();

while(1)

{

keyscan();

s0=1;

s1=1;

if(count==20)

{

count=0;

time++;

if(time>100)

time=0;

lcd_clear();

ge=time%10;

shi=time/10%10;

bai=time/100;

lcd_write_com(0x80); //选地址

lcd_write_date(0x30+bai); 个字符后指针加一

//十位地址 lcd——init中有0x06有写第一

lcd_write_date(0x30+shi); //十位地址

lcd_write_date(0x30+ge); //个位地址

LCD_Write_String(1,1,table);

}

}

}

void timer0() interrupt 1

{

TH0=(66536-47040)/256;

TL0=(66536-47040)%256;

count++;

}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- dfix.cn 版权所有 湘ICP备2024080961号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务