谁有proteus LED点阵时钟仿真,最好proteus图形,单片机是c51的哦,程序是c语言的哦?急急急!!!

谁有proteus LED点阵时钟仿真,最好proteus图形,单片机是c51的哦,程序是c语言的哦?急急急!!!,第1张

#include<reg51.h>

unsigned char seven_seg[]={0xc0,0xf9,0xa4,0xb0,0x99,

0x92,0x82,0xf8,0x80,0x90}

unsigned char flash,mode=0

char min=50,hour=12,hour_rom,min_rom,sec=25

unsigned char j,k

unsigned int i

unsigned char key_set_s,key_up_s,key_down_s,key_reset_s

sbit P0_7=P0^7

sbit key_set=P3^4

sbit key_up=P3^5

sbit key_down=P3^6

sbit key_reset=P3^7

sbit buzzer=P1^0

bit dop,bb    //声明

void delay(unsigned int x)     //延时

{

while(x--)

}

void timer0_isr(void) interrupt 1    //中断服务函数

{

TH0=0xf8     //为65535-2000=63535转化为16进制取高八位

TL0=0x2f    //取低八位

i++

bb=!bb

if(i>=250)     枯瞎基//半秒,五神闷百没谨一秒

{

i=0

k++

flash=~flash

dop=!dop

}

if(k>=2)     //大于二归零

{

k=0

sec++

}

if(sec>=60)      //秒

{

sec=0

min++

}

if(min>=60)     //分

{

min=0

hour++

}

if(hour>=24)   //小时

hour=0

P0=0xff  //P0初始化为全1 11111111

if(mode==0)   //正常显示

{

switch(j)   //控制语句

{

case 0:P0=seven_seg[sec%10]P2=0xfebreak  //秒个位

case 1:P0=seven_seg[sec/10]P2=0xfdbreak  //秒十位

case 2:P0=seven_seg[min%10]P0_7=dopP2=0xfbbreak

case 3:P0=seven_seg[min/10]P2=0xf7break

case 4:P0=seven_seg[hour%10]P0_7=dopP2=0xefbreak //dop为小数点

case 5:P0=seven_seg[hour/10]P2=0xdfbreak

}

}

////////////////////

if(mode==1)     //模式一 C1状态

{

switch(j)

{

case 0:P0=seven_seg[min%10]P2=0xfebreak

case 1:P0=seven_seg[min/10]P2=0xfdbreak

case 2:P0=seven_seg[hour%10]| flashP2=0xfbbreak    //flash为闪烁

case 3:P0=seven_seg[hour/10]| flashP2=0xf7break

case 4:P0=seven_seg[1]P2=0xefbreak    //1为C1状态

case 5:P0=0xc6P2=0xdfbreak     //0xc6为显示C

}

}

////////////////////

if(mode==2)      //模式二   C1状态

{

switch(j)

{

case 0:P0=seven_seg[min%10]| flashP2=0xfebreak

case 1:P0=seven_seg[min/10]| flashP2=0xfdbreak

case 2:P0=seven_seg[hour%10]P2=0xfbbreak

case 3:P0=seven_seg[hour/10]P2=0xf7break

case 4:P0=seven_seg[1]P2=0xefbreak

case 5:P0=0xc6P2=0xdfbreak

}

}

////////////////////

if(mode==3)    //模式三  C2状态

{

switch(j)

{

case 0:P0=seven_seg[min_rom%10]P2=0xfebreak

case 1:P0=seven_seg[min_rom/10]P2=0xfdbreak

case 2:P0=seven_seg[hour_rom%10]| flashP2=0xfbbreak

case 3:P0=seven_seg[hour_rom/10]| flashP2=0xf7break

case 4:P0=seven_seg[2]P2=0xefbreak

case 5:P0=0xc6P2=0xdfbreak

}

}

////////////////////

if(mode==4)      //模式四  C2状态

{

switch(j)

{

case 0:P0=seven_seg[min_rom%10]| flashP2=0xfebreak

case 1:P0=seven_seg[min_rom/10]| flashP2=0xfdbreak

case 2:P0=seven_seg[hour_rom%10]P2=0xfbbreak

case 3:P0=seven_seg[hour_rom/10]P2=0xf7break

case 4:P0=seven_seg[2]P2=0xefbreak

case 5:P0=0xc6P2=0xdfbreak

}

}

j++

if(j>=6)

j=0

}

void key(void)     //调用开关函数

