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

📄 psy.c

📁 该程序能实现数字跑表
💻 C
字号:
/*********************************************************/
/**                单片机时钟程序                       **/
/**                作者:潘水洋				**/
/**                时间:2007 01/08/14时                **/
/**        National University of Defence Technology    **/
/**                                                     **/
/*********************************************************/

#include <absacc.h>
#include <reg51.h>
#include<intrins.h>

#define uchar unsigned char
#define uint8 unsigned char
#define uint16 unsigned int

#define LED1 XBYTE [0xA000]   //数码管地址
#define LED2 XBYTE [0xA001]
#define LED3 XBYTE [0xA002]
#define LED4 XBYTE [0xA003]
#define LED5 XBYTE [0xA004]
#define LED6 XBYTE [0xA005]
#define LED7 XBYTE [0xA006]
#define LED8 XBYTE [0xA007]

#define KEY XBYTE [0xA100]  //键盘地址


/*扫描键盘使用的变量 */
sbit first_row = P1^4;      //键盘第一行控制
sbit second_row = P1^3;     //键盘第二行控制
bit first_getkey = 0,control_readkey = 0;  //读键盘过程中的标志位
bit getkey = 0; //获得有效键值标志位 等于1时代表得到一个有效键值
bit keyon = 0;  //防止按键冲突标志位
uchar keynum = 0;  //获得的有效按键值寄存器


/*时钟变量*/ 
uchar hour,minute,second;
uint16  count;
uint16 i;


/*数码管显示使用的变量和常量*/
uchar lednum = 0;  //数码管显示位控制寄存器
uchar led[8] = {0,0,0,0,0,0,0,0};  //数码管显示内容寄存器
uchar code segtab[19] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x8c,0xff,0xb7}; //七段码段码表
                      // "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "P" ,"black" 




void leddisp(void); //数码管显示函数
void readkey(void); //读键盘函数



void intT0() interrupt 1 //T0 定时中断处理函数
{
    leddisp();  //每次定时中断显示更新一次
	TH0 =0xf0;  //定时器中断时间间隔 2ms
 	TL0 =0x60;
    count++; 
 	if(control_readkey == 1)  //每两次定时中断扫描一次键盘
   	{
    	readkey();
   	}
 	control_readkey = !control_readkey;      
if (count==500)             //定时到一秒,执行下列程序
   {count=0;
    second++;
    if(second>=60)
      {second=0;
       minute++;
       if (minute>=60)
         {minute=0;
            hour++;
           led[2]=17;     //到整点,模拟响铃

	for(i=0;i<8000;i++)
	{
		_nop_();	
	}
led[2]=18;
for(i=0;i<8000;i++)
	{
		_nop_();	
	}
	led[2]=17;
	for(i=0;i<8000;i++)
	{
		_nop_();	
	}
led[2]=18;
for(i=0;i<8000;i++)
	{
		_nop_();	
	}
	led[2]=17;
             if (hour>=24)
              {second=0;
               hour=0;
               minute=0;
              }
          }
      }
   led[0]=second%10;        //显示时,分,秒
   led[1]=second/10;
   led[2]=18;
   led[3]=minute%10;
   led[4]=minute/10;
   led[5]=18;
   led[6]=hour%10;
   led[7]=hour/10;
   }
 	
}


void main(void)
{

	TMOD = 0x01;    //定时器0工作在模式1
 	TH0 =0xf0;  //给定时器赋初值,定时 2ms
 	TL0 =0x60;
	TCON = 0x10;
 	ET0 = 1;
 	EA = 1;	
	while(1)
	{
 		if(getkey==1)  //判断是否获得有效按键
  	    {
     		getkey=0;
  			switch(keynum) //判断键值,对不同键值采取相应的用户定义处理方式
       		{
case 0x00: 		 //当按下第1行第一列按键时,

⌨️ 快捷键说明

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