桂林电子科技大学课程设计(论文)报告用纸 第 18 页 共 26 页
附 录
原理图
桂林电子科技大学课程设计(论文)报告用纸 第 19 页 共 26 页
PCB图
程序代码:
#include
#define uchar unsigned char #define uint unsigned int uchar i=0xfe;//显示位选初值 uchar ge,shi,bai;
uint count =887;//脉搏次数 uint t;
uchar disp[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管编码
桂林电子科技大学课程设计(论文)报告用纸 第 20 页 共 26 页
sbit P0_0=P0^0; //黄灯 sbit P0_1=P0^1; //红灯 sbit P0_2=P0^2; //绿灯 sbit P2_4=P2^4; //按键 //sbit P3_2=P3^2;
sbit P3_6=P2^3; //蜂鸣器 bit BELL=0; //响铃标志
/**************************************/ /* / /* 软件延时函数 /
/* / /**************************************/ void delay10ms(void) {
uchar i,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--); }
/**************************************/ /* / /* 显示函数 / /* / /**************************************/ void display(uchar i,uchar number) {
P2=i;
P1=disp[number]; }
/**************************************/ /* / /* 定时器0中断处理函数 / /* 用于定时一分钟 / /**************************************/
void timer0(void) interrupt 1 {
TH0=0x3c; TL0=0xb0; t++;
if(t==1200) {
桂林电子科技大学课程设计(论文)报告用纸 第 21 页 共 26 页
EA=0; t=0;
bai=count/100;
shi=(count0)/10; ge= (count0);
if(count<60)//设置最低值 {
P0_0=0; P3_6=0; BELL=1; }
else if(count>120) //设置最高值 {
P0_1=0; P3_6=0; BELL=1; } else P0_2=0; EA=1;
TR0=0; //开定时器0
ET0=0; //开定时器0中断 EX0=0; //开外部中断 } }
/**************************************/ /* / /* 定时器1中断处理函数 / /* / /**************************************/
void timer1_int(void) interrupt 3 {
TH1=-5000/256; TL1=-5000%6;
bai=count/100; //提取三位数字 shi=(count0)/10; ge= (count0);
switch(i)//选择数码管位 {
case 0xfe: display(i,ge);break;
桂林电子科技大学课程设计(论文)报告用纸 第 22 页 共 26 页
case 0xfd: display(i,shi);break; case 0xfb: display(i,bai);break; }
i=i<<1; //流水效果 i=i|0x01;
if(i==0xf7) //右移三位后置初值 i=0xfe;
if(BELL) //蜂鸣器响 {
P3_6=0; } }
/**************************************/ /* / /* 初始化函数 / /* / /**************************************/ void init() {
t=0;
TMOD=0x11; //定时器0,1的定时方式1都打开 TH1=-5000/256; //定时器1定时5ms TL1=-5000%6;
TH0=0x3c; //定时器0定时50ms TL0=0xb0;
EA=1; // 开总中断
ET1=1; //开定时器1中断 TR1=1; //开定时器1
TR0=1; //开定时器0
ET0=1; //开定时器0中断
IT0=1; //下降沿促发 EX0=1; //开中断0 }
/**************************************/ /* /
桂林电子科技大学课程设计(论文)报告用纸 第 23 页 共 26 页
/* 按键软件处理函数 / /* / /**************************************/ void key() {
if(P2_4==0) {
delay10ms(); delay10ms(); if(P2_4==0) {
// TR0=1; //开定时器0 // ET0=1; //开定时器0中断 // EX0=1; //开外部中断 init();
count=0; //显示清零 BELL=0; P0=0xff; }
while(P2_4==0);//等待按键释放,如果键未释放则一直在此等待。不过此处开中断非计数可不写 } }
void main() {
//P3_2=0; init();
TR0=0; //关定时器0
ET0=0; //关定时器0中断 EX0=0; //P3_6=0; while(1) {
key(); } }
void int0(void) interrupt 0 {
count++; }