{

////////////////

if(key_set==0)   //设置

{

delay(300)

if(key_set==0)

key_set_s=1

}

if(key_set==1&&key_set_s==1)

{

mode++

if(mode>=5)

mode=1

key_set_s=0

}

//////  ///

if(key_up==0)    //上调

{

delay(300)

if(key_up==0)

key_up_s=1

}

if(key_up==1&&key_up_s==1)

{

if(mode==1)hour++

if(mode==2)min++

if(mode==3)hour_rom++if(hour_rom>=24)hour_rom=0

if(mode==4)min_rom++if(min_rom>=60)min_rom=0

key_up_s=0

}

/////////////////

if(key_down==0)     //下调

{

delay(300)

if(key_down==0)

key_down_s=1

}

if(key_down==1&&key_down_s==1)

{

if(mode==1)hour--if(hour<0)hour=23

if(mode==2)min-- if(min<0)min=59

if(mode==3)hour_rom--if(hour_rom<0)hour_rom=23

if(mode==4)min_rom--if(min_rom<0)min_rom=59

key_down_s=0

}

/////////////////

if(key_reset==0)     //复位

{

delay(300)

if(key_reset==0)

key_reset_s=1

}

if(key_reset==1&&key_reset_s==1)

{

key_reset_s=0

mode=0

}

}

void timer0_init(void)   //timero初始化函数

{

TMOD=0x01    //方式1

TH0=0xf8

TL0=0x2f

EA=1 //中断开关

ET0=1  //中断小开关

TR0=1  //开始计数

}

void main(void)      //主函数

{

timer0_init()

while(1)

key()

{

if(hour==hour_rom&&min==min_rom)

buzzer=bb    //buzzer为蜂鸣器

}

}

数脊誉衫字时钟

这段程序是在PRTUES上完全好使

你虚伍可樱腔以根据 程序自己在PROTUES上画图

#include<reg51.h>

#define uint unsigned int

char code tab[]=

char code table[]=

sbit duan=P2^5

sbit wei=P2^6

sbit button1=P1^0

sbit button2=P1^1

sbit button3=P1^2

sbit button4=P1^3

sbit button5=P1^4

sbit button6=P1^5

sbit button7=P1^6

sbit button8=P1^7

void delay(uint z)

void start()

void display()

static char a,b,c,d,k,e,f,g,h

static char num1,num2,num3,num4

void main()

{ start()

while(1)

if(button2==0)

if(button3==0)

if(button4==0)

{ delay(10)

if(button4==0)

}}

while(button4==0)

}

if(button5==0)

{ delay(10)

if(button5==0)

}

while(button5==0)

}

if(button6==0)

{ delay(10)

if(button6==0)

}

while(button6==0)

}

if(button7==0)

{delay(10)

if(button7==0)

{num3--

if(num3<0)

}

while(button7==0)

}

if(button8==0)

{delay(10)

if(button8==0)

while(button8==0)

}

display()

} }

void start()

{ EA=1

TMOD=0x01ET0=1

TH0=(65536-4000)/256

TL0=(65536-4000)%256}

void delay(uint z )

{ uint x,y

for(x=zx>0x--)

for(y=120y>0y--)}

void timer1() interrupt 1

{ TH0=(65536-4000)/256

TL0=(65536-4000)%256

k++

if(k==2) //总忘k把清零

{k=0num1++

if(num1==100)

{num1=0num2++

if(num2==60){num2=0num3++

if(num3==60){num3=0num4++

if(num4==24)}

}} }}

void display()

{a=num1/10b=num1%10c=num2/10d=num2%10

e=num3/10f=num3%10g=num4/10h=num4%10

wei=1P0=0x80wei=0

duan=1P0=tab[b]duan=0delay(1)

P0=0x00

wei=1P0=0x40wei=0

duan=1P0=tab[a]duan=0delay(1)

P0=0x00

wei=1P0=0x20wei=0

duan=1P0=tab[d]duan=0

duan=1P0=table[d]duan=0delay(1)

P0=0x00

wei=1P0=0x10wei=0

duan=1P0=tab[c]duan=0delay(1)

P0=0x00

wei=1P0=0x08wei=0

duan=1P0=table[f]duan=0delay(1)

duan=1P0=tab[f]duan=0delay(1)

P0=0x00

wei=1P0=0x04wei=0

duan=1P0=tab[e]duan=0delay(1)

P0=0x00

wei=1P0=0x02wei=0

duan=1P0=tab[h]duan=0

duan=1P0=table[h]duan=0delay(1)

P0=0x00

wei=1P0=0x01wei=0

duan=1P0=tab[g]duan=0delay(1)

P0=0x00

}

程序和具体电路结合起来拦冲才能看出简弯歼问题,有一个办法可以不用具体研究代码和电路:把你调试用的汉字点阵全部改为0XFF,看是否该汉字所在位置是否全部显示,然后把第一个字节改为0X00或0XEF,看对应显示是否正确闹碧,也可以再改其他字节的点阵。用这种方法可以找出问题所在!

第7-15行是汉字的下半部分,据此查看一下程序和电路。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12272260.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存