
//这是一个四位数码管动态显示c语言程序,每隔一秒加一,直至加到9999为止
//使用时需采用锁存器
#include <reg52.h>
#include"stdio.h"
unsigned char code LED[]={0xc0, 0xf9, 0xa4,0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}
unsigned charLEDbuff[]={0xff,0xff,0xff,0xff}
//定义数码管的位选段
sbit SEG_bit_1 = P0^1
sbit SEG_bit_2 = P0^2
sbit SEG_bit_3 = P0^3
sbit SEG_bit_4 = P0^4
unsigned int cnt=0
unsigned int sec =0
unsigned int mini=0
unsigned int hour=0
unsigned char i=0
/*void delay(unsigned int z )
{
unsigned int x,y
for(x=zx>0x--)
for(y=110y>0y--)
}
*/
void interrupttimer0() interrupt 1 /*设置中断函数*/
{
TH0=0xfc
TL0=0x18
cnt++
//P1=0x80
//delay(1)
switch(i)
{
case0: SEG_bit_1 = 0SEG_bit_4 = 1P1=LEDbuff[0]i++break
case1: SEG_bit_4 = 0SEG_bit_3 = 1P1=LEDbuff[1]i++break
case2: SEG_bit_3 = 0SEG_bit_2 = 1P1=LEDbuff[2]&i++break
case3: SEG_bit_2 = 0SEG_bit_1 = 1P1=LEDbuff[3]i=0break
default:break
}
}
/************************************************
void serial_init()
{
//TMOD= 0x20 //定时器T/C1工作方式2
SCON= 0x50 //串口工作方式1,允许串口接收(SCON = 0x40 时禁止串口接收)
TH1= 0xF3 //定时器初值高8位设置
TL1= 0xF3 //定时器初值低8位设置
PCON= 0x80 //波特率倍频(屏蔽本句波特率为2400)
TR1= 1 //定时器启动
}
**********************************************/
void main()
{
//serial_init() //串口初始化
//TMOD=0x21/*设置定时器*/
TMOD=0x01
TH0=0xfc
TL0=0x18
TR0=1
EA=1/*设置中断*/
ET0=1
while(1)
{
if(0==TF0)
{
if(cnt>=1000)
{
cnt=0
sec++
if(sec>=60) {
sec=0mini++
if (mini>=60) {
mini=0hour++
if (hour>=24) hour=0
}
}
LEDbuff[0]=LED[sec%10]//*设置数码管显示位*/
LEDbuff[1]=LED[sec/10%10]
LEDbuff[2]=LED[mini%10]
LEDbuff[3]=LED[mini/10%10]
//TI=1 //使用printf函数前须先将发送标志位TI置1
// printf("%4d %x ,%x %x\n ",sec,LEDbuff[0],LEDbuff[1],LEDbuff[2])
// TI=0
}
}
}
}
动态显示的是有固定格式的,赋值,开显示,延时,关显示,假设p0口接数据显示位,p2口低4位接片选,p2=tab[1]
//赋值
p3_0=0
//开第一位显示
for(i=0i<200:i++)//延时
p3_0=1
//关第一位显示
p2=tab[2]
p3_1=0
//开第二位显示
for(i=0i<200:i++)
p3_1=1
这个程序就是让两个数码管分别显示1和2,注意程序开头包含头文件regx52.h,如果是包含reg52.h编译不了的
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)