完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
回复本帖可获得 1 分积分奖励! 每人限 1 次(中奖概率 10%) |
最近在学单片机 买了个学习板,板子上面有个pcf8951芯片,没找到有关教程,只找到了一下程序,但是在主函数中那句write_one(t); 没看懂,定义一个变量t 前面也 没有给t赋初值,直接做了子函数的实参,既然没有赋值,怎么能把t作为数据写入呢?求大神帮忙解惑,小弟感激不尽!!!小弟QQ11316725, 小弟初学单片机,有兴趣一起学习的可以加我QQ ,大家一起讨论。。。
#include #define uchar unsigned char #define uint unsigned int ***it sda=P2^0; ***it scl=P2^1; ***it dula=P2^6; ***it wela=P2^7; uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //数码管0-9 abcdef代码 void delay(uchar i); void delay1(uchar z); void init(); void start(); void stop(); void ack(); void write_one(uchar date); uchar read_one(); void display(uint temp); uint t; void main() { init(); while(1) { start(); write_one(0x90); ack(); write_one(0x40); ack(); write_one(t); ack(); stop(); delay(15); start(); write_one(0x91); ack(); t=read_one(); stop(); delay1(10); display(t); } } /******************************************** 短暂的延时 ********************************************/ void delay(uchar i) { while(i--); } /******************************************** 延时 ********************************************/ void delay1(uchar z) { uchar x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } /******************************************** I2C的初始化 ********************************************/ void init() { sda=1; scl=1; } /******************************************** I2C的开始信号 ********************************************/ void start() { sda=1; delay(1); scl=1; delay(1); sda=0; delay(1); } /******************************************** I2C的停止信号 ********************************************/ void stop() { sda=0; delay(1); scl=1; delay(1); sda=1; delay(1); } /******************************************** 应答信号 ********************************************/ void ack() { uchar i; sda=1; delay(1); scl=1; delay(1); while((sda==0)&&(i<200))i++; scl=0; delay(1); } /******************************************** 写一个字节 ********************************************/ void write_one(uchar date) { uchar i,temp; scl=0; delay(1); temp=date; for(i=0;i<8;i++) { temp=temp<<1; sda=CY; scl=1; delay(1); scl=0; delay(1); } sda=1; delay(1); } /******************************************** 读一个字节 ********************************************/ uchar read_one() { uchar i,j,k; scl=0; delay(1); sda=1; //释放数据线 delay(1); for(i=0;i<8;i++) { scl=1; delay(1); j=sda; k=(k<<1)|j; scl=0; delay(1); } return k; } /******************************************** 数码管的显示函数 ********************************************/ void display(uint temp) { float m; uchar ge,shi,bai; m=(temp/255.0)*5.0; temp=m*100; ge=temp%10; shi=temp%100/10; bai=temp/100; dula=1; P0=table[bai]; dula=0; P0=0xff; wela=1; P0=0xfe; wela=0; delay1(1); dula=1; P0=table[shi]; dula=0; P0=0xff; wela=1; P0=0xfd; wela=0; delay1(1); dula=1; P0=table[ge]; dula=0; P0=0xff; wela=1; P0=0xfb; wela=0; /*delay1(1);*/ } |
|
相关推荐
4个回答
|
|
哦 对了!这是一个完整并且正确的程序,小弟亲测过!
|
|
|
|
t在最开始已经定义了,这只是一个函数的调用而已,最下面有函数的定义
|
|
|
|
楼主这个程序应该是个 储存芯片读写的测试程序吧,程序运行效果是否一直显示“0”呢,首先t是个全局变量,如果不赋值那么默认是“0”,按照我对程序结构的理解,程序实现的功能应该是首先将t写入进存储芯片,然后再去读取存储芯片内的数据,最后显示出来,,实际上就是验证是否能正常读写。楼主你试着对t付个其他初值看看效果呢?
|
|
|
|
刚刚上网,谢谢楼上两位解答,小弟待会去测试下。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
使用Keil建立完整的工程,并使用外部中断0触发数码管显示903
280 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
1083 浏览 0 评论
846 浏览 0 评论
886 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
869 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11824 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-30 05:16 , Processed in 0.926275 second(s), Total 80, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号