秒表清零c语言程序,显示的秒表 C语言程序

该博客介绍了如何使用C语言编写一个在1602LCD上运行的秒表程序。程序通过K1键开始/暂停/继续计时,K2键用于清零。代码中包含了中断服务函数,用于实时更新秒表时间,并在LCD上显示。此外,还实现了蜂鸣器提示和延时函数。
摘要由CSDN通过智能技术生成

41528d3028836879cd698677c3999917.gif显示的秒表 C语言程序

源程序代码: //名称:用1602LCD设计的秒表 //说明:首先按下K1键时开始计时,自此按下时暂停,第三次按下时继续累积计时,再次按下时停止计时,K2键用于清零秒表。 // #include #include #define uchar unsigned char #define uint unsigned int #define delayNOP ( ) ﹛_nop_( ); _nop_( ); _nop_( ); _nop_( );﹜ //LCD控制函数 void LCD_Initialize( ); void LCD_Set_POS(uchar); void LCD_Write_Date(uchar); void Display_String(uchar﹡,uchar); sbit K1 = P1^0; sbit K2 = P1^1; sbit BEEP = P3^0; sbit LCD_RS = P2^0; sbit LCD_RW = P2^1; sbit LCD_EN = P2^2; uchar KeyCount = 0; uchar code msg1[] = ﹛〞Second Watch 0 〞﹜; uchar code msg2[] = ﹛〞>>>> 0 〞﹜; uchar code Prompts[] [16] = { ﹛〞:: 1- - - - > 〞﹜, ﹛〞:: 1- - - - > ::2 〞﹜, ﹛〞:: 1 - >2 ::3- - > 〞﹜, ﹛〞:: 1 - >2 ::3- - >4 〞﹜ }; // 计时缓冲与显示缓冲 uchar Time_Buffer[] ={0,0,0,0}; uchar LCD_Display_Buffer[]={〞00: 00: 00:00〞}; // // 蜂鸣器 // void Beep () ﹛ uchar i,j = 70; for (i = 0;i< 180;i++ ) ﹛ while(--j);BEEP = ~BEEP; ﹜ BEEP = 0; ﹜ // // 延时 // void DelayX(uint ms) { uchar i; while(ms--) for (i= 0;i< 120;i++); ﹜ // // 显示计时 // void Show_Second( ) { uchar i; LCD_Set_POS(0 x45); //设置LCD显示起点 for(i = 3;i != 0 xff ;i--); { //将两位整数的1/100s,秒,分,时转换为8位数字字符 LCD_Display_Buffer[2﹡i+1] = Time_Buffer[i] / 10 + ˊ0 ˊ; LCD_Display_Buffer[2﹡i] = Time_Buffer[i] % 10 + ˊ0 ˊ; //在 = 3,2,1,0时分别显示时,分,秒,1/100s LCD_Writer_Date(LCD_Display_Buffer[2﹡i+1]) LCD_Writer_Date(LCD_Display_Buffer[2﹡i]) LCD_Writer_Date(ˊ: ˊ) } } // // Time0中断 // Void Time0( ) interrupt 1 using 0 { THO = -10000 / 256; TLO = -10000 % 256; Time_Buffer[0] ++ if(Time_Buffer[0] == 100) { Time_Buffer[0] = 0; Time_Buffer[1]++; } if(Time_Buffer[1] == 60) //秒 { Time_Buffer[1] = 0; Time_Buffer[2]++; } if(Time_Buffer[2] == 60) //分 { Time_Buffer[2] = 0; Time_Buffer[3]++; } if(Time_Buffer[3] == 24) //时 Time_Buffer[3] = 0; } // //主函数 // void main( ) { uchar i; IE = 0 x82; TMOD = 0 x01; THO = -10000 / 256; TLO = -10000 % 256; LCD_Initialize( ); Display_String(msg1,0 x00); Display_String(msg2,0 x40); While(1) { if(k1 == 0) { DelayX(100); i = ++KeyCount; switch (i) { case 1: case 3: TRO = 1; Display_String(Prompts[i-1],0); Break; case 2: case 4: TRO = 0; Display_String(Prompts[i-1],0); break; default:TRO = 0; break; } While (K1 == 0); // 等待释放K1键 Beep( ); } else if(K2 == 0) { TRO = 0; KeyCount = 0; for(i = 0;i < 4; i++) Time_Buffer [i] = 0; // 清零计数缓冲 Display_String(msg1,0); Beep( ); DelayX(100); while (K2 == 0); // 等待释放K2键 } Show_Second( ); } } // // 1602LCD显示驱动函数 // #include 〈reg51.h〉 #include 〈intrins.h〉 #define uchar unsigned char #define uint unsigned int #define DellayNOP( )﹛_nop_( ); _nop_( ); _nop_( ); _nop_( );﹜ sbit LCD_RS = P2^0; sbit LCD_RW = P2^1; sbit LCD_EN = P2^2; bit LCD_Busy_Check( ); void LCD_Initialize( ); void LCD_Set_PO

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值