资源简介
利用C51单片机做的一个关于交通灯的设计,其中包含按键中断的扩展,压缩文件内包含代码、Proteus仿真和实验报告。(C语言)
代码片段和文件信息
#include
#include
#include
#define uint unsigned int
#define uchar unsigned char
#define PA XBYTE[0x7F00] //PA端口地址
#define PB XBYTE[0x7F01]
#define PC XBYTE[0x7F02]
#define COM XBYTE[0x7F03]
//char code dx516[3] _at_ 0x003b;
uchar tempaann;
sbit shi=P3^0;
sbit ge=P3^1; /*对要使用的单片机各个口进行定义*/
bit flag=0;
sbit key1=P2^0;
sbit key2=P2^1;
sbit key3=P2^2;
sbit key4=P2^3;
sbit key5=P2^4;
sbit key6=P3^3;
uchar code table[]={
0x3f0x060x5b0x4f
0x660x6d0x7d0x07
0x7f0x6f0x770x7c
0x390x5e0x790x71}; /*将数字0123456789的16进制数定义成数组用以显示*/
//定义所有函数
void delay(uint z);
void disp(uint n);
void xint0();
void xint1();
void timer0();
void nb_flash(void);
void dx_flash(void);
void nanbei();
void dongxi();
void nanbeizuo();
void dongxizuo();
void dongxizuogreen();
void nanbeizuogreen();
void dongxigreen();
void nanbeigreen();
void allred();
void allyellow();
//主函数
void main()
{
uint num;
num=0;
aa=0;
COM =0x82; //PA口输出,PB口输入,PC口输出
TMOD=0x01; //定时器工作方式1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1; //开启总中断
ET0=1; //开启定时器中断
TR0=1; //开启定时器0
EX0=1; //外部中断0允许标志
IT0=0; //外部中断0电平触发
EX1=1; //外部中断1允许标志
IT1=0; //外部中断1电平触发
while(1){
nanbei();
nb_flash();
nanbeizuo();
dongxi();
dx_flash();
dongxizuo();
}
}
void delay(uint z) //延时函数
{
uint xy;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void timer0() interrupt 1 //定时器0中断
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
if(aa==18)
{
aa=0;
flag=1;
}
}
void disp(uint n) //数码管显示函数
{
while(!flag)
{
ge=0;
PC=table[n%10];
delay(50);
shi=1;ge=1;
shi=0;
PC=table[n/10];
delay(50);
shi=1;ge=1;
}
if(flag==1)
flag=0;
}
void nanbei() //南北绿灯东西红灯及数码管显示
{ //南北通行
uint num;
num=60;
disp(num);
while(num<=60&&num>0)
{ PA=0xd8;
num--;
P1=0xe1;
disp(num);
}
}
void nanbeizuo() //南北方向左转及数码管显示
{ uint num;
num=15;
disp(num);
while(num<=15&&num>0)
{ P1=0xe4;
num--;
PA=0xe9;
disp(num);
}
}
void dongxizuo() //东西方向左转及数码管显示
{ uint num;
num=15;
while(num<=15&&num>0)
{ P1=0xe4;
PA=0xea;
disp(num);
num--;
}
}
void dongxi() //东西绿灯南北红灯及数码管显示
{ uint num;
num=45;
disp(num);
while(num<=45&&num>0)
{
PA=0xe4;
P1=0xcc;
disp(num);
num--;
}
}
void nb_flash(void) //南北方向黄灯闪烁及数码管显示
{
uint a;
for(a=3;a>0;a-属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5000 2020-05-28 17:33 新建文件夹 (2)\main.c
文件 28063 2020-05-28 17:35 新建文件夹 (2)\实训.pdsprj
文件 1601024 2020-06-08 18:07 新建文件夹 (2)\实验报告.doc
目录 0 2020-06-08 18:07 新建文件夹 (2)\
相关资源
- C语言面试笔试题,经典题目
- C语言编程常见问题解答.pdf
- 操作系统c语言模拟文件管理系统844
- C语言开发实战宝典
- C++中头文件与源文件的作用详解
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 计算机二级C语言上机填空,改错,编
- 用回溯法解决八皇后问题C语言实现
- 简易教务管理系统c语言开发文档
- 操作系统课设 读写者问题 c语言实现
- 小波变换算法 c语言版
- C流程图生成器,用C语言代码 生成C语
- 3des加密算法C语言实现
- 简单的C语言点对点聊天程序
- 单片机c语言源程序(51定时器 八个按
- 个人日常财务管理系统(C语言)
- c语言电子商务系统
- 小甲鱼C语言课件 源代码
- 将图片转换为C语言数组的程序
- C语言实现的一个内存泄漏检测程序
- DES加密算法C语言实现
- LINUX下命令行界面的C语言细胞游戏
- 用单片机控制蜂鸣器播放旋律程序(
- 学校超市选址问题(数据结构C语言版
川公网安备 51152502000135号
评论
共有 条评论