资源预览内容
第1页 / 共18页
第2页 / 共18页
第3页 / 共18页
第4页 / 共18页
第5页 / 共18页
第6页 / 共18页
第7页 / 共18页
第8页 / 共18页
第9页 / 共18页
第10页 / 共18页
亲,该文档总共18页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
#include/头文件/* 定义MAX7219 内部寄存器 */#define REG_DECODE 0x09 / 译码方式寄存器#define REG_INTENSITY 0x0a / 亮度寄存器#define REG_SCAN_LIMIT 0x0b / 扫描界限寄存器#define REG_SHUTDOWN 0x0c / 停机寄存器#define REG_DISPLAY_TEST 0x0f / 显示测试寄存器#define INTENSITY_MIN 0x00 / 最小显示亮度#define INTENSITY_MAX 0x0f / 最大显示亮度/* 定义各路交通灯信号 */sbit ALG = P12;/ A路左转绿灯sbit ALR = P10;/ A路左转红灯sbit ALY = P11;/ A路左转黄灯sbit ASG = P15;/ A路直行绿灯sbit ASR = P13;/ A路直行红灯sbit ASY = P14;/ A路直行黄灯sbit BLG = P20;/ B路左转绿灯sbit BLR = P16;/ B路左转红灯sbit BLY = P17;/ B路左转黄灯sbit BSG = P23;/ B路直行绿灯sbit BSR = P21;/ B路直行红灯sbit BSY = P22;/ B路直行黄灯/* 定义MAX7219 端口信号 */sbit DATA = P25;sbit LOAD = P26;sbit CLK = P27;/* 定义设定按键 端口信号 */sbit next_switch = P05;sbit add_switch = P06;sbit sub_switch = P07;/* 时间及显示全局变量 */int aa,shi,ge,shi1,ge1,temp1;int p=0;int set1=10;int set2=5;int flag = 0;int gt4 = 14,13,12,11;/*数码管显示0-9,A,L*/unsigned char table=0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x73,0x77,0x0e;unsigned char table0=0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08;/*子函数声明*/void delay(int z);/延迟void xtimer0();/定时中断void xtimer1();void check();void step1();void step2();void step3();void step4();void step5();void step6();void step7();void step8();void step9();void xint0();void xint1();void A_S_G();void B_S_G();int judge_key();void set_led_time();static void Write (unsigned char reg_number, unsigned char dataout);/向指定的MAX7219内部寄存器写入数据static void SendByte (unsigned char dataout);/向MAX7219发送一个字节串行数据static unsigned char LookupCode (int num);/查段码表将显示字符转换为显示段码static unsigned char LookupNum (int num);void Init (void);/对MAX7219进行初始化,调用任何其他函数之前必需先调用此函数void ShutdownStart (void);/进入停机方式void ShutdownStop (void);/结束停机方式void DisplayTestStart (void);/启动显示测试void DisplayTestStop (void);/结束显示测试void SetBrightness (char brightness);/设置LED显示亮度,亮度值(brightness = 0-15)void Clear (void);/关闭全部显示器void display (int num0, int num);/在指定数位上显示字符 /*主函数*/void main()EA=1;/开中断EX0=1;/允许外部中断INT0中断IT0=0;/定义INT0触发方式PX0=1;/中断优先级高EX1=1;/允许外部中断INT1中断IT1=0;/定义INT1触发方式PX1=1;/中断优先级高check();/开机自检step1();/第1个状态P0=0xff; while(1) step2();/第2个状态 step3();/第3个状态 step4();/第4个状态 step5();/第5个状态step6();/第6个状态step7();/第7个状态step8();/第8个状态step9();/第9个状态 void check()/开机自检子程序ASG=1;ALG=1;ASR=1;ALR=1;ASY=1;ALY=1;BLG=1;BSG=1;BLR=1;BSR=1;BLY=1;BSY=1;delay(600);ASG=0;ALG=0;ASR=0;ALR=0;ASY=0;ALY=0;BLG=0;BSG=0;BLR=0;BSR=0;BLY=0;BSY=0;Init (); / 初始化MAX7219ShutdownStart (); / 停机 ShutdownStop (); / 结束停机DisplayTestStart (); / 显示测试DisplayTestStop (); / 结束显示测试SetBrightness (0x0f); / 设置显示亮度/display (1,1); / 第1位LED显示1/display (2,2); / 第2位LED显示2/display (3,3); / 第3位LED显示3/display (4,4); / 第4位LED显示4/display (5,5); / 第5位LED显示5/display (6,6); / 第6位LED显示6/*定时中断子函数*/void xtimer0() interrupt 1TH0=0x4c;TL0=0x00;aa+;/*延时子函数*/void delay(int z)int i,j;for(i=0;iz;i+)for(j=0;j110;j+);void step1()/第一个状态:AB道均亮红灯3S int temp;temp=4;/变量赋初值TMOD=0x11;/定时器T0工作于方式1TH1=0x20;TL1=0x10;TH0=0x4c;TL0=0x00;/定时器赋初值 11.0592MHZEA=1;/开中断ET0=1;/开定时中断TR0=1;/开定时器T0ET1=1;TR1=1;while(1)ALR=1;ASR=1; BLR=1;BSR=1;ALG=0;ASG=0;BLG=0;BSG=0;ALY=0;BLY=0;if(aa=20)/定时20*50MS=1Saa=0;/定时完成一次后清0temp-;/变量自减if(temp0)break;shi=temp/10;/显示十位ge=temp%10;/显示个位 display(1,shi);display(2,ge);display(3,shi);display(4,ge);void step2()/第二个状态:A直行绿 A左红 B全红int temp;temp=gt0+1;/变量赋初值temp1=temp+gt1;TMOD=0x11;/定时器T0工作于方式1TH0=0x00;TL0=0x00;/定时器赋初值EA=1;/开中断ET0=1;/开定时中断TR0=1;/开定时器T0ET1=1;TR1=1;while(1) ASG=1;ASR=0;ALR=1;ALG=0;BLG=0; BLR=1;BSG=0;BSR=1;ALY=0; BLY=0;if(aa=20)/定时20*50MS=1Saa=0;/定时完成一次后清0temp-;/变量自减temp1-;if(temp=5)temp1+;break;shi=temp/10;/显示十位ge=temp%10;/显示个位
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号