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

📄 time.c

📁 两个7段共阳LCD显示器
💻 C
字号:
#include <reg52.h>

#define scr1 P1  //个位显示屏(右),P1~P7
#define scr10 P2 //十位显示屏(左),P2~p7
//晶振频率20MHZ,最小计时时间0.6us,此程序选用计时方式2,预置数设为-167,溢出一次为0.100ms

sbit keystart = P3 ^ 5;  //开始键(k3)
sbit key1 = P1 ^ 7;      //个位调整键(k1)
sbit key10 = P3 ^ 4;     //十位调整键(k2)
signed char s1 = 0;    //记录个位的值
signed char s10 = 0;   //记录十位的值

void main(void)
{
    bit k1;              //记录key1键的状态,0松开,1按下
	bit k10;             //记录key10键的状态,0松开,1按下
	bit ks;              //记录keystart键的状态,0松开,1按下
	unsigned int t1;    //延时1秒   
    unsigned char num[10] =
                            //0    1    2    3    4    5    6    7    8    9
                            {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳极
    unsigned char zt; //zt =
                      //     0 起始状态,等待输入,显示器显示00
 		     		  //     1 等待启动状态,此时十位和个位不同时为0
			    	  //     2 倒计时状态
				      //     3 暂停状态
	TMOD = (TMOD&0xf0) | 0x0a;  //设置计时方式2	
	TL0 = -167;
	TH0 = -167;
    while(1)
	{	
	    if(zt == 0)
		{
		    s1 = 0;
			s10 = 0;
		}
	    scr1 = num[s1];
	    scr10 = num[s10];
		//key1键检测
		if(k1 == 0 && zt != 2 && zt != 3)                   
		{
		    if(key1 == 0)                   //检测到个位键按下
			{		
			    k1 = 1;			 
		        if(++s1 > 9)
		    	{
		    	    s1 = 0;
		    		if(++s10 > 9)s10 = 0;  //向十位进位
				}				
	        	if(s1 != 0 || s10 != 0)zt = 1;
				    else zt = 0;
			}
		}
		if(k1 == 1 && key1 == 1)k1 = 0;     //松开个位键
		//key10键检测
		if(k10 == 0 && zt != 2 && zt != 3)                   
		{
		    if(key10 == 0)                   //检测到个位键按下
			{		
			    k10 = 1;			 
		        if(++s10 > 9)
		    	{
		    	    s10 = 0;
				}				
	        	if(s1 != 0 || s10 != 0)zt = 1;
				    else zt = 0;
			}
		}
		if(k10 == 1 && key10 == 1)k10 = 0;     //松开个位键

		//状态辨别
		if(s1 == 0 && s10 == 0)zt = 0;
		//keystart键检测
		if(ks == 0 && zt != 0)                   
		{
		    if(keystart == 0)                   //检测到start键按下
			{		
			    ks = 1;			 	    
		        if(zt == 1)
				{
				    zt = 2;
					TR0 = 1;
				}
		    	else if(zt == 2)
				{
				    zt = 3;
					TR0 = 0;
				}
		    	else if(zt == 3)zt = 0;
			}
		}
		if(ks == 1 && keystart == 1)ks = 0;     //松开start键
		if(zt == 2)
		{
		    if(TF0 == 1)
			{
			    TF0 = 0;
				if(++t1 >= 10000)
				{
				    t1 = 0;
					if(--s1 < 0)
					{
					    s1 = 9;
						if(--s10 < 0)
						{       
						    TR0 = 0;
						    zt = 0;
					    }
					}
				}
			}
		}
	} 
}

⌨️ 快捷键说明

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