📄 timetable.c
字号:
#include <reg51.h>
#include <absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define COM8155 XBYTE[0x4000] //如何确定地址
#define PA8155 XBYTE[0x4001]
#define PB8155 XBYTE[0x4002]
#define PC8155 XBYTE[0x4003]
sbit P3_2=P3^2;
sbit P3_3=P3^3;
sbit P1_0=P1^0;
sbit P1_4=P1^4;
const uchar u=10,s=60,m=60,h=24; //0.1秒,秒,分,时的基制
uchar unit,second,minute,hour; //0.1秒,秒,时,分的单元
const uchar xdata segpt[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //显示段码可能修改
uchar code ctrl[2][5]={{6,10,0,0,1},{6,10,15,0,0}};
void show();
void control();
void int0(void) interrupt 0 using 0{
EX0=0;
if(P3_2==0){
minute++;
if(minute==m){ //与基制比较
minute=0;
}
}
show();
EX0=1;
}
void time0(void) interrupt 1 using 1{
TL0=0xb0;
TH0=0x3b;
if(unit==u){
unit=0;
}
else{
if(second==s){
second=0;
}
else{
if(minute==m){
minute=0;
}
else{
if(hour==h){
hour=0;
}
hour++;
}
minute++;
}
unit++;
}
control();
}
void int1(void) interrupt 2 using 2{
EX1=0;
if(P3_3==0){
hour++;
if(hour==h){
hour=0;
}
}
show();
EX1=1;
}
void main(){
COM8155=0x03;
SP=0x5a;
TMOD=0x01; //工作在方式1,16位计数器,采用12MHz的频率
TL0=0xB0; //设置计数初始值,定时时间为100ms,2^16-0x3CB0=50000
TH0=0x3B;
IE=0x87;
TR0=1;
do{
show(); //调用显示程序
}while(1);
}
void show(){ //显示程序,如何利用循环?
uint bufferh1=hour/10;
uint bufferh2=hour%10;
uint bufferm1=minute/10;
uint bufferm2=minute%10;
uint buffers1=second/10;
uint buffers2=second%10;
PA8155=0xFE; //选用共阴极数码管
PB8155=segpt[bufferh1]; //需要添加延时吗?如何添加
PA8155=0xFD;
PB8155=segpt[bufferh2];
PA8155=0xFC;
PB8155=segpt[bufferm1];
PA8155=0xFB;
PB8155=segpt[bufferm2];
PA8155=0xFA;
PB8155=segpt[buffers1];
PA8155=0xF0;
PB8155=segpt[buffers2];
}
void control(){
int i;
for(i=0;i<2;i++){ //注意修改i<2
if((hour==ctrl[i][0])&&(minute==ctrl[i][1])&&(second==ctrl[i][2])){
if(ctrl[i][3]==0){
P1_0=ctrl[i][4];
}
if(ctrl[i][3]==1){
P1_4=ctrl[i][4];
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -