shizhong.c

来自「一个遥控器的程序」· C语言 代码 · 共 144 行

C
144
字号
/******************************************************************************************
*文件: ZONGHE.C
*功能: 综合演示实验。
******************************************************************************************/
#include "reg931.h"
#include "intrins.h"
#define uchar unsigned char
sbit clk = P1^6;
sbit dat = P1^7;
sbit beep = P0^7;
uchar code led[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0~9 共阳段码表
uchar sec,min;
//******************************************************************************************
//delay: 延时子程序
//******************************************************************************************
void delay(void) //延时子程序
{
uchar x,y;
for(x=0;x<10;x++)
for(y=0;y<200;y++) ;
}
//******************************************************************************************
// senddat:串行发送一个字节数据
//******************************************************************************************
void senddat(uchar d) //串行发送一个字节数据
{
uchar j;
for(j=0;j<8;j++)
{
if(_crol_(d,j)&0x80) dat=1;
else dat=0;
clk=1;
clk=0;
}
}
//******************************************************************************************
// displaysecl:显示“秒”值个位
//******************************************************************************************
void displaysecl(void) //显示“秒”值个位
{
uchar secl;
P2=0xf7;
secl=led[sec%10];
senddat(secl);
delay();
}
//******************************************************************************************
// displaysech:显示“秒”值十位
//******************************************************************************************
void displaysech(void) //显示“秒”值十位
{
uchar sech;
P2=0xfb;
sech=led[sec/10];
senddat(sech);
delay();
}
//******************************************************************************************
// displayminl:显示“分”值个位
//******************************************************************************************
void displayminl(void) //显示“分”值个位
{
uchar minl;
P2=0xfd;
minl=led[min%10];
senddat(minl);
delay();
}
//******************************************************************************************
// displayminh:显示“分”值十位
//******************************************************************************************

void displayminh(void) //显示“分”值十位
{
uchar minh;
P2=0xfe;
minh=led[min/10];
senddat(minh);
delay();
}
//******************************************************************************************
// displayclose:关闭显示
//******************************************************************************************
void displayclose(void) //关闭显示
{
P2=0xff;
}
//******************************************************************************************
// display:时钟值显示
//******************************************************************************************
void display(void) //时钟值显示
{
uchar i;
for(i=0;i<140;i++) //在1s 内适当延时,保证显示的可视性
{
displaysecl(); //“秒”值个位显示
displaysech(); //“秒”值十位显示
displayminl(); //“分”值个位显示
displayminh(); //“分”值十位显示
displayclose(); //显示关闭
}
}
//******************************************************************************************
// int_rtc: 实时时钟中断入口
//******************************************************************************************
void int_rtc(void) interrupt 10 //实时时钟中断入口
{
uchar temp;
temp=RTCCON;
temp=temp&0x63; //清除RTC 中断标志
RTCCON=temp;
beep=1;
sec+=1;

if(sec==60)
{
sec=0;
min+=1;
if(min==60)
{
min=0;
beep=0;
}
}
display();
}
void main(void)
{
P0M1=0x00; //端口设置
P0M2=0x00;
P1M1=0x00;
P1M2=0x00;
P2M1=0x00;
P2M2=0x00;
sec=0; //设置初值
min=59;
RTCH=0x00; //设置RTC 定时值
RTCL=0xff;
WDCON=0xe0; //关闭WDT 定时器
IEN0=0xc0; //打开RTC 中断
RTCCON=0x43; //启动RTC
display();
while(1); //等待中断
}

⌨️ 快捷键说明

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