protues仿真 51点亮点阵
2013-11-18 20:41
239 查看
电路图
程序
程序
/*============================== 点亮点阵心形 ================================*/ #include <REGX51.H> #include <intrins.h> #define uchar unsigned char #define uint unsigned int sbit st_cpA = P1^4; sbit sh_cpA = P1^7; sbit dsA = P1^6; sbit st_cpB = P1^2; sbit sh_cpB = P1^0; sbit dsB = P1^1; void sendMessageA(uchar messageA);//发送一个字节到移位寄存器中 列 void outputMessageA();//输出到存储寄存器中 void sendMessageB(uchar messageB); //行 void outputMessageB(); void delay(uchar time_delay); uchar code rows[] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; uchar code cols[] = { 0xc9, 0xb6, 0xbe, 0xdd, 0xeb, 0xf7, 0xff, 0xff}; void main() { uchar i = 0; while(1) { //扫描显示 for(i = 0; i < 8; i++) { sendMessageB(rows[i]); outputMessageB(); sendMessageA(cols[i]); outputMessageA(); //delay(5000); } } } void sendMessageA(uchar messageA) { uchar i = 0; for(; i < 8; i ++) { sh_cpA = 0; dsA = messageA & 0x80;//先写入最高位 messageA = messageA << 1;//左移移位 sh_cpA = 1; } } void sendMessageB(uchar messageB) { uchar i = 0; for(; i < 8; i ++) { sh_cpB = 0; dsB = messageB & 0x80;//先写入最高位 messageB = messageB << 1;//左移移位 sh_cpB = 1; } } void outputMessageA() { st_cpA = 0; _nop_(); st_cpA = 1; } void outputMessageB() { st_cpB = 0; _nop_(); st_cpB = 1; } //延时函数 void delay(uchar time_delay) { uchar x,y; for(x = time_delay; x > 0; x --) for(y = time_delay; y > 0; y--) {} }
相关文章推荐
- protues 51仿真的一个好博客
- 51单片机扩展protues仿真
- 基于proteus的51单片机仿真实例九、51单片机的最小工作系统
- 基于proteus的51单片机仿真实例二十五、C51中移位位运算符演示实例
- 基于proteus的51单片机仿真实例四十、C语言的文件调用
- 基于proteus的51单片机仿真实例四十二、C语言的二维数组演示实例
- 基于proteus的51单片机仿真实例五十八、定时器/计数器T1的定时实例
- 基于proteus的51单片机仿真实例六十一、串口发送字符串实例
- 51单片机之外设——点亮LED
- 点亮细胞51-60
- 51单片机之IIC通信原理及软件仿真
- 使用keil & protues 进行仿真
- protues中LM032的仿真
- AMPIRE12864显示汉字(protues仿真)
- 悲剧的protues仿真
- 51proteus仿真:7段数码管显示小数
- protues仿真之数码管消影问题
- 基于proteus的51单片机仿真实例十、51单片机的P0口的工作原理
- 基于proteus的51单片机仿真实例二十六、“万能逻辑电路”实验
- 基于proteus的51单片机仿真实例四十一、C语言的一维数组