/*********************************文件注释*******************************
* @project(项目)
xxx
* @file(文件名)
main.c
* @Description(说明)
实现功能:
一共有4个窗口。每个窗口显示一个参数。
第8,7,6,5位数码管显示当前窗口,P-1代表第1个窗口,P-2代表第2个窗口,P-3代表第3个窗口,P-4代表第1个窗口。
第4,3,2,1位数码管显示当前窗口被设置的参数。范围是从0到9999。
有三个按键。
一个是加按键,按下此按键会依次增加当前窗口的参数。
一个是减按键,按下此按键会依次减少当前窗口的参数。
一个是切换窗口按键,按下此按键会依次循环切换不同的窗口。
并且要求被设置的数据不显示为0的高位。
比如参数是12时,不能显示“0012”,只能第4,3位不显示,第2,1位显示“12”。
功能: CEPARK CAN开发板-CAN主从就实验
*说明:数码管从右到左分别是1~4位。
* 数码管1、2位显示发送的数据,3、4位显示接收到的数据。
* 每按一次中断按键发送数据值增一。
*芯片:STC89C52RC
* @author(作者)
qw
* @version(版本号)
V1.0
* @date(日期)
2023-1-28
* @Company(公司)
* @History(历史修改记录)
*跳线:无
*版本:CEPARK CAN总线开发板v3.0
<author> <time> <version > <desc>
*******************************************************************************/
/*
开场白:
上一节在第4,3,2,1位显示设置的参数时,还有一点小瑕疵。
比如设置参数等于56时,实际显示的是“0056”,也就是高位为0的如果不显示,效果才会更好。
这一节要教会大家两个知识点:
第一个:在上一节Smg_Service()函数里略作修改,把高位为0的去掉不显示。
第二个:加深熟悉鸿哥首次提出的“一二级菜单显示理论”:
凡是人机界面显示,不管是数码管还是液晶屏,都可以把显示的内容分成不同的窗口来显示,
每个显示的窗口中又可以分成不同的局部显示。
其中窗口就是一级菜单,用ucWd变量表示。局部就是二级菜单,用ucPart来表示。
不同的窗口,会有不同的更新显示变量ucWdXUpdate来对应,表示整屏全部更新显示。
不同的局部,也会有不同的更新显示变量ucWdXPartYUpdate来对应,表示局部更新显示。
*/
#include <reg52.h>
#include <absacc.h>
/**********************
字符符号类型缩写
************************/
#define u8 unsigned char
#define u16 unsigned short int
#define u32 unsigned long int
#define s8 signed char
#define s16 signed short int
#define s32 signed long int
#define u64 unsigned long long int
#define s64 signed long long int
/**********************
SJA1000 寄存器配置
************************/
/*CAN总线SJA1000寄存器地址定义(用的是PeliCAN模式,扩展帧EFF模式)*/
//为什么地址上0xFE00
//FE是因为我们有16位的地址线。P0口是低8位地址,P2口是高8位地址。
//而P20是接的CS端一定要是为0,所以地址是FE.
//定义SJA1000的基址
//#define SJA_BaseAdr 0X7F00 //决定CS接到P2口的那个管脚,这样定义就是P2.7
//#define SJA_BaseAdr 0XFE00 //决定CS接到P2口的那个管脚,这样定义就是P2.0
#define SJA_BASE_ADR 0xfe00 //寄存器地址的基址
//SJA1000寄存器地址定义,作用在Peli模式,扩展帧方式
/**********************
模式控制寄存器及其位定义
************************/
#define SJA_MOD XBYTE[SJA_BASE_ADR + 0x00]
#define RM_BIT 0x01 //复位模式请求位
#define LOM_BIT 0x02 //只听模式位
#define STM_BIT 0x04 //自检模式位
#define AFM_BIT 0x08 //验收滤波器模式位
#define SM_BIT 0x10 //睡眠模式位
/**********************
命令寄存器及其位定义
************************/
#define SJA_CMR XBYTE[SJA_BASE_ADR + 0x01]
#define TR_BIT 0x01 //发送请求位
#define AT_BIT 0x02 //中止发送位
#define RRB_BIT 0x04 //释放接收缓冲器位
#define CDO_BIT 0x08 //清除数据溢出位
#define SRR_BIT 0x10 //自身接收请求位
/**********************
状态寄存器及其位定义
************************/
#define SJA_SR XBYTE[SJA_BASE_ADR + 0x02]
#define RBS_BIT 0x01 //接收缓冲器状态位
#define DOS_BIT 0x02 //数据溢出状态位
#define TBS_BIT 0x04 //发送缓冲器状态位
#define TCS_BIT 0x08 //发送完成状态位
#define RS_BIT 0x10 //接收状态位
#define TS_BIT 0x20 //发送状态位
#define ES_BIT 0x40 //错误状态位
#define BS_BIT 0x80 //总线状态位
/**********************
中断寄存器及其位定义
************************/
#define SJA_IR XBYTE[SJA_BASE_ADR + 0x03]
#define RI_BIT 0x01 //接收中断位
#define TI_BIT 0x02 //发送中断位
#define EI_BIT 0x04 //错误警告中断位
#define DOI_BIT 0x08 //数据溢出中断位
#define WUI_BIT 0x10 //唤醒中断位
#define EPI_BIT 0x20 //错误消极中断位
#define ALI_BIT 0x40 //仲裁丢失中断位
#define BEI_BIT 0x80 //总线错误中断位
/**********************
中断使能寄存器及其位定义
************************/
#define SJA_IER XBYTE[SJA_BASE_ADR + 0x04]
#define RIE_BIT 0x01 //接收中断使能位
#define TIE_BIT 0x02 //发送中断使能位
#define EIE_BIT 0x04 //错误警告中断使能位
#define DOIE_BIT 0x08 //数据溢出中断使能位
#define WUIE_BIT 0x10 //唤醒中断使能位
#define EPIE_BIT 0x20 //错误消极中断使能位
#define ALIE_BIT 0x40 //仲裁丢失中断使能位
#define BEIE_BIT 0x80 //总线错误中断使能位
#define SJA_BTR0 XBYTE[SJA_BASE_ADR + 0x06] //总线定时器0寄存器
#define SJA_BTR1 XBYTE[SJA_BASE_ADR + 0x07] //总线定时器1寄存器
#define SAM_BIT 0x80 //采样模式位;0==总线被采样1次;1== 总线被采样3次
/**********************
输出控制寄存器及其位定义
************************/
#define SJA_OCR XBYTE[SJA_BASE_ADR + 0x08]
/*OCMODE1 ,OCMODE0 */
#define BiPhaseMode 0x00 //双相输出模式
#define NormalMode 0x02 //正常输出模式
#define ClkOutMode (0x01|0x02) //时钟输出模式
/*TX1 的输出管脚配置*/
#define OCPOL1_BIT 0x20 //输出极性控制位
#define Tx1Float 0x00 //配置为悬空
#define Tx1PullDn 0x40 //配置为下拉
#define Tx1PullUp 0x80 //配置为上拉
#define Tx1PshPull (0x40|0x80) //配置为推挽
/*TX0 的输出管脚配置*/
#define OCPOL0_BIT 0x04 //输出极性控制位
#define Tx0Float 0x00 //配置为悬空
#define Tx0PullDn 0x08 //配置为下拉
#define Tx0PullUp 0x10 //配置为上拉
#define Tx0PshPull (0x10|0x08) //配置为推挽
#define SJA_TEST XBYTE[SJA_BASE_ADR + 0x09] //测试寄存器
/********************************
* #define SJA_10 XBYTE[SJA_BASE_ADR + 0x0a] 寄存器功能保留
********************************/
/**********************
其他寄存器及其位定义
************************/
#define SJA_ALC XBYTE[SJA_BASE_ADR + 0x0b] //仲裁丢失捕捉寄存器
#define SJA_ECC XBYTE[SJA_BASE_ADR + 0x0c] //错误捕捉寄存器
#define SJA_EWLR XBYTE[SJA_BASE_ADR + 0x0d] //错误报警限制寄存器
#define SJA_RXERR XBYTE[SJA_BASE_ADR + 0x0e] //RX 错误计数器寄存器
#define SJA_TXERR XBYTE[SJA_BASE_ADR + 0x0f] //TX 错误计数器寄存器
/**********************
验收滤波器寄存器及其位定义
************************/
#define SJA_ACR0 XBYTE[SJA_BASE_ADR + 0x10] //验收代码0寄存器
#define SJA_ACR1 XBYTE[SJA_BASE_ADR + 0x11] //验收代码1寄存器
#define SJA_ACR2 XBYTE[SJA_BASE_ADR + 0x12] //验收代码2寄存器
#define SJA_ACR3 XBYTE[SJA_BASE_ADR + 0x13] //验收代码3寄存器
#define SJA_AMR0 XBYTE[SJA_BASE_ADR + 0x14] //验收屏
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
STC89C_SJA1000_TJA1050.rar (95个子文件)
8-2 2个节点的CAN收发(2块CAN开发板)-一发一收
自改-简单
两点通讯.c 41KB
自收发.LST 67KB
两点通讯.LST 67KB
main.M51 22KB
两点通讯.OBJ 29KB
A点.c 41KB
main.uvproj 14KB
自收发.OBJ 28KB
main.lnp 44B
main.uvopt 5KB
main.uvgui.Administrator 69KB
main.build_log.htm 1KB
B点.c 41KB
main.hex 4KB
main 25KB
SJAPeliCAN.H 8KB
main.uvgui.qw 88KB
源程序
STARTUP.LST 14KB
main.OBJ 19KB
STARTUP.A51 6KB
main.M51 13KB
main.LST 9KB
config.h 446B
main.uvproj 14KB
main.lnp 56B
main.uvopt 5KB
main.uvgui.Administrator 70KB
STARTUP.OBJ 749B
main.hex 2KB
main 18KB
main.c 5KB
SJAPeliCAN.H 8KB
kill.bat 416B
自改-主从
主
主节点.LST 69KB
主节点.OBJ 27KB
main.M51 21KB
main.uvproj 14KB
main.lnp 42B
main.uvopt 5KB
main.build_log.htm 1KB
主节点.c 43KB
main.hex 3KB
main 23KB
SJAPeliCAN.H 8KB
main.uvgui.qw 88KB
从
从节点.c 42KB
main.M51 19KB
从节点.LST 69KB
从节点.OBJ 26KB
main.uvproj 14KB
main.lnp 42B
main.uvopt 5KB
main.build_log.htm 1KB
main.hex 3KB
main 23KB
SJAPeliCAN.H 8KB
main.uvgui.qw 88KB
8-1 CAN自收发(一块CAN开发板)-自收正常(自收发一样大)-源程序
STARTUP.LST 14KB
main_uvproj.bak 14KB
main.OBJ 19KB
main.uvgui_Administrator.bak 70KB
STARTUP.A51 6KB
main.M51 13KB
main.LST 10KB
config.h 446B
main.uvproj 14KB
main.lnp 56B
main.uvopt 7KB
main.uvgui.Administrator 89KB
STARTUP.OBJ 749B
main.build_log.htm 795B
main.hex 2KB
main.c 5KB
main_uvopt.bak 7KB
SJAPeliCAN.H 9KB
8-1 CAN自收发(一块CAN开发板)-自收发显示不一样--已发现问题)
自收发.c 41KB
main.OBJ 27KB
自收发.LST 67KB
main.M51 22KB
new.OBJ 28KB
main.LST 46KB
config.h 446B
main.uvproj 14KB
自收发.OBJ 28KB
main.lnp 42B
main.uvopt 5KB
new.LST 66KB
main.uvgui.Administrator 88KB
main.build_log.htm 1KB
main.hex 4KB
main 25KB
kill.bat 416B
SJAPeliCAN.H 8KB
自收发(旧版本).c 29KB
main.uvgui.qw 88KB
共 95 条
- 1
资源评论
属鼠的金牛
- 粉丝: 87
- 资源: 18
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Qt开发知识、经验总结 包括Qss,数据库,Excel,Model/View等
- IV数据.xlsx
- foldcraftlauncher_262944.apk
- 珍藏多年的基于matlab实现潮流计算程序源代码集合,包含多个潮流计算程序.rar
- 使用FPGA实现串-并型乘法器
- 基于matlab实现针对基于双曲线定位的DV-Hop算法中误差误差出一种基于加权双曲线定位的DV-Hop改进算法.rar
- 基于matlab实现由遗传算法开发的整数规划,车辆调度问题.rar
- 电视家7.0(对电视配置要求高).apk
- 免费计算机毕业设计-基于JavaEE的医院病历管理系统设计与实现(包含论文+源码)
- 手机端 我的世界融合植物大战僵尸版.apk
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功