掌握74LS164驱动数码管显示和用C51编写显示函数的方法。能够使数码管上显示的数据以左移的方式显示出自己学号的全部(每隔1S钟左移一位)
单片机源程序如下:
- #include <reg51.h> //头文件
- #define uchar unsigned char
- #define uint unsigned int //宏定义
- uchar disbuf[12];
- uchar aa,bb;
- void sx(void);
- void delay(uint z) //延时1ms函数
- {
- uint i,j;
- for(i=0;i<z;i++)
- for(j=0;j<121;j++);
- }
- void intimer1(void) interrupt 2 //外部中断1中断服务函数
- {
- for(aa=0;aa<12;aa++)
- {
- disbuf[aa]=17;
- } //清显示
- }
- void display(void) //显示函数
- {
- uchar s,n;
- code uchar tab[]={0x88,0Xbe,0Xc4,0X94,0Xb2,0X91,0X81,0Xbc,0X80,0X90,
- 0xa0,0x83,0xc9,0x86,0xc1,0xe1,0xa2,0xff}; //数码管显示数据字型码表
- for(s=0;s<=11;s++)
- {
- SBUF=tab[disbuf[s]]; //送显示数据
- for(n=0;n<4;n++)
- delay(250); //软件延时1s钟
- }
- }
- void main(void)
- {
- EA=1;
- EX1=1;
- do
- {
- for(bb=0;bb<12;bb++)
- {
- disbuf[bb]=17;
- } //将显示数据清零
- delay(2); //延时2MS
- sx(); //送显示函数
- display(); //显示函数
- }while(1);
- }
- void sx(void) //送显示函数
- {
- disbuf[0]=0; //显示数据的第1位
- disbuf[1]=9; //显示数据的第2位
- disbuf[2]=1; //显示数据的第3位
- disbuf[3]=0; //显示数据的第4位
- disbuf[4]=1; //显示数据的第5位
- disbuf[5]=0; //显示数据的第6位
- disbuf[6]=1; //显示数据的第7位
- disbuf[7]=3; //显示数据的第8位
- disbuf[8]=2; //显示数据的第9位
- disbuf[9]=17;
- disbuf[10]=17;
- disbuf[11]=17; //最后三位用于与下一次显示数据区分开
- }
复制代码
|