计控实验报告LED动态显示_动态显示实验报告
计控实验报告LED动态显示由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“动态显示实验报告”。
实验 LED动态显示
主要教学目标:
掌握LED动态显示的方法。
教学的方法及教学手段:讲授法,讨论法,练习法,实验法 教学重点及难点:LED动态显示 实验内容
1.LED用动态显示123456;
2.时间切换开关K1,可切换动态扫描时间间隔,1ms和50ms。
(一)作法
微型机定时地对显示器件扫描。
显示器件分时工作,每次只能有一个器件显示。1.LED用动态显示123456;
2.时间切换开关K1,可切换动态扫描时间间隔,1ms和50ms。
(二)1、8155 的PA口输出显示码,PB口用来输出位选码。
2、74LS07为 6 位驱动器,为LED提供一定的驱动电流3、8155的PB口经75452缓冲器/驱动器反向后,作为位控信号。
4、75452内部包括两个缓冲器/驱动器,它们各有两个输入端。
(三)显示原理1、8155初始化,建立显示缓冲区为 DISBUF, 存放待显示数据。
2、用软件译码法求出待显示的数对应的七段显示码,由PA口输出,并经过74LS07驱动后送到各显示器
3、由PB口输出位选码。各位从左至右依次显示,每个数码管显示1ms。显示完最后一位数后,再重复上述过程,(四)电路图
(五)参考程序 #include #include #include #define uint unsigned int #define uchar unsigned char /*8155控制字和PA,PB口地址定义*/ #define CON_8155 XBYTE[0x7F00] #define PA_8155 XBYTE[0x7F01] #define PB_8155 XBYTE[0x7F02] //数码管字型定义 uchar LEDDATA[]={
0x3F,/*0*/
0x06, /*1*/
0x5B, /*2*/
0x4F, /*3*/
0x66, /*4*/
0x6D, /*5*/
0x7D, /*6*/
0x07, /*7*/
0x7F, /*8*/
0x6F, /*9*/
0x77, /*A*/
0x7C, /*b*/
0x39,/*C*/
0x5E,0x79,0x71,};
/*d*/ /*E*/ /*F*/ //动态扫描时间间隔50ms标志位 bit g_delay50ms = 0;//函数原型声明 void Delay1ms(void);void Delay50ms(void);void main(){
uchar i, selectLED;IT0 = 1;EX0 = 1;EA = 1;CON_8155 = 0x03;selectLED = 0x20;while(1){
for(i=1;i
PA_8155 = LEDDATA[i];PB_8155 = selectLED;
//从8155 A口输出显示码
//PA口、PB口基本输入输出 //LED位选,从左到右扫描
//外部中断0,边沿触发
//从8155 B口输出位选码 //准备显示下一位 selectLED = _cror_(selectLED, 1);if(selectLED == 0x80){ }
if(g_delay50ms){ } else { } PB_8155=0x00;
//消隐 Delay1ms();
Delay50ms();
selectLED = 0x20;
//动态扫描时间间隔50ms
//动态扫描时间间隔1ms
} } }
void Int0(void)interrupt 0 { } void Delay1ms(void){ uchar i, j, k;for(j=142;j>0;j--)
for(i=1;i>0;i--)
} void Delay50ms(void){
unsigned char a,b;
for(b=173;b>0;b--)
for(a=143;a>0;a--);}
for(k=2;k>0;k--);g_delay50ms =!g_delay50ms;