📄 psy.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 + -