中国地质大学长城学院《单片机原理与应用》课程设计
OUTB0~OUTB3(B组显示信号):输出线。
这两组引线都是显示数据输出线,与多位数字显示的扫描线SL0~SL3同步,两组可以独立使用,也可以合并使用。
BD(显示消隐):输出线。低电平有效。该信号在数字切换显示或使用消隐命令时,将显示消隐。 3.2电路图
4. 流程图及源程序
4.1流程图
4
中国地质大学长城学院《单片机原理与应用》课程设计
N 有按键按下 初始化8279 初始化单片机 开始 Y 读按键 显示数据加1 4.2源程序
#include
判定键值 显示数据减1 显示012345 显示543210 //--------------8279端口定义-------------- #define com XBYTE[0X0001]//命令字地址 #define dat XBYTE[0X0000]//数据口地址 unsigned long data temp_r ; //频率值预存 sfr AUXR = 0x8e;
bit int_flag=0;/*中断标志位*/ sbit clflag=ACC^7;//ma步进值下标
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码管段码 unsigned char i,temp;//temp用于存放临时命令状态字 unsigned char key_value;//按键值
//-----------------------主要函数-------------------------- unsigned char keyin(void);//按键函数 void setup_8279(void);//8279初始化
5
中国地质大学长城学院《单片机原理与应用》课程设计
void display_led(void); //数码管显示 void delay(unsigned long i);//延时
void serial_init(void);//串口初始化函数,用于调试 void mode(void);
unsigned char a,b,k,num; void f1(void); void f2(void); void f3(void); void f4(void); void f5(void); void f6(void); void f7(void); void f8(void);
//-------------------------主函数-------------------------------- void main(void) {
AUXR = 0x02;/*STC单片机关内部RAM和开ALE*/
IE=0;
EA=0;
EX0=1; //开外部中断 IT0=0;
//-----------延时(必须加)------------- {
for(b=0;b<50;b++) {
for(k=0;k<50;k++);}
for(a=0;a<5;a++)
//f1~f8写您所需要的功能函数,通过按键触发
//------------------------------------ serial_init();//9600 8-N-1 setup_8279();
EA=1;//初始化 while(1)
mode(); //delay(1000);
delay(1000); { }
//------数码管显示---------------- void display_led(void) {
for(i=0;i<8;i++)
com=0x80+i; //写显示RAM,p301 dat=dispcode[num];//显示段码 delay(120);
{ }
6
中国地质大学长城学院《单片机原理与应用》课程设计
}
//-----8279初始化----------------- void setup_8279(void) { }
//-------------------步进按键or模式选择--------------- void mode(void) { }
//-----------按键读取------------------------------------------ unsigned char keyin(void) { }
void int_int0() interrupt 0 using 0
//外部中断函数
7
unsigned char value; com=0x40; value=dat;
//取键盘数据低位
return(value);
//发送读取指令
if(int_flag==1) //如果按键触发中断,int_flag=1 { }
EX0=0;
//在执行中断程序时,关中断暂停其他中断 //清除中断标志位
int_flag=0; //delay(2000); switch(key_value) { } EX0=1;
case 0x40:f1();break; case 0x41:f2();break; case 0x42:f3();break; case 0x43:f4();break; case 0x48:f5();break; case 0x49:f6();break; case 0x4a:f7();break; case 0x4b:f8();break; default:break;
//判断键值
com=0x00;//键盘,显示方式,8个位字符显示,左端输入;编码扫描键盘,-key锁存 com=0x21;//2分频
com=0xd1;//1101 0001b 清除所有显示 temp=com;//读状态字,p304 do{ACC=com;}
while(clflag==1);//清除起来比较慢,所以一条指令执行的时间不足以完成所有清除,故需等待
key_value=keyin();
value=value&0x7f;
中国地质大学长城学院《单片机原理与应用》课程设计
{
int_flag=1;
//EX0=0;
//key_value=keyin(); //SBUF=TCON; //while(TI==0);
//置中断标志位
//TI=0;
}void delay(unsigned long i) { }
void serial_init(void) //串口初始化函数bund:8-N-1 { }
void f1(void) {
num=num+1; if(num>9) num=0;
display_led( ); SBUF= key_value; }
void f2(void) {
num=num-1; if(num==255) num=9; display_led(); SBUF= key_value; }
void f3(void) {
for(i=0;i<8;i++) { }
SBUF= key_value;
}void f4(void) for(i=0;i<8;i++) {
com=0x80+i; //写显示RAM,p301 dat=dispcode[(7-i)];//显示段码
8
com=0x80+i; //写显示RAM,p301 dat=dispcode[i];//显示段码 delay(120); TMOD=0x20; TL1=0xfd;
TH1=0xfd; TR1=1; while(--i